diff options
author | Ian Lynagh <ian@well-typed.com> | 2013-03-12 18:19:22 +0000 |
---|---|---|
committer | Ian Lynagh <ian@well-typed.com> | 2013-03-12 18:19:22 +0000 |
commit | 9f8ee071d99e0782e3e0ac484c50e29b93119769 (patch) | |
tree | a12d7dc67c9325d9ddc85443388d78b4d5958032 /rules | |
parent | 8a50206c51a534bc00a7a008c08b6adb3f76aa76 (diff) | |
parent | d7da7fa11910f7a0f80d2a1e6857bcb9c200a28e (diff) | |
download | haskell-9f8ee071d99e0782e3e0ac484c50e29b93119769.tar.gz |
Merge branch 'master' of win:c:/ghc/git/cygwin/.
Diffstat (limited to 'rules')
-rw-r--r-- | rules/build-package-way.mk | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk index 4621482d82..c67e25875e 100644 --- a/rules/build-package-way.mk +++ b/rules/build-package-way.mk @@ -27,6 +27,16 @@ $1_$2_$3_LIB_NAME = libHS$$($1_PACKAGE)-$$($1_$2_VERSION)$$($3_libsuf) $1_$2_$3_LIB = $1/$2/build/$$($1_$2_$3_LIB_NAME) $$($1_PACKAGE)-$$($1_$2_VERSION)_$2_$3_LIB = $$($1_$2_$3_LIB) +ifeq "$3" "dyn" +ifeq "$$(HostOS_CPP)" "mingw32" +ifneq "$$($1_$2_dll0_HS_OBJS)" "" +$1_$2_$3_LIB0_ROOT = HS$$($1_PACKAGE)-$$($1_$2_VERSION)-0$$($3_libsuf) +$1_$2_$3_LIB0_NAME = lib$$($1_$2_$3_LIB0_ROOT) +$1_$2_$3_LIB0 = $1/$2/build/$$($1_$2_$3_LIB0_NAME) +endif +endif +endif + # Note [inconsistent distdirs] # hack: the DEPS_LIBS mechanism assumes that the distdirs for packages # that depend on each other are the same, but that is not the case for @@ -52,14 +62,12 @@ ifeq "$3" "dyn" # On windows we have to supply the extra libs this one links to when building it. ifeq "$$(HostOS_CPP)" "mingw32" $$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) $$(ALL_RTS_LIBS) $$($1_$2_$3_DEPS_LIBS) - $$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) $$($1_$2_$3_GHC_LD_OPTS) $$($1_$2_$3_ALL_OBJS) \ - -shared -dynamic -dynload deploy \ - $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES)) \ - -no-auto-link-packages \ - -o $$@ -# Now check that the DLL doesn't have too many symbols. See trac #5987. - case `$$(OBJDUMP) -p $$@ | sed -n "1,/^.Ordinal\/Name Pointer/ D; p; /^$$$$/ q" | grep "\[ *0\]" | wc -l` in 1) echo DLL $$@ OK;; 0) echo No symbols in DLL $$@; exit 1;; [0-9]*) echo Too many symbols in DLL $$@; exit 1;; *) echo bad DLL $$@; exit 1;; esac - +ifneq "$$($1_$2_$3_LIB0)" "" + $$(call build-dll,$1,$2,$3,,$$($1_$2_dll0_HS_OBJS) $$($1_$2_$3_NON_HS_OBJS),$$($1_$2_$3_LIB0)) + $$(call build-dll,$1,$2,$3,-L$1/$2/build -l$$($1_$2_$3_LIB0_ROOT),$$(filter-out $$($1_$2_dll0_HS_OBJS),$$($1_$2_$3_HS_OBJS)) $$($1_$2_$3_NON_HS_OBJS),$$@) +else + $$(call build-dll,$1,$2,$3,,$$($1_$2_$3_HS_OBJS) $$($1_$2_$3_NON_HS_OBJS),$$@) +endif else $$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) $$(ALL_RTS_LIBS) $$($1_$2_$3_DEPS_LIBS) $$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) $$($1_$2_$3_GHC_LD_OPTS) $$($1_$2_$3_ALL_OBJS) \ @@ -93,6 +101,7 @@ $(call all-target,$1_$2_$3,$$($1_$2_$3_LIB)) ifneq "$4" "0" BINDIST_HI += $$($1_$2_$3_HI) BINDIST_LIBS += $$($1_$2_$3_LIB) +BINDIST_LIBS += $$($1_$2_$3_LIB0) endif # Build the GHCi library @@ -122,3 +131,19 @@ endif $(call profEnd, build-package-way($1,$2,$3)) endef +# $1 = dir +# $2 = distdir +# $3 = way +# $4 = extra flags +# $5 = object files to link +# $6 = output filename +define build-dll + $(call cmd,$1_$2_HC) $($1_$2_$3_ALL_HC_OPTS) $($1_$2_$3_GHC_LD_OPTS) $4 $5 \ + -shared -dynamic -dynload deploy \ + $(addprefix -l,$($1_$2_EXTRA_LIBRARIES)) \ + -no-auto-link-packages \ + -o $6 +# Now check that the DLL doesn't have too many symbols. See trac #5987. + case `$(OBJDUMP) -p $6 | sed -n "1,/^.Ordinal\/Name Pointer/ D; p; /^$$/ q" | grep "\[ *0\]" | wc -l` in 1) echo DLL $6 OK;; 0) echo No symbols in DLL $6; exit 1;; [0-9]*) echo Too many symbols in DLL $6; $(OBJDUMP) -p $6 | sed -n "1,/^.Ordinal\/Name Pointer/ D; p; /^$$/ q" | tail; exit 1;; *) echo bad DLL $6; exit 1;; esac +endef + |