[commit: ghc] master: Build system: don't add ALL_HC_OPTS when linking (9fc2d77)

git at git.haskell.org git at git.haskell.org
Wed Oct 28 06:48:31 UTC 2015


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/9fc2d777f53110040f48ab27643a16888fa377f5/ghc

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

commit 9fc2d777f53110040f48ab27643a16888fa377f5
Author: Thomas Miedema <thomasmiedema at gmail.com>
Date:   Mon Oct 26 20:54:58 2015 +0100

    Build system: don't add ALL_HC_OPTS when linking
    
    Summary:
    The current scheme in rules/distdir-way-opts.mk is something like this:
      GHC_LD_OPTS      = MOST_HC_OPTS + ALL_LD_OPTS
      MOST_DIR_HC_OPTS = MOST_HC_OPTS + -odir,-hidir,-stubdir
      ALL_HC_OPTS      = MOST_DIR_HC_OPTS +
                            -hisuf,-osuf,-hcsuf,-split-objs,-dynamic-too
    
    Notice that both ALL_HC_OPTS and GHC_LD_OPTS include MOST_HC_OPTS, and
    currently both got added when linking. Adding MOST_HC_OPTS twice results
    in overly long and hard to decipher command lines (and build logs). This
    commit fixes that.
    
    Afaik, -odir,-hidir,-stubdir,-hisuf,-osuf,-hcsuf,-spit-objs,-dynamic-too
    are all not needed when linking, so this change should be safe to make.
    GHC_LD_OPTS is for linking, ALL_HC_OPTS is for compiling.
    
    ALL_HC_OPTS was added to the linking commands in
    37a6a52facd1c3999ce4472c50b0030568be1e04, to make sure
    -no-user-package-conf would be in the options list. It still is after
    this change.
    
    Reviewers: austin, bgamari
    
    Differential Revision: https://phabricator.haskell.org/D1379


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

9fc2d777f53110040f48ab27643a16888fa377f5
 rules/build-package-way.mk | 4 ++--
 rules/build-prog.mk        | 2 +-
 rules/distdir-way-opts.mk  | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk
index a10e538..592d3a7 100644
--- a/rules/build-package-way.mk
+++ b/rules/build-package-way.mk
@@ -91,7 +91,7 @@ endif
 
 else # ifneq "$$(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) \
+	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_LD_OPTS) $$($1_$2_$3_ALL_OBJS) \
          -shared -dynamic -dynload deploy \
 	 $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES)) $$(addprefix -L,$$($1_$2_EXTRA_LIBDIRS)) \
          -no-auto-link-packages \
@@ -170,7 +170,7 @@ endef # build-package-way
 # $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 \
+	$(call cmd,$1_$2_HC) $($1_$2_$3_GHC_LD_OPTS) $4 $5 \
 	    -shared -dynamic -dynload deploy \
 	    $(addprefix -l,$($1_$2_EXTRA_LIBRARIES)) \
 	    -no-auto-link-packages \
diff --git a/rules/build-prog.mk b/rules/build-prog.mk
index 1a49707..48b8aa2 100644
--- a/rules/build-prog.mk
+++ b/rules/build-prog.mk
@@ -255,7 +255,7 @@ $1/$2/build/tmp/$$($1_$2_PROG).dll : $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$(
 else # $1_$2_PROG_NEEDS_C_WRAPPER=NO
 ifeq "$$($1_$2_LINK_WITH_GCC)" "NO"
 $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) $$($1_$2_$$($1_$2_PROGRAM_WAY)_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))
+	$$(call cmd,$1_$2_HC) -o $$@ $$($1_$2_$$($1_$2_PROGRAM_WAY)_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_$$($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 $$$$@)/.
diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk
index 920ff07..e848943 100644
--- a/rules/distdir-way-opts.mk
+++ b/rules/distdir-way-opts.mk
@@ -131,7 +131,7 @@ $1_$2_$3_MOST_DIR_HC_OPTS = \
 # that -O0 is effective (see #5484)
 
 # $1_$2_$3_ALL_HC_OPTS: this is all the options we will pass to GHC
-# for a given ($1,$2,$3).
+# for a given ($1,$2,$3) when we use it for compiling.
 $1_$2_$3_ALL_HC_OPTS = \
  -hisuf $$($3_hisuf) -osuf  $$($3_osuf) -hcsuf $$($3_hcsuf) \
  $$($1_$2_$3_MOST_DIR_HC_OPTS) \



More information about the ghc-commits mailing list