summaryrefslogtreecommitdiff
path: root/ghc/Makefile
blob: 4d6a7d0ec0ecc8c79b08910558c79e683c4c8790 (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
135
136
137
138

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

ifeq "$(CLEAN_ALL_STAGES)" "YES"
clean distclean:: clean.stage.1 clean.stage.2 clean.stage.3
else
clean distclean:: clean.stage.$(stage)
endif

clean.stage.%:
	-$(CABAL) clean --distpref dist-stage$*
	$(RM) -rf stage$*-inplace

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"
ifeq "$(ghc_ge_609)" "NO"
# 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
endif

dist-stage1 dist-stage2 dist-stage3: dist-stage%: boot.stage.%

boot.stage.%:
	$(CABAL) configure --distpref dist-stage$*         \
	                   $(INSTALL_DIRS_CONFIGURE_FLAGS) \
	                   $(CONFIGURE_FLAGS_STAGE$*)      \
	                   $(COMMON_CONFIGURE_FLAGS)       \
	                   --libsubdir=.                   \
	                   --datadir='$$libdir'            \
	                   --datasubdir=.

build.stage.%: dist-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)' '$(datadir)'    \
                       '$(docdir)' '$(htmldir)' '$(haddockdir)'       \
	                   --distpref dist-stage2                         \
	                   $(INSTALL_FLAGS)

html:
	@:

install-docs:
	@:

include $(TOP)/mk/bindist.mk
EXE_DIST_DIR = dist-stage$(stage)