[commit: ghc] master: Actually build things the dynamic way (16a8414)

Ian Lynagh <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/16a8414061a1fef7d90e162e5253d3005cb11806

>---------------------------------------------------------------

commit 16a8414061a1fef7d90e162e5253d3005cb11806
Author: Ian Lynagh <[email protected]>
Date:   Thu Oct 4 16:00:17 2012 +0100

    Actually build things the dynamic way
    
    Things went back to being statically linked again once I added an
    explicit -static flag to the vanilla way.

>---------------------------------------------------------------

 rules/build-dependencies.mk  |    4 ++--
 rules/build-prog.mk          |   41 +++++++++++++++++++++++++----------------
 utils/mkUserGuidePart/ghc.mk |    6 ++++--
 3 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk
index a37ff16..edde237 100644
--- a/rules/build-dependencies.mk
+++ b/rules/build-dependencies.mk
@@ -35,7 +35,7 @@ $$($1_$2_depfile_haskell) : $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS) $$($1_$2_HC
 	$$(call removeFiles,[email protected])
 ifneq "$$($1_$2_HS_SRCS)" ""
 	"$$($1_$2_HC_MK_DEPEND)" -M $$($1_$2_MKDEPENDHS_FLAGS) \
-	    $$(filter-out -split-objs, $$($1_$2_v_ALL_HC_OPTS)) \
+	    $$(filter-out -split-objs, $$($1_$2_$$(firstword $$($1_$2_WAYS))_ALL_HC_OPTS)) \
 	    $$($1_$2_HS_SRCS)
 endif
 	echo "$1_$2_depfile_haskell_EXISTS = YES" >> [email protected]
@@ -125,7 +125,7 @@ endef
 #    to "i" on Windows and "" on any other platform.
 define addCFileDeps
 
-	$(CPP) $($1_$2_MKDEPENDC_OPTS) $($1_$2_v_ALL_CC_OPTS) $($(basename $4)_CC_OPTS) -MM $4 -MF $3.bit
+	$(CPP) $($1_$2_MKDEPENDC_OPTS) $($1_$2_$(firstword $($1_$2_WAYS))_ALL_CC_OPTS) $($(basename $4)_CC_OPTS) -MM $4 -MF $3.bit
 	$(foreach w,$5,sed -e 's|\\|/|g' -e 's| /$$| \\|' -e "1s|\.o|\.$($w_osuf)|" -e "1s|^|$(dir $4)|" -e "1s|$1/|$1/$2/build/|" -e "1s|$2/build/$2/build|$2/build|g" -e "s|$(TOP)/||g$(CASE_INSENSITIVE_SED)" $3.bit >> $3.tmp &&) true
 endef
 
diff --git a/rules/build-prog.mk b/rules/build-prog.mk
index 6e6d1c1..239f55c 100644
--- a/rules/build-prog.mk
+++ b/rules/build-prog.mk
@@ -121,41 +121,50 @@ endif
 
 $(call shell-wrapper,$1,$2)
 
-$1_$2_WAYS = v
+ifeq "$$($1_$2_PROGRAM_WAY)" ""
+ifeq "$3" "0"
+$1_$2_PROGRAM_WAY = v
+else ifeq "$$(DYNAMIC_BY_DEFAULT)" "YES"
+$1_$2_PROGRAM_WAY = dyn
+else
+$1_$2_PROGRAM_WAY = v
+endif
+endif
+
+$1_$2_WAYS = $$($1_$2_PROGRAM_WAY)
 
 $(call hs-sources,$1,$2)
 $(call c-sources,$1,$2)
 
 # --- IMPLICIT RULES
 
-# Just the 'v' way for programs
-$(call distdir-way-opts,$1,$2,v,$3)
+$(call distdir-way-opts,$1,$2,$$($1_$2_PROGRAM_WAY),$3)
 
 ifeq "$3" "0"
 # For stage 0, we use GHC to compile C sources so that we don't have to
 # worry about where the RTS header files are
-$(call c-suffix-rules,$1,$2,v,YES)
+$(call c-suffix-rules,$1,$2,$$($1_$2_PROGRAM_WAY),YES)
 else
 ifeq "$$($1_$2_UseGhcForCC)" "YES"
-$(call c-suffix-rules,$1,$2,v,YES)
+$(call c-suffix-rules,$1,$2,$$($1_$2_PROGRAM_WAY),YES)
 else
-$(call c-suffix-rules,$1,$2,v,NO)
+$(call c-suffix-rules,$1,$2,$$($1_$2_PROGRAM_WAY),NO)
 endif
 endif
 
-$(call hs-suffix-rules,$1,$2,v)
+$(call hs-suffix-rules,$1,$2,$$($1_$2_PROGRAM_WAY))
 $$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
-  $$(eval $$(call hs-suffix-rules-srcdir,$1,$2,v,$$(dir))))
+  $$(eval $$(call hs-suffix-rules-srcdir,$1,$2,$$($1_$2_PROGRAM_WAY),$$(dir))))
 
