summaryrefslogtreecommitdiff
path: root/rules/build-package-way.mk
diff options
context:
space:
mode:
Diffstat (limited to 'rules/build-package-way.mk')
-rw-r--r--rules/build-package-way.mk52
1 files changed, 52 insertions, 0 deletions
diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk
new file mode 100644
index 0000000000..086c231b43
--- /dev/null
+++ b/rules/build-package-way.mk
@@ -0,0 +1,52 @@
+
+define build-package-way # $1 = dir, $2 = distdir, $3 = way, $4 = stage
+
+$(call distdir-way-opts,$1,$2,$3)
+$(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)
+
+$1_$2_$3_LIB = $1/$2/build/libHS$$($1_PACKAGE)-$$($1_$2_VERSION)$$($3__way).a
+
+$1_$2_$3_MKSTUBOBJS = find $1/$2/build -name "*_stub.$$($3_osuf)" -print
+# HACK ^^^ we tried to use $(wildcard), but apparently it fails due to
+# make using cached directory contents, or something.
+
+# Build the ordinary .a library
+ifeq "$$($1_$2_SplitObjs)" "YES"
+$$($1_$2_$3_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_C_OBJS) $$($1_$2_S_OBJS)
+ $$(RM) $$@
+ (echo $$($1_$2_C_OBJS) $$($1_$2_S_OBJS) `$$($1_$2_$3_MKSTUBOBJS)`; find $$(patsubst %.$$($3_osuf),%_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print) | xargs $$(AR) $$(EXTRA_AR_ARGS) $$@
+else
+$$($1_$2_$3_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_C_OBJS) $$($1_$2_S_OBJS)
+ $$(RM) $$@
+ echo $$($1_$2_C_OBJS) $$($1_$2_S_OBJS) $$($1_$2_$3_HS_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` | xargs $$(AR) $$(EXTRA_AR_ARGS) $$@
+endif
+
+$(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
+$$($1_$2_GHCI_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_C_OBJS) $$($1_$2_S_OBJS)
+ $$(RM) $$@
+ $$(LD) -r -o $$@ $$(EXTRA_LD_OPTS) $$($1_$2_$3_HS_OBJS) $$($1_$2_C_OBJS) $$($1_$2_S_OBJS) `$$($1_$2_$3_MKSTUBOBJS)`
+
+$(call all-target,$1_$2,$$($1_$2_GHCI_LIB))
+endif
+
+endef
+