diff options
author | Ian Lynagh <ian@well-typed.com> | 2013-02-21 15:05:22 +0000 |
---|---|---|
committer | Ian Lynagh <ian@well-typed.com> | 2013-02-21 15:05:22 +0000 |
commit | 0565f88e41bcd33fff52d884e2747c333d5d122e (patch) | |
tree | 0940bd985194022bb65d75fa83d7d66b20db91fc | |
parent | eb90651b42be335e12b814e7f44d7b92ba844352 (diff) | |
download | haskell-0565f88e41bcd33fff52d884e2747c333d5d122e.tar.gz |
Split non-way-specific variables off from distdir-way-opts into distdir-opts
The hsc2hs, alex and happy options variables are now also
non-way-specific, as the files are shared between all ways.
-rw-r--r-- | ghc.mk | 1 | ||||
-rw-r--r-- | rules/build-package.mk | 1 | ||||
-rw-r--r-- | rules/build-prog.mk | 1 | ||||
-rw-r--r-- | rules/distdir-opts.mk | 111 | ||||
-rw-r--r-- | rules/distdir-way-opts.mk | 97 | ||||
-rw-r--r-- | rules/hs-suffix-way-rules-srcdir.mk | 12 |
6 files changed, 120 insertions, 103 deletions
@@ -207,6 +207,7 @@ endif # ----------------------------------------------------------------------------- # Compilation Flags +include rules/distdir-opts.mk include rules/distdir-way-opts.mk # ----------------------------------------------------------------------------- diff --git a/rules/build-package.mk b/rules/build-package.mk index 8b9723b318..7ee4dd32b9 100644 --- a/rules/build-package.mk +++ b/rules/build-package.mk @@ -105,6 +105,7 @@ endif $(call hs-sources,$1,$2) $(call c-sources,$1,$2) $(call includes-sources,$1,$2) +$(call distdir-opts,$1,$2,$3) $(call dependencies,$1,$2,$3) diff --git a/rules/build-prog.mk b/rules/build-prog.mk index 69c5d759d1..1321eac104 100644 --- a/rules/build-prog.mk +++ b/rules/build-prog.mk @@ -140,6 +140,7 @@ $(call c-sources,$1,$2) # --- IMPLICIT RULES +$(call distdir-opts,$1,$2,,$3) $(call distdir-way-opts,$1,$2,$$($1_$2_PROGRAM_WAY),$3) ifeq "$3" "0" diff --git a/rules/distdir-opts.mk b/rules/distdir-opts.mk new file mode 100644 index 0000000000..748e27e52d --- /dev/null +++ b/rules/distdir-opts.mk @@ -0,0 +1,111 @@ +# ----------------------------------------------------------------------------- +# +# (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 additionally depend on a particular way + +define distdir-opts # args: $1 = dir, $2 = distdir, $3 = stage + +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 + +ifneq ($$(strip $$($1_$2_DEP_INCLUDE_DIRS_SINGLE_QUOTED)),) +$1_$2_CC_INC_FLAGS := $$(subst $$(space)',$$(space)$$($1_$2_DEP_INCLUDE_DIRS_FLAG)',$$(space)$$($1_$2_DEP_INCLUDE_DIRS_SINGLE_QUOTED)) +endif + +# The CONF_CC_OPTS_STAGE$3 options are what we use to get gcc to +# behave correctly, but they are specific to the gcc that we are using. +# If GHC is compiling C code then it will take care of that for us, +# and in the case of the stage 0 compiler it may be using a different +# gcc, so we don't want to use our gcc-specific options. +$1_$2_DIST_GCC_CC_OPTS = \ + $$(CONF_CC_OPTS_STAGE$3) \ + $$($1_$2_DIST_CC_OPTS) + +$1_$2_DIST_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) \ + $$($1_$2_CC_INC_FLAGS) \ + $$($1_$2_DEP_CC_OPTS) \ + $$(SRC_CC_WARNING_OPTS) + +ifneq ($$(strip $$($1_$2_DEP_LIB_DIRS_SINGLE_QUOTED)),) +$1_$2_DIST_LD_LIB_DIRS := $$(subst $$(space)',$$(space)-L',$$(space)$$($1_$2_DEP_LIB_DIRS_SINGLE_QUOTED)) +endif + +$1_$2_DIST_LD_OPTS = \ + $$(CONF_GCC_LINKER_OPTS_STAGE$3) \ + $$(SRC_LD_OPTS) \ + $$($1_LD_OPTS) \ + $$($1_$2_LD_OPTS) \ + $$($1_$2_DIST_LD_LIB_DIRS) \ + $$(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 +ifneq ($$(strip $$($1_$2_DIST_GCC_CC_OPTS)),) +$1_$2_HSC2HS_CC_OPTS:=$$(shell for i in $$($1_$2_DIST_GCC_CC_OPTS); do echo \'--cflag=$$$$i\'; done) +endif +ifneq ($$(strip $$($1_$2_DIST_LD_OPTS)),) +$1_$2_HSC2HS_LD_OPTS:=$$(shell for i in $$($1_$2_DIST_LD_OPTS); do echo \'--lflag=$$$$i\'; done) +endif + +$1_$2_ALL_HSC2HS_OPTS = \ + --cc=$$(WhatGccIsCalled) \ + --ld=$$(WhatGccIsCalled) \ + $$(CONF_HSC2HS_OPTS) \ + $$(SRC_HSC2HS_OPTS) \ + --cflag=-D__GLASGOW_HASKELL__=$$(if $$(filter 0,$3),$$(GhcCanonVersion),$$(ProjectVersionInt)) \ + --cflag=-D$$(HostArch_CPP)_HOST_ARCH=1 \ + --cflag=-D$$(HostOS_CPP)_HOST_OS=1 \ + $$($1_$2_HSC2HS_CC_OPTS) \ + $$($1_$2_HSC2HS_LD_OPTS) \ + --cflag=-I$1/$2/build/autogen \ + $$(if $$($1_PACKAGE),--cflag=-include --cflag=$1/$2/build/autogen/cabal_macros.h) \ + $$($$(basename $$<)_HSC2HS_OPTS) \ + $$(EXTRA_HSC2HS_OPTS) + +$1_$2_ALL_ALEX_OPTS = \ + $$(CONF_ALEX_OPTS) \ + $$(SRC_ALEX_OPTS) + $$($1_ALEX_OPTS) \ + $$($1_$2_ALEX_OPTS) \ + $$(EXTRA_ALEX_OPTS) + +$1_$2_ALL_HAPPY_OPTS = \ + $$(CONF_HAPPY_OPTS) \ + $$(SRC_HAPPY_OPTS) \ + $$($1_HAPPY_OPTS) \ + $$($1_$2_HAPPY_OPTS) \ + $$(EXTRA_HAPPY_OPTS) + +endef + diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk index 4d27bbfdc8..c6f84c3585 100644 --- a/rules/distdir-way-opts.mk +++ b/rules/distdir-way-opts.mk @@ -119,59 +119,6 @@ $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 "$4" "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 - -ifneq ($$(strip $$($1_$2_DEP_INCLUDE_DIRS_SINGLE_QUOTED)),) -$1_$2_CC_INC_FLAGS := $$(subst $$(space)',$$(space)$$($1_$2_DEP_INCLUDE_DIRS_FLAG)',$$(space)$$($1_$2_DEP_INCLUDE_DIRS_SINGLE_QUOTED)) -endif - -# The CONF_CC_OPTS_STAGE$4 options are what we use to get gcc to -# behave correctly, but they are specific to the gcc that we are using. -# If GHC is compiling C code then it will take care of that for us, -# and in the case of the stage 0 compiler it may be using a different -# gcc, so we don't want to use our gcc-specific options. -$1_$2_DIST_GCC_CC_OPTS = \ - $$(CONF_CC_OPTS_STAGE$4) \ - $$($1_$2_DIST_CC_OPTS) - -$1_$2_DIST_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) \ - $$($1_$2_CC_INC_FLAGS) \ - $$($1_$2_DEP_CC_OPTS) \ - $$(SRC_CC_WARNING_OPTS) - -ifneq ($$(strip $$($1_$2_DEP_LIB_DIRS_SINGLE_QUOTED)),) -$1_$2_DIST_LD_LIB_DIRS := $$(subst $$(space)',$$(space)-L',$$(space)$$($1_$2_DEP_LIB_DIRS_SINGLE_QUOTED)) -endif - -$1_$2_DIST_LD_OPTS = \ - $$(CONF_GCC_LINKER_OPTS_STAGE$4) \ - $$(SRC_LD_OPTS) \ - $$($1_LD_OPTS) \ - $$($1_$2_LD_OPTS) \ - $$($1_$2_DIST_LD_LIB_DIRS) \ - $$(foreach opt,$$($1_$2_DEP_EXTRA_LIBS),-l$$(opt)) \ - $$($1_$2_DEP_LD_OPTS) - ifeq "$3" "dyn" ifneq "$4" "0" ifeq "$$(TargetOS_CPP)" "linux" @@ -184,32 +131,6 @@ endif endif endif -# c.f. Cabal's Distribution.Simple.PreProcess.ppHsc2hs -# We use '' around cflags and lflags to handle paths with backslashes in -# on Windows -ifneq ($$(strip $$($1_$2_DIST_GCC_CC_OPTS)),) -$1_$2_$3_HSC2HS_CC_OPTS:=$$(shell for i in $$($1_$2_DIST_GCC_CC_OPTS); do echo \'--cflag=$$$$i\'; done) -endif -ifneq ($$(strip $$($1_$2_DIST_LD_OPTS)),) -$1_$2_$3_HSC2HS_LD_OPTS:=$$(shell for i in $$($1_$2_DIST_LD_OPTS); do echo \'--lflag=$$$$i\'; done) -endif - -$1_$2_$3_ALL_HSC2HS_OPTS = \ - --cc=$$(WhatGccIsCalled) \ - --ld=$$(WhatGccIsCalled) \ - $$(CONF_HSC2HS_OPTS) \ - $$(SRC_HSC2HS_OPTS) \ - $$(WAY_$3_HSC2HS_OPTS) \ - --cflag=-D__GLASGOW_HASKELL__=$$(if $$(filter 0,$4),$$(GhcCanonVersion),$$(ProjectVersionInt)) \ - --cflag=-D$$(HostArch_CPP)_HOST_ARCH=1 \ - --cflag=-D$$(HostOS_CPP)_HOST_OS=1 \ - $$($1_$2_$3_HSC2HS_CC_OPTS) \ - $$($1_$2_$3_HSC2HS_LD_OPTS) \ - --cflag=-I$1/$2/build/autogen \ - $$(if $$($1_PACKAGE),--cflag=-include --cflag=$1/$2/build/autogen/cabal_macros.h) \ - $$($$(basename $$<)_HSC2HS_OPTS) \ - $$(EXTRA_HSC2HS_OPTS) - $1_$2_$3_ALL_CC_OPTS = \ $$(WAY_$3_CC_OPTS) \ $$($1_$2_DIST_GCC_CC_OPTS) \ @@ -235,23 +156,5 @@ $1_$2_$3_ALL_AS_OPTS = \ $$($1_$2_$3_AS_OPTS) \ $$(EXTRA_AS_OPTS) -$1_$2_$3_ALL_ALEX_OPTS = \ - $$(CONF_ALEX_OPTS) \ - $$(SRC_ALEX_OPTS) - $$(WAY_$3_ALEX_OPTS) \ - $$($1_ALEX_OPTS) \ - $$($1_$2_ALEX_OPTS) \ - $$($1_$2_$3_ALEX_OPTS) \ - $$(EXTRA_ALEX_OPTS) - -$1_$2_$3_ALL_HAPPY_OPTS = \ - $$(CONF_HAPPY_OPTS) \ - $$(SRC_HAPPY_OPTS) \ - $$(WAY_$3_HAPPY_OPTS) \ - $$($1_HAPPY_OPTS) \ - $$($1_$2_HAPPY_OPTS) \ - $$($1_$2_$3_HAPPY_OPTS) \ - $$(EXTRA_HAPPY_OPTS) - endef diff --git a/rules/hs-suffix-way-rules-srcdir.mk b/rules/hs-suffix-way-rules-srcdir.mk index 204ddcfa7e..bbdd093552 100644 --- a/rules/hs-suffix-way-rules-srcdir.mk +++ b/rules/hs-suffix-way-rules-srcdir.mk @@ -19,22 +19,22 @@ define hs-suffix-way-rules-srcdir ifneq "$$(BINDIST)" "YES" $1/$2/build/%.hs : $1/$4/%.ly | $$$$(dir $$$$@)/. - $$(call cmd,HAPPY) $$($1_$2_$3_ALL_HAPPY_OPTS) $$< -o $$@ + $$(call cmd,HAPPY) $$($1_$2_ALL_HAPPY_OPTS) $$< -o $$@ $1/$2/build/%.hs : $1/$4/%.y | $$$$(dir $$$$@)/. - $$(call cmd,HAPPY) $$($1_$2_$3_ALL_HAPPY_OPTS) $$< -o $$@ + $$(call cmd,HAPPY) $$($1_$2_ALL_HAPPY_OPTS) $$< -o $$@ $1/$2/build/%.hs : $1/$2/build/%.ly | $$$$(dir $$$$@)/. - $$(call cmd,HAPPY) $$($1_$2_$3_ALL_HAPPY_OPTS) $$< -o $$@ + $$(call cmd,HAPPY) $$($1_$2_ALL_HAPPY_OPTS) $$< -o $$@ $1/$2/build/%.hs : $1/$2/build/%.y | $$$$(dir $$$$@)/. - $$(call cmd,HAPPY) $$($1_$2_$3_ALL_HAPPY_OPTS) $$< -o $$@ + $$(call cmd,HAPPY) $$($1_$2_ALL_HAPPY_OPTS) $$< -o $$@ $1/$2/build/%.hs : $1/$4/%.x | $$$$(dir $$$$@)/. - $$(call cmd,ALEX) $$($1_$2_$3_ALL_ALEX_OPTS) $$< -o $$@ + $$(call cmd,ALEX) $$($1_$2_ALL_ALEX_OPTS) $$< -o $$@ $1/$2/build/%_hsc.c $1/$2/build/%_hsc.h $1/$2/build/%.hs : $1/$4/%.hsc $$(HSC2HS_INPLACE) | $$$$(dir $$$$@)/. - $$(call cmd,HSC2HS_INPLACE) $$($1_$2_$3_ALL_HSC2HS_OPTS) $$< -o $$@ + $$(call cmd,HSC2HS_INPLACE) $$($1_$2_ALL_HSC2HS_OPTS) $$< -o $$@ # Compiling Haskell source |