summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2021-11-13 15:38:21 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2021-11-15 18:08:44 +0000
commitc5783800c4b0787020de4dc6455c670c1607bbec (patch)
treed1aae6d6f258071d800281622fcf9215636af1b2
parentb679721a097161315b47c0f186ff72ec84c1389c (diff)
downloadhaskell-wip/no-build-include-dirs.tar.gz
Make: Get rid of `BUILD_.*_INCLUDE_DIRS`wip/no-build-include-dirs
First, we improve some of the rules around -I include dirs, and CPP opts. Then, we just specify the RTS's include dirs normally (locally per the package and in the package conf), and then everything should work normally. The primops.txt.pp rule needs no extra include dirs at all, as it no longer bakes in a target platfom. Reverts some of the extra stage arguments I added in 05419e55cab272ed39790695f448b311f22669f7, as they are no longer needed.
-rw-r--r--compiler/ghc.mk12
-rw-r--r--rts/ghc.mk25
-rw-r--r--rts/include/ghc.mk14
-rw-r--r--rules/build-package-way.mk2
-rw-r--r--rules/build-prog.mk2
-rw-r--r--rules/distdir-opts.mk14
-rw-r--r--rules/distdir-way-opts.mk6
-rw-r--r--rules/hs-suffix-way-rules-srcdir.mk8
-rw-r--r--rules/hs-suffix-way-rules.mk4
-rw-r--r--rules/manual-package-config.mk13
-rw-r--r--utils/genapply/ghc.mk2
-rw-r--r--utils/hp2ps/ghc.mk2
12 files changed, 53 insertions, 51 deletions
diff --git a/compiler/ghc.mk b/compiler/ghc.mk
index bba143c801..4b33936afa 100644
--- a/compiler/ghc.mk
+++ b/compiler/ghc.mk
@@ -18,11 +18,6 @@
compiler_stage1_C_FILES_NODEPS = compiler/cbits/cutils.c
-# We need to decrement the 1-indexed compiler stage to be the 0-indexed stage
-# we use everwhere else.
-dec1 = 0
-dec2 = 1
-dec3 = 2
# TODO(@Ericson2314) Get rid of compiler-specific stage indices. I think the
# argument was stage n ghc is used to build stage n everything else, but I
# don't buy that argument.
@@ -113,11 +108,8 @@ PRIMOP_BITS_STAGE3 = $(addprefix compiler/stage3/build/,$(PRIMOP_BITS_NAMES))
define preprocessCompilerFiles
# $1 = compiler stage (build system stage + 1)
compiler/stage$1/build/primops.txt: \
- compiler/GHC/Builtin/primops.txt.pp \
- $(includes_$(dec$1)_H_CONFIG) \
- $(includes_$(dec$1)_H_PLATFORM)
- $$(HS_CPP) -P $$(compiler_CPP_OPTS) \
- -Icompiler/stage$1 \
+ compiler/GHC/Builtin/primops.txt.pp
+ $$(HS_CPP) -P \
-x c $$< | grep -v '^#pragma GCC' > $$@
compiler/stage$1/build/primop-data-decl.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
diff --git a/rts/ghc.mk b/rts/ghc.mk
index 211741a2a9..6da6b2137e 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -214,7 +214,7 @@ rts_$1_DTRACE_OBJS = rts/dist-install/build/RtsProbes.$$($1_osuf)
$$(rts_$1_DTRACE_OBJS) : $$(rts_$1_OBJS)
$(DTRACE) -G -C \
- $$(addprefix -I,$$(BUILD_1_INCLUDE_DIRS)) \
+ $$(addprefix -Irts/,$$(rts_dist-install_DIST_INCLUDE_DIRS)) \
-DDTRACE -s rts/RtsProbes.d \
-o $$@ \
$$(rts_$1_OBJS)
@@ -377,22 +377,23 @@ WARNING_OPTS += -Wno-aggregate-return
# support for registerised builds on this arch. -- BL 2010/02/03
# WARNING_OPTS += -Wcast-align
-STANDARD_OPTS += \
- $(addprefix -I,$(BUILD_1_INCLUDE_DIRS)) \
- -Irts \
- -Irts/dist-install/build
+rts_INCLUDE_DIRS = \
+ $(addprefix include/,$(includes_INCLUDE_DIRS)) \
+ .
+
+rts_dist-install_INCLUDE_DIRS = \
+ $(addprefix include/,$(includes_dist-install_INCLUDE_DIRS))
# COMPILING_RTS is only used when building Win32 DLL support.
-STANDARD_OPTS += -DCOMPILING_RTS -DFS_NAMESPACE=rts
+rts_CPP_OPTS += -DCOMPILING_RTS -DFS_NAMESPACE=rts
# HC_OPTS is included in both .c and .cmm compilations, whereas CC_OPTS is
# only included in .c compilations. HC_OPTS included the WAY_* opts, which
# must be included in both types of compilations.
rts_CC_OPTS += $(WARNING_OPTS)
-rts_CC_OPTS += $(STANDARD_OPTS)
-rts_HC_OPTS += $(STANDARD_OPTS) -this-unit-id rts
+rts_HC_OPTS += -this-unit-id rts
ifneq "$(GhcWithSMP)" "YES"
rts_CC_OPTS += -DNOSMP
@@ -620,7 +621,7 @@ endif
DTRACEPROBES_SRC = rts/RtsProbes.d
$(DTRACEPROBES_H): $(DTRACEPROBES_SRC) $(includes_1_H_CONFIG) $(includes_1_H_PLATFORM) | $$(dir $$@)/.
- "$(DTRACE)" $(filter -I%,$(rts_CC_OPTS)) -C $(DTRACE_FLAGS) -h -o $@ -s $<
+ "$(DTRACE)" $(filter -I%,$(rts_dist-install_DIST_CC_OPTS)) -C $(DTRACE_FLAGS) -h -o $@ -s $<
endif
# -----------------------------------------------------------------------------
@@ -635,7 +636,11 @@ ifeq "$(HaveLibMingwEx)" "YES"
rts_PACKAGE_CPP_OPTS += -DHAVE_LIBMINGWEX
endif
-$(eval $(call manual-package-config,rts,dist-install,1))
+rts_dist-install_PACKAGE_CPP_OPTS = \
+ $(rts_PACKAGE_CPP_OPTS) \
+ $(addprefix -Irts/,$(rts_dist-install_DIST_INCLUDE_DIRS))
+
+$(eval $(call manual-package-config,rts,dist-install))
rts/dist-install/package.conf.inplace : $(includes_dist-install_H_FILES)
rts/dist-install/package.conf.install : $(includes_dist-install_H_FILES)
diff --git a/rts/include/ghc.mk b/rts/include/ghc.mk
index 12d14b9152..1b0fbff077 100644
--- a/rts/include/ghc.mk
+++ b/rts/include/ghc.mk
@@ -19,8 +19,15 @@ includes_2_H_CONFIG = $(includes_1_H_CONFIG)
includes_1_H_PLATFORM = rts/dist-install/build/include/ghcplatform.h
includes_2_H_PLATFORM = $(includes_1_H_PLATFORM)
-BUILD_1_INCLUDE_DIRS = rts/include rts/dist-install/build/include
-BUILD_2_INCLUDE_DIRS = $(BUILD_1_INCLUDE_DIRS)
+includes_INCLUDE_DIRS = .
+# "includes" isn't really a separate component, but just part of the RTS that
+# is in a separate ghc.mk for historical reasons. The ../dist-install puts the
+# build products with the rest of the RTS's.
+includes_dist-install_INCLUDE_DIRS = ../dist-install/build/include
+
+includes_dist-install_DIST_INCLUDE_DIRS = \
+ $(includes_INCLUDE_DIRS) \
+ $(includes_dist-install_INCLUDE_DIRS)
#
# All header files are in rts/include/{one of these subdirectories}
@@ -63,8 +70,7 @@ ifeq "$(GhcUnregisterised)" "YES"
includes_CC_OPTS += -DUSE_MINIINTERPRETER
endif
-includes_CC_OPTS += $(addprefix -I,$(BUILD_1_INCLUDE_DIRS))
-includes_CC_OPTS += -Irts
+includes_CC_OPTS += $(addprefix -Irts/,$(rts_dist-install_DIST_INCLUDE_DIRS))
ifneq "$(GhcWithSMP)" "YES"
includes_CC_OPTS += -DNOSMP
diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk
index c1b95032ac..abc55c80c5 100644
--- a/rules/build-package-way.mk
+++ b/rules/build-package-way.mk
@@ -16,7 +16,7 @@ $(call trace, build-package-way($1,$2,$3))
$(call profStart, build-package-way($1,$2,$3))
$(call distdir-way-opts,$1,$2,$3,$4)
-$(call hs-suffix-way-rules,$1,$2,$3,$4)
+$(call hs-suffix-way-rules,$1,$2,$3)
$(call hs-objs,$1,$2,$3)
diff --git a/rules/build-prog.mk b/rules/build-prog.mk
index 84d717e6b6..7973ecd38e 100644
--- a/rules/build-prog.mk
+++ b/rules/build-prog.mk
@@ -178,7 +178,7 @@ endif
$$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
$$(eval $$(call hs-suffix-rules-srcdir,$1,$2,$$(dir))))
-$(call hs-suffix-way-rules,$1,$2,$$($1_$2_PROGRAM_WAY),$3)
+$(call hs-suffix-way-rules,$1,$2,$$($1_$2_PROGRAM_WAY))
$(call c-objs,$1,$2,$$($1_$2_PROGRAM_WAY))
$(call hs-objs,$1,$2,$$($1_$2_PROGRAM_WAY))
diff --git a/rules/distdir-opts.mk b/rules/distdir-opts.mk
index fe329c1d31..ebe56c1fd5 100644
--- a/rules/distdir-opts.mk
+++ b/rules/distdir-opts.mk
@@ -32,14 +32,22 @@ $1_$2_DIST_GCC_CC_OPTS = \
$$(CONF_CC_OPTS_STAGE$3) \
$$($1_$2_DIST_CC_OPTS)
+$1_$2_DIST_INCLUDE_DIRS = \
+ $$($1_$2_INCLUDE_DIRS) \
+ $$($1_INCLUDE_DIRS)
+
+$1_$2_DIST_CPP_OPTS = \
+ $$(foreach dir,$$(filter-out /%,$$($1_$2_DIST_INCLUDE_DIRS)),-I$1/$$(dir)) \
+ $$(foreach dir,$$(filter /%,$$($1_$2_DIST_INCLUDE_DIRS)),-I$$(dir)) \
+ $$($1_$2_CPP_OPTS) \
+ $$($1_CPP_OPTS)
+
$1_$2_DIST_CC_OPTS = \
$$(SRC_CC_OPTS) \
$$($1_CC_OPTS) \
-I$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen \
- $$(foreach dir,$$(filter-out /%,$$($1_$2_INCLUDE_DIRS)),-I$1/$$(dir)) \
- $$(foreach dir,$$(filter /%,$$($1_$2_INCLUDE_DIRS)),-I$$(dir)) \
+ $$($1_$2_DIST_CPP_OPTS) \
$$($1_$2_CC_OPTS) \
- $$($1_$2_CPP_OPTS) \
$$($1_$2_CC_INC_FLAGS) \
$$($1_$2_DEP_CC_OPTS) \
$$(SRC_CC_WARNING_OPTS)
diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk
index a0dba3a1fe..098af4f8da 100644
--- a/rules/distdir-way-opts.mk
+++ b/rules/distdir-way-opts.mk
@@ -126,10 +126,8 @@ $1_$2_$3_MOST_HC_OPTS = \
-I$1/$2/build \
-i$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen \
-I$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/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)) \
+ $$(foreach dir,$$(filter -I%,$$($1_$2_DIST_CPP_OPTS)),$$(dir)) \
+ $$(foreach opt,$$(filter-out -I%,$$($1_$2_DIST_CPP_OPTS)),-optP$$(opt)) \
$$(if $$($1_PACKAGE),-optP-include \
-optP$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen/cabal_macros.h) \
$$($1_$2_$4_DEP_OPTS) \
diff --git a/rules/hs-suffix-way-rules-srcdir.mk b/rules/hs-suffix-way-rules-srcdir.mk
index f9ab09107a..7223b553ba 100644
--- a/rules/hs-suffix-way-rules-srcdir.mk
+++ b/rules/hs-suffix-way-rules-srcdir.mk
@@ -12,7 +12,7 @@
define hs-suffix-way-rules-srcdir
-# args: $1 = dir, $2 = distdir, $3 = way, $4 = srcdir, $5 = stage
+# args: $1 = dir, $2 = distdir, $3 = way, $4 = srcdir
ifneq "$$(BINDIST)" "YES"
@@ -35,17 +35,15 @@ $1/$2/build/%.$$($3_hcsuf) : $1/$4/%.lhs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
# XXX: for some reason these get used in preference to the direct
# .hs->.o rule, I don't know why --SDM
-$1/$2/build/%.$$($3_osuf) : $1/$4/%.hc $$(includes_$5_H_CONFIG) $$(includes_$5_H_PLATFORM) | $$$$(dir $$$$@)/.
+$1/$2/build/%.$$($3_osuf) : $1/$4/%.hc | $$$$(dir $$$$@)/.
$$(call cmd,$1_$2_CC) \
$$($1_$2_$3_ALL_CC_OPTS) \
- $$(addprefix -I,$$(BUILD_$5_INCLUDE_DIRS)) \
-x c -c $$< -o $$@ \
$$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf),$$(basename $$@)))
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.hc $$(includes_$5_H_CONFIG) $$(includes_$5_H_PLATFORM)
+$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.hc
$$(call cmd,$1_$2_CC) \
$$($1_$2_$3_ALL_CC_OPTS) \
- $$(addprefix -I,$$(BUILD_$5_INCLUDE_DIRS)) \
-x c -c $$< -o $$@ \
$$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf),$$(basename $$@)))
diff --git a/rules/hs-suffix-way-rules.mk b/rules/hs-suffix-way-rules.mk
index daf1da4926..286e04eee7 100644
--- a/rules/hs-suffix-way-rules.mk
+++ b/rules/hs-suffix-way-rules.mk
@@ -11,7 +11,7 @@
# -----------------------------------------------------------------------------
-define hs-suffix-way-rules # args: $1 = dir, $2 = distdir, $3 = way, $4 = stage
+define hs-suffix-way-rules # args: $1 = dir, $2 = distdir, $3 = way
ifeq "$3 $$($1_$2_DYNAMIC_TOO)" "dyn YES"
# We only want this rule to be used for Haskell sources, not for
@@ -106,7 +106,7 @@ else
# [1] https://www.gnu.org/software/make/manual/make.html#Implicit-Rule-Search
$$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
- $$(eval $$(call hs-suffix-way-rules-srcdir,$1,$2,$3,$$(dir),$4)))
+ $$(eval $$(call hs-suffix-way-rules-srcdir,$1,$2,$3,$$(dir))))
ifneq "$$(BINDIST)" "YES"
diff --git a/rules/manual-package-config.mk b/rules/manual-package-config.mk
index dcd0e758bc..a9993d9fae 100644
--- a/rules/manual-package-config.mk
+++ b/rules/manual-package-config.mk
@@ -15,15 +15,13 @@ define manual-package-config
# args:
# $1 = dir
# $2 = distdir
-# $3 = stage
-$(call trace, manual-package-config($1, $2, $3))
-$(call profStart, manual-package-config($1, $2, $3))
+$(call trace, manual-package-config($1, $2))
+$(call profStart, manual-package-config($1, $2))
$1/$2/package.conf.inplace : $1/package.conf.in $$$$(ghc-pkg_INPLACE) | $$$$(dir $$$$@)/.
$$(HS_CPP) -P \
-DTOP='"$$(TOP)"' \
- $$($1_PACKAGE_CPP_OPTS) \
- $$(addprefix -I,$$(BUILD_$3_INCLUDE_DIRS)) \
+ $$($1_$2_PACKAGE_CPP_OPTS) \
-x c $$< -o $$@.raw
grep -v '^#pragma GCC' $$@.raw | \
sed -e 's/""//g' -e 's/:[ ]*,/: /g' > $$@
@@ -38,11 +36,10 @@ $1/$2/package.conf.install : $1/package.conf.in | $$$$(dir $$$$@)/.
-DINSTALLING \
-DLIB_DIR='"$$(if $$(filter YES,$$(RelocatableBuild)),$$$$topdir,$$(ghclibdir))/$1"' \
-DINCLUDE_DIR='"$$(if $$(filter YES,$$(RelocatableBuild)),$$$$topdir,$$(ghclibdir))/$1/include"' \
- $$($1_PACKAGE_CPP_OPTS) \
- $$(addprefix -I,$$(BUILD_$3_INCLUDE_DIRS)) \
+ $$($1_$2_PACKAGE_CPP_OPTS) \
-x c $1/package.conf.in -o $$@.raw
grep -v '^#pragma GCC' $$@.raw | \
sed -e 's/""//g' -e 's/:[ ]*,/: /g' >$$@
-$(call profEnd, manual-package-config($1, $2, $3))
+$(call profEnd, manual-package-config($1))
endef
diff --git a/utils/genapply/ghc.mk b/utils/genapply/ghc.mk
index 363f8bb5d1..5721c9069a 100644
--- a/utils/genapply/ghc.mk
+++ b/utils/genapply/ghc.mk
@@ -27,4 +27,4 @@ $(eval $(call build-prog,utils/genapply,dist,0))
# Purposely do the wrong stage for HOST := TARGET hack.
# See Note [Genapply target as host for RTS macros].
-utils/genapply_dist_CC_OPTS += $(addprefix -I,$(BUILD_1_INCLUDE_DIRS))
+utils/genapply_dist_CC_OPTS += $(addprefix -Irts/include,$(includes_dist-install_DIST_INCLUDE_DIRS))
diff --git a/utils/hp2ps/ghc.mk b/utils/hp2ps/ghc.mk
index a309e116a1..d7797be3e9 100644
--- a/utils/hp2ps/ghc.mk
+++ b/utils/hp2ps/ghc.mk
@@ -11,7 +11,6 @@
# -----------------------------------------------------------------------------
# stage0
-utils/hp2ps_dist_CC_OPTS += $(addprefix -I,$(BUILD_0_INCLUDE_DIRS))
utils/hp2ps_dist_C_SRCS = AreaBelow.c Curves.c Error.c Main.c \
Reorder.c TopTwenty.c AuxFile.c Deviation.c \
HpFile.c Marks.c Scale.c TraceElement.c \
@@ -24,7 +23,6 @@ utils/hp2ps_dist_SHELL_WRAPPER = YES
utils/hp2ps_dist_INSTALL_SHELL_WRAPPER_NAME = hp2ps
# stage 1
-utils/hp2ps_dist-install_CC_OPTS += $(addprefix -I,$(BUILD_1_INCLUDE_DIRS))
utils/hp2ps_dist-install_C_SRCS = $(utils/hp2ps_dist_C_SRCS)
utils/hp2ps_dist-install_EXTRA_LIBRARIES = $(utils/hp2ps_dist_EXTRA_LIBRARIES)
utils/hp2ps_dist-install_PROGNAME = $(utils/hp2ps_dist_PROGNAME)