blob: 894f2dfb3b48927a4a53d255e620edf03e7811d7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
TOP=..
include $(TOP)/mk/boilerplate.mk
include $(TOP)/mk/cabal-flags.mk
ifeq "$(stage)" ""
stage=1
endif
ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32"
INSTALL_FLAGS =
else
INSTALL_FLAGS = --enable-shell-wrappers
endif
# Don't strip the inplace versions, we might need to debug them
INPLACE_INSTALL_FLAGS += --disable-executable-stripping
boot:: boot.stage.$(stage)
all:: build.stage.$(stage)
rebuild ::
-$(CABAL) clean --distpref dist-stage$(stage)
$(RM) -rf stage$(stage)-inplace
$(MAKE) boot all
stage1 ::
$(MAKE) stage=1
stage2 ::
$(MAKE) stage=2
stage3 ::
$(MAKE) stage=3
clean distclean::
-$(CABAL) clean --distpref dist-stage1
-$(CABAL) clean --distpref dist-stage2
-$(CABAL) clean --distpref dist-stage3
$(RM) -rf stage1-inplace
$(RM) -rf stage2-inplace
$(RM) -rf stage3-inplace
# XXX This should be defined somewhere more central
INPLACE_DATA_DIR = $(FPTOOLS_TOP_ABS)/inplace-datadir
CONFIGURE_FLAGS_STAGE1 += --flags=-ghci
ifeq "$(GhcWithInterpreter)" "YES"
CONFIGURE_FLAGS_STAGE2 += --flags=ghci
else
CONFIGURE_FLAGS_STAGE2 += --flags=-ghci
endif
ifeq "$(GhcProfiled)" "YES"
CONFIGURE_FLAGS_STAGE2 += --enable-executable-profiling
endif
ifeq "$(GhcDebugged)" "YES"
CONFIGURE_FLAGS_STAGE2 += --ghc-option=-debug
endif
ifeq "$(GhcThreaded)" "YES"
# Use threaded RTS with GHCi, so threads don't get blocked at the prompt.
CONFIGURE_FLAGS_STAGE2 += --ghc-option=-threaded
endif
ifeq "$(BuildSharedLibs)" "YES"
CONFIGURE_FLAGS_STAGE2 += --ghc-option=-dynamic
endif
CONFIGURE_FLAGS_STAGE3 = $(CONFIGURE_FLAGS_STAGE2)
CONFIGURE_FLAGS_STAGE1 += $(USE_BOOT_CONFIGURE_FLAGS)
CONFIGURE_FLAGS_STAGE2 += $(USE_STAGE1_CONFIGURE_FLAGS)
CONFIGURE_FLAGS_STAGE3 += $(USE_STAGE2_CONFIGURE_FLAGS)
# Allow EXTRA_HC_OPTS to be used from the command line to add options
# when building (e.g. -v)
BUILD_FLAGS=$(patsubst %, --ghc-option=%, $(EXTRA_HC_OPTS))
# XXX In stage2+ we should really use the inplace ghc-pkg
# It works because installPackage doesn't actually use ghc-pkg, as there's
# no library to register
ifeq "$(stage)" "1"
# GHC 6.9+ can handle cross-package recompilation checking, but
# we don't rely on the bootstrapping compiler being able to do this.
TOUCH_MAIN = $(RM) dist-stage1/build/ghc/ghc-tmp/Main.o
endif
boot.stage.%:
$(CABAL) configure --distpref dist-stage$* \
$(INSTALL_DIRS_CONFIGURE_FLAGS) \
$(CONFIGURE_FLAGS_STAGE$*) \
$(COMMON_CONFIGURE_FLAGS) \
--libsubdir=. \
--datadir='$$libdir' \
--datasubdir=.
build.stage.%:
$(TOUCH_MAIN)
$(CABAL) build --distpref dist-stage$* $(BUILD_FLAGS)
$(INSTALL_PACKAGE) install '$(GHC_PKG_PROG)' 'XXX/package.conf' "" \
$(FPTOOLS_TOP_ABS)/ghc/stage$*-inplace \
$(FPTOOLS_TOP_ABS)/ghc/stage$*-inplace \
'$$prefix' \
'$(INPLACE_DATA_DIR)' \
'$$prefix/libexec' \
'$$prefix/dynlib' \
'$(INPLACE_DATA_DIR)' \
'$$prefix/doc' \
'$$prefix/html' \
'$$prefix/haddock' \
--distpref dist-stage$* \
$(INPLACE_INSTALL_FLAGS) \
$(INSTALL_FLAGS)
# XXX For now we always install the stage 2 compiler
install:
$(INSTALL_PACKAGE) install UNUSED UNUSED '$(DESTDIR)' '$(prefix)' \
'$(prefix)' '$(bindir)' '$(libdir)' \
'$(libexecdir)' '$(dynlibdir)' '$(libdir)' \
'$(docdir)' '$(htmldir)' '$(haddockdir)' \
--distpref dist-stage2 \
$(INSTALL_FLAGS)
# XXX fix:
#binary-dist:
# $(INSTALL_DIR) $(BIN_DIST_DIR)/utils/hsc2hs
# $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/utils/hsc2hs/
# $(INSTALL_DATA) hsc2hs.sh $(BIN_DIST_DIR)/utils/hsc2hs/
# $(INSTALL_DATA) $(INSTALL_DATAS) $(BIN_DIST_DIR)/utils/hsc2hs/
# $(INSTALL_PROGRAM) $(HS_PROG) $(BIN_DIST_DIR)/utils/hsc2hs/
|