From 02416f002b7f78c3842a622f53e1ed0aa143a337 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Wed, 9 Sep 2009 09:44:08 +0000 Subject: [PATCH] refactor *_OPTS settings in the build system; no functional changes --- ghc.mk | 1 - rts/ghc.mk | 3 -- rules/build-package.mk | 2 -- rules/build-prog.mk | 2 -- rules/distdir-opts.mk | 78 --------------------------------------------- rules/distdir-way-opts.mk | 60 ++++++++++++++++++++++++++++++++-- 6 files changed, 57 insertions(+), 89 deletions(-) delete mode 100644 rules/distdir-opts.mk diff --git a/ghc.mk b/ghc.mk index 3990462..0b43ea1 100644 --- a/ghc.mk +++ b/ghc.mk @@ -184,7 +184,6 @@ $(foreach way,$(ALL_WAYS),\ # ----------------------------------------------------------------------------- # Compilation Flags -include rules/distdir-opts.mk include rules/distdir-way-opts.mk # ----------------------------------------------------------------------------- diff --git a/rts/ghc.mk b/rts/ghc.mk index 5efcfd3..9c33896 100644 --- a/rts/ghc.mk +++ b/rts/ghc.mk @@ -23,9 +23,6 @@ ALL_RTS_LIBS = $(foreach way,$(rts_WAYS),rts/dist/build/libHSrts$($(way)_libsuf) rts/dist/build/libHSrtsmain.a all_rts : $(ALL_RTS_LIBS) -# The per-dir options -$(eval $(call distdir-opts,rts,dist)) - # ----------------------------------------------------------------------------- # Defining the sources diff --git a/rules/build-package.mk b/rules/build-package.mk index 8e81389..817d325 100644 --- a/rules/build-package.mk +++ b/rules/build-package.mk @@ -135,8 +135,6 @@ $1_$2_SplitObjs = NO endif endif -$(call distdir-opts,$1,$2,$3) - # C and S files are possibly built the "dyn" way. ifeq "$(BuildSharedLibs)" "YES" $(call c-objs,$1,$2,dyn) diff --git a/rules/build-prog.mk b/rules/build-prog.mk index 3631a90..360248d 100644 --- a/rules/build-prog.mk +++ b/rules/build-prog.mk @@ -83,8 +83,6 @@ $(call build-dependencies,$1,$2) # --- IMPLICIT RULES -$(call distdir-opts,$1,$2,$3) - # Just the 'v' way for programs $(call distdir-way-opts,$1,$2,v) diff --git a/rules/distdir-opts.mk b/rules/distdir-opts.mk deleted file mode 100644 index 5265efc..0000000 --- a/rules/distdir-opts.mk +++ /dev/null @@ -1,78 +0,0 @@ -# ----------------------------------------------------------------------------- -# -# (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 -# -# ----------------------------------------------------------------------------- - - -# Set compilation flags that depend on a particular directory/distdir - -define distdir-opts # args: $1 = dir, $2 = distdir -# $3 = GHC stage to use (0 == bootstrapping compiler) - -ifeq "$3" "0" -# This is a bit of a hack. -# If we are compiling something with the bootstrapping compiler on -# cygwin, and it uses an include file from the rts (say), then we -# need to stop mkdependC from generating a dependincy on -# c:/ghc/rts/include/Rts.h -# as that confuses make. So we use -isystem instead of -I, which stops -# these dependencies from being generated. Technically this is wrong if -# we depend on a library that is built inside the build tree, and we -# use headers from that library, but currently I don't think that's the -# case. -$1_$2_DEP_INCLUDE_DIRS_FLAG = -isystem -else -$1_$2_DEP_INCLUDE_DIRS_FLAG = -I -endif - -$1_$2_DIST_CC_OPTS = \ - $$(CONF_CC_OPTS) \ - $$(SRC_CC_OPTS) \ - $$($1_CC_OPTS) \ - $$(foreach dir,$$(filter-out /%,$$($1_$2_INCLUDE_DIRS)),-I$1/$$(dir)) \ - $$(foreach dir,$$(filter /%,$$($1_$2_INCLUDE_DIRS)),-I$$(dir)) \ - $$($1_$2_CC_OPTS) \ - $$($1_$2_CPP_OPTS) \ - $$(foreach dir,$$($1_$2_DEP_INCLUDE_DIRS),$$($1_$2_DEP_INCLUDE_DIRS_FLAG)$$(dir)) \ - $$($1_$2_DEP_CC_OPTS) - -$1_$2_DIST_LD_OPTS = \ - $$(CONF_LD_OPTS) \ - $$(SRC_LD_OPTS) \ - $$($1_LD_OPTS) \ - $$($1_$2_LD_OPTS) \ - $$(foreach opt,$$($1_$2_DEP_LIB_DIRS),-L$$(opt)) \ - $$(foreach opt,$$($1_$2_DEP_EXTRA_LIBS),-l$$(opt)) \ - $$($1_$2_DEP_LD_OPTS) - -# c.f. Cabal's Distribution.Simple.GHC.ghcOptions -$1_$2_DIST_HC_OPTS = \ - $$(CONF_HC_OPTS) \ - $$(SRC_HC_OPTS) \ - $$($1_HC_OPTS) \ - $$($1_$2_HC_PKGCONF) \ - $$(if $$($1_$2_PROG),, \ - $$(if $$($1_PACKAGE),-package-name $$($1_PACKAGE)-$$($1_$2_VERSION))) \ - $$(if $$($1_PACKAGE),-hide-all-packages) \ - -i $$(if $$($1_$2_HS_SRC_DIRS),$$(foreach dir,$$($1_$2_HS_SRC_DIRS),-i$1/$$(dir)),-i$1) \ - -i$1/$2/build -i$1/$2/build/autogen \ - -I$1/$2/build -I$1/$2/build/autogen \ - $$(foreach dir,$$(filter-out /%,$$($1_$2_INCLUDE_DIRS)),-I$1/$$(dir)) \ - $$(foreach dir,$$(filter /%,$$($1_$2_INCLUDE_DIRS)),-I$$(dir)) \ - $$(foreach inc,$$($1_$2_INCLUDE),-\#include "$$(inc)") \ - $$(foreach opt,$$($1_$2_CPP_OPTS),-optP$$(opt)) \ - $$(if $$($1_PACKAGE),-optP-include -optP$1/$2/build/autogen/cabal_macros.h) \ - $$(foreach pkg,$$($1_$2_DEPS),-package $$(pkg)) \ - $$(if $$(findstring YES,$$($1_$2_SplitObjs)),-split-objs,) \ - $$($1_$2_HC_OPTS) \ - $$($1_$2_EXTRA_HC_OPTS) - -endef - diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk index 7a23b72..dea1727 100644 --- a/rules/distdir-way-opts.mk +++ b/rules/distdir-way-opts.mk @@ -16,10 +16,10 @@ define distdir-way-opts # args: $1 = dir, $2 = distdir, $3 = way # Options for a Haskell compilation: -# - SRC_HC_OPTS source-tree-wide options -# (optimisation, heap settings) # - CONF_HC_OPTS source-tree-wide options, selected at # configure-time +# - SRC_HC_OPTS source-tree-wide options from build.mk +# (optimisation, heap settings) # - libraries/base_HC_OPTS options from libraries/base for all ways # - libraries/base_v_HC_OPTS options from libraries/base for way v # - WAY_v_HC_OPTS options for this way @@ -30,7 +30,25 @@ define distdir-way-opts # args: $1 = dir, $2 = distdir, $3 = way $1_$2_$3_MOST_HC_OPTS = \ $$(WAY_$3_HC_OPTS) \ - $$($1_$2_DIST_HC_OPTS) \ + $$(CONF_HC_OPTS) \ + $$(SRC_HC_OPTS) \ + $$($1_HC_OPTS) \ + $$($1_$2_HC_PKGCONF) \ + $$(if $$($1_$2_PROG),, \ + $$(if $$($1_PACKAGE),-package-name $$($1_PACKAGE)-$$($1_$2_VERSION))) \ + $$(if $$($1_PACKAGE),-hide-all-packages) \ + -i $$(if $$($1_$2_HS_SRC_DIRS),$$(foreach dir,$$($1_$2_HS_SRC_DIRS),-i$1/$$(dir)),-i$1) \ + -i$1/$2/build -i$1/$2/build/autogen \ + -I$1/$2/build -I$1/$2/build/autogen \ + $$(foreach dir,$$(filter-out /%,$$($1_$2_INCLUDE_DIRS)),-I$1/$$(dir)) \ + $$(foreach dir,$$(filter /%,$$($1_$2_INCLUDE_DIRS)),-I$$(dir)) \ + $$(foreach inc,$$($1_$2_INCLUDE),-\#include "$$(inc)") \ + $$(foreach opt,$$($1_$2_CPP_OPTS),-optP$$(opt)) \ + $$(if $$($1_PACKAGE),-optP-include -optP$1/$2/build/autogen/cabal_macros.h) \ + $$(foreach pkg,$$($1_$2_DEPS),-package $$(pkg)) \ + $$(if $$(findstring YES,$$($1_$2_SplitObjs)),-split-objs,) \ + $$($1_$2_HC_OPTS) \ + $$($1_$2_EXTRA_HC_OPTS) \ $$($1_$2_$3_HC_OPTS) \ $$($$*_HC_OPTS) \ $$(EXTRA_HC_OPTS) @@ -41,6 +59,42 @@ $1_$2_$3_ALL_HC_OPTS = \ -odir $1/$2/build -hidir $1/$2/build -stubdir $1/$2/build \ -hisuf $$($3_hisuf) -osuf $$($3_osuf) -hcsuf $$($3_hcsuf) +ifeq "$3" "0" +# This is a bit of a hack. +# If we are compiling something with the bootstrapping compiler on +# cygwin, and it uses an include file from the rts (say), then we +# need to stop mkdependC from generating a dependincy on +# c:/ghc/rts/include/Rts.h +# as that confuses make. So we use -isystem instead of -I, which stops +# these dependencies from being generated. Technically this is wrong if +# we depend on a library that is built inside the build tree, and we +# use headers from that library, but currently I don't think that's the +# case. +$1_$2_DEP_INCLUDE_DIRS_FLAG = -isystem +else +$1_$2_DEP_INCLUDE_DIRS_FLAG = -I +endif + +$1_$2_DIST_CC_OPTS = \ + $$(CONF_CC_OPTS) \ + $$(SRC_CC_OPTS) \ + $$($1_CC_OPTS) \ + $$(foreach dir,$$(filter-out /%,$$($1_$2_INCLUDE_DIRS)),-I$1/$$(dir)) \ + $$(foreach dir,$$(filter /%,$$($1_$2_INCLUDE_DIRS)),-I$$(dir)) \ + $$($1_$2_CC_OPTS) \ + $$($1_$2_CPP_OPTS) \ + $$(foreach dir,$$($1_$2_DEP_INCLUDE_DIRS),$$($1_$2_DEP_INCLUDE_DIRS_FLAG)$$(dir)) \ + $$($1_$2_DEP_CC_OPTS) + +$1_$2_DIST_LD_OPTS = \ + $$(CONF_LD_OPTS) \ + $$(SRC_LD_OPTS) \ + $$($1_LD_OPTS) \ + $$($1_$2_LD_OPTS) \ + $$(foreach opt,$$($1_$2_DEP_LIB_DIRS),-L$$(opt)) \ + $$(foreach opt,$$($1_$2_DEP_EXTRA_LIBS),-l$$(opt)) \ + $$($1_$2_DEP_LD_OPTS) + # c.f. Cabal's Distribution.Simple.PreProcess.ppHsc2hs # We use '' around cflags and lflags to handle paths with backslashes in # on Windows -- 1.7.10.4