build-package-way.mk 3.31 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
# -----------------------------------------------------------------------------
#
# (c) 2009 The University of Glasgow
#
# This file is part of the GHC build system.
#
# To understand how the build system works and how to modify it, see
#      http://hackage.haskell.org/trac/ghc/wiki/Building/Architecture
#      http://hackage.haskell.org/trac/ghc/wiki/Building/Modifying
#
# -----------------------------------------------------------------------------

Ian Lynagh's avatar
Ian Lynagh committed
13
14
15

define build-package-way # $1 = dir, $2 = distdir, $3 = way, $4 = stage

16
$(call distdir-way-opts,$1,$2,$3,$4)
Ian Lynagh's avatar
Ian Lynagh committed
17
18
19
20
21
22
$(call hs-suffix-rules,$1,$2,$3)
$$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
  $$(eval $$(call hs-suffix-rules-srcdir,$1,$2,$3,$$(dir))))

$(call hs-objs,$1,$2,$3)

23
24
25
# The .a/.so library file, indexed by two different sets of vars:
# the first is indexed by the dir, distdir and way
# the second is indexed by the package id, distdir and way
26
$1_$2_$3_LIB = $1/$2/build/libHS$$($1_PACKAGE)-$$($1_$2_VERSION)$$($3_libsuf)
27
28
29
30
$$($1_PACKAGE)-$($1_$2_VERSION)_$2_$3_LIB = $$($1_$2_$3_LIB)

# All the .a/.so library file dependencies for this library
$1_$2_$3_DEPS_LIBS=$$(foreach dep,$$($1_$2_DEPS),$$($$(dep)_$2_$3_LIB))
Ian Lynagh's avatar
Ian Lynagh committed
31

Ian Lynagh's avatar
Ian Lynagh committed
32
ifneq "$$(BootingFromHc)" "YES"
33
$1_$2_$3_MKSTUBOBJS = $$(FIND) $1/$2/build -name "*_stub.$$($3_osuf)" -print
Ian Lynagh's avatar
Ian Lynagh committed
34
35
# HACK ^^^ we tried to use $(wildcard), but apparently it fails due to
# make using cached directory contents, or something.
Ian Lynagh's avatar
Ian Lynagh committed
36
37
else
$1_$2_$3_MKSTUBOBJS = true
38
$1_$2_$3_C_OBJS += $$(shell $$(FIND) $1/$2/build -name "*_stub.c" -print | sed 's/c$$$$/o/')
Ian Lynagh's avatar
Ian Lynagh committed
39
endif
Ian Lynagh's avatar
Ian Lynagh committed
40

41
42
43
$1_$2_$3_NON_HS_OBJS = $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS)  $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
$1_$2_$3_ALL_OBJS = $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_NON_HS_OBJS)

44
45
ifeq "$3" "dyn"
# Link a dynamic library
46
47
48
$$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) $$(ALL_RTS_LIBS) $$($1_$2_$3_DEPS_LIBS)
	"$$($1_$2_HC)" $$($1_$2_$3_ALL_OBJS) \
         `$$($1_$2_$3_MKSTUBOBJS)` \
49
         -shared -dynamic -dynload deploy \
50
51
52
         -no-auto-link-packages $$(addprefix -package,$$($1_$2_DEPS)) \
         -o $$@
else
Ian Lynagh's avatar
Ian Lynagh committed
53
54
# Build the ordinary .a library
ifeq "$$($1_$2_SplitObjs)" "YES"
55
$$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS)
56
	"$$(RM)" $$(RM_OPTS) $$@
57
	(echo $$($1_$2_$3_NON_HS_OBJS) `$$($1_$2_$3_MKSTUBOBJS)`; $$(FIND) $$(patsubst %.$$($3_osuf),%_$$($3_osuf)_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print) | $$(XARGS) "$$(AR)" $(AR_OPTS) $$(EXTRA_AR_ARGS) $$@
Ian Lynagh's avatar
Ian Lynagh committed
58
else
59
$$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS)
60
	"$$(RM)" $$(RM_OPTS) $$@
61
	echo $$($1_$2_$3_ALL_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` | $$(XARGS) "$$(AR)" $(AR_OPTS) $$(EXTRA_AR_ARGS) $$@
Ian Lynagh's avatar
Ian Lynagh committed
62
endif
63
endif
Ian Lynagh's avatar
Ian Lynagh committed
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

$(call all-target,$1_$2,all_$1_$2_$3)
$(call all-target,$1_$2_$3,$$($1_$2_$3_LIB))

# Don't put bootstrapping packages in the bindist
ifneq "$4" "0"
BINDIST_HI += $$($1_$2_$3_HI)
BINDIST_LIBS += $$($1_$2_$3_LIB)
endif

# Build the GHCi library
ifeq "$3" "v"
$1_$2_GHCI_LIB = $1/$2/build/HS$$($1_PACKAGE)-$$($1_$2_VERSION).$$($3_osuf)
# Don't put bootstrapping packages in the bindist
ifneq "$4" "0"
BINDIST_LIBS += $$($1_$2_GHCI_LIB)
endif
81
82
$$($1_$2_GHCI_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
	"$$(LD)" -r -o $$@ $$(EXTRA_LD_OPTS) $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` $$($1_$2_EXTRA_OBJS)
Ian Lynagh's avatar
Ian Lynagh committed
83
84
85
86
87
88

$(call all-target,$1_$2,$$($1_$2_GHCI_LIB))
endif

endef