-$(call c-objs,$1,$2,v)
-$(call hs-objs,$1,$2,v)
+$(call c-objs,$1,$2,$$($1_$2_PROGRAM_WAY))
+$(call hs-objs,$1,$2,$$($1_$2_PROGRAM_WAY))
 
 $1_$2_LINK_WITH_GCC = NO
 ifeq "$$(BootingFromHc)" "YES"
 $1_$2_LINK_WITH_GCC = YES
 endif
 
-ifeq "$$($1_$2_v_HS_OBJS)" ""
+ifeq "$$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS)" ""
 # We don't want to link the GHC RTS into C-only programs. There's no
 # point, and it confuses the test that all GHC-compiled programs
 # were compiled with the right GHC.
@@ -171,7 +180,7 @@ endif
 endif
 
 ifneq "$$(BINDIST)" "YES"
-# The quadrupled $'s here are because the _v_LIB variables aren't
+# The quadrupled $'s here are because the _<way>_LIB variables aren't
 # necessarily set when this part of the makefile is read
 $1/$2/build/tmp/$$($1_$2_PROG) : \
     $$(foreach dep,$$($1_$2_DEP_NAMES),\
@@ -183,11 +192,11 @@ $1/$2/build/tmp/$$($1_$2_PROG) : \
         $$$$(libraries/$$(dep)_dist-$(if $(filter 0,$3),boot,install)_PROGRAM_DEP_LIB)))
 
 ifeq "$$($1_$2_LINK_WITH_GCC)" "NO"
-$1/$2/build/tmp/$$($1_$2_PROG) : $$($1_$2_v_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_OTHER_OBJS) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) -o $$@ $$($1_$2_v_ALL_HC_OPTS) $$(LD_OPTS) $$($1_$2_GHC_LD_OPTS) $$($1_$2_v_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_OTHER_OBJS) $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES))
+$1/$2/build/tmp/$$($1_$2_PROG) : $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) | $$$$(dir $$$$@)/.
+	$$(call cmd,$1_$2_HC) -o $$@ $$($1_$2_$$($1_$2_PROGRAM_WAY)_ALL_HC_OPTS) $$(LD_OPTS) $$($1_$2_GHC_LD_OPTS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES))
 else
-$1/$2/build/tmp/$$($1_$2_PROG) : $$($1_$2_v_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_OTHER_OBJS) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_CC) -o $$@ $$($1_$2_v_ALL_CC_OPTS) $$(LD_OPTS) $$($1_$2_v_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_OTHER_OBJS) $$($1_$2_v_EXTRA_CC_OPTS) $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES))
+$1/$2/build/tmp/$$($1_$2_PROG) : $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) | $$$$(dir $$$$@)/.
+	$$(call cmd,$1_$2_CC) -o $$@ $$($1_$2_$$($1_$2_PROGRAM_WAY)_ALL_CC_OPTS) $$(LD_OPTS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_EXTRA_CC_OPTS) $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES))
 endif
 
 # Note [lib-depends] if this program is built with stage1 or greater, we
diff --git a/utils/mkUserGuidePart/ghc.mk b/utils/mkUserGuidePart/ghc.mk
index ff91784..75371c3 100644
--- a/utils/mkUserGuidePart/ghc.mk
+++ b/utils/mkUserGuidePart/ghc.mk
@@ -13,8 +13,10 @@
 utils/mkUserGuidePart_dist_MODULES         = Main
 utils/mkUserGuidePart_dist_PROG            = mkUserGuidePart$(exeext)
 utils/mkUserGuidePart_dist_INSTALL_INPLACE = YES
-utils/mkUserGuidePart_HC_OPTS              = -package ghc -static
+utils/mkUserGuidePart_dist_PROGRAM_WAY     = v
+utils/mkUserGuidePart_HC_OPTS              = -package ghc
 
-utils/mkUserGuidePart/dist/build/Main.o: $(ALL_STAGE1_LIBS) $(compiler_stage2_PROGRAM_DEP_LIB)
+utils/mkUserGuidePart/dist/build/Main.o: $(ALL_STAGE1_LIBS)
+utils/mkUserGuidePart/dist/build/Main.o: $(compiler_stage2_v_LIB)
 
 $(eval $(call build-prog,utils/mkUserGuidePart,dist,1))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.