Makefile 6.62 KB
Newer Older
1 2 3 4 5 6 7
# -----------------------------------------------------------------------------
#
# (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
8 9
#      http://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
#      http://ghc.haskell.org/trac/ghc/wiki/Building/Modifying
10 11
#
# -----------------------------------------------------------------------------
12

thomie's avatar
thomie committed
13 14 15 16 17 18 19 20
# Eliminate use of the built-in implicit rules, and clear out the default list
# of suffixes for suffix rules. Speeds up make quite a bit. Both are needed
# for the shortest `make -d` output.
# Don't set --no-builtin-variables; some rules might stop working if you do
# (e.g. 'make clean' in testsuite/ currently relies on an implicit $RM).
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:

Ian Lynagh's avatar
Ian Lynagh committed
21
ifeq "$(wildcard distrib/)" ""
22

Ian Lynagh's avatar
Ian Lynagh committed
23
# We're in a bindist
24

Ian Lynagh's avatar
Ian Lynagh committed
25 26 27 28
.PHONY: default
default:
	@echo 'Run "make install" to install'
	@false
29

Ian Lynagh's avatar
Ian Lynagh committed
30 31
.PHONY: install show
install show:
thomie's avatar
thomie committed
32
	$(MAKE) --no-print-directory -f ghc.mk $@ BINDIST=YES NO_INCLUDE_DEPS=YES
33

34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
# Note [install-strip]
#
# install-strip is like install, but it strips the executable files while
# installing them.
#
# From http://www.gnu.org/prep/standards/html_node/Standard-Targets.html:
#
#   "install-strip should not strip the executables in the build directory
#   which are being copied for installation. It should only strip the copies
#   that are installed. "

.PHONY: install-strip
install-strip:
	# See Note [install-strip].
	$(MAKE) --no-print-directory -f ghc.mk INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install

50
else
51

52
.PHONY: default
Ian Lynagh's avatar
Ian Lynagh committed
53 54
default : all
	@:
55

56 57
# For help, type 'make help'
.PHONY: help
Kyle J. Van Berendonck's avatar
Kyle J. Van Berendonck committed
58
help:
Austin Seipp's avatar
Austin Seipp committed
59
	@cat MAKEHELP.md
60

61
ifneq "$(filter maintainer-clean distclean clean clean_% help,$(MAKECMDGOALS))" ""
62 63
-include mk/config.mk
else
64 65 66 67
include mk/config.mk
ifeq "$(ProjectVersion)" ""
$(error Please run ./configure first)
endif
68
endif
69 70 71

include mk/custom-settings.mk

72 73 74 75 76 77 78
# Verify that stage 0 LLVM backend isn't affected by Bug #9439 if needed
ifeq "$(GHC_LLVM_AFFECTED_BY_9439)" "1"
ifneq "$(findstring -fllvm,$(GhcHcOpts) $(GhcStage1HcOpts))" ""
$(error Stage 0 compiler is affected by Bug #9439. Refusing to bootstrap with -fllvm)
endif
endif

Ian Lynagh's avatar
Ian Lynagh committed
79
# No need to update makefiles for these targets:
80 81 82 83
# (the ones we're filtering out)
REALGOALS=$(filter-out \
    binary-dist \
    binary-dist-prep \
84
    install-strip \
85 86 87 88 89 90 91 92 93 94 95 96 97
    sdist sdist-ghc \
    sdist-ghc-prep \
    sdist-windows-tarballs \
    sdist-windows-tarballs-prep \
    sdist-testsuite \
    sdist-testsuite-prep \
    bootstrapping-files \
    framework-pkg \
    clean \
    clean_% \
    distclean \
    maintainer-clean \
    show \
98
    show! \
99 100 101 102
    echo \
    help \
    test \
    fulltest \
103
    slowtest \
104 105
    fasttest \
  ,$(MAKECMDGOALS))
106

107 108 109 110
# configure touches certain files even if they haven't changed.  This
# can mean a lot of unnecessary recompilation after a re-configure, so
# here we cache the old versions of these files so we can restore the
# timestamps.
kili's avatar
kili committed
111
%.old:  %
112
	@set -x && test -f $@ && cmp -s $< $@ || cp -p $< $@
kili's avatar
kili committed
113 114
	touch -r $@ $<

115

Ian Lynagh's avatar
Ian Lynagh committed
116 117
# NB. not the same as saying '%: ...', which doesn't do the right thing:
# it does nothing if we specify a target that already exists.
118
.PHONY: $(REALGOALS) all
kili's avatar
kili committed
119
$(REALGOALS) all: mk/config.mk.old mk/project.mk.old compiler/ghc.cabal.old
120
ifneq "$(OMIT_PHASE_0)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
121
	@echo "===--- building phase 0"
thomie's avatar
thomie committed
122
	$(MAKE) --no-print-directory -f ghc.mk phase=0 phase_0_builds
123
endif
124
ifneq "$(OMIT_PHASE_1)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
125
	@echo "===--- building phase 1"
thomie's avatar
thomie committed
126
	$(MAKE) --no-print-directory -f ghc.mk phase=1 phase_1_builds
Ian Lynagh's avatar
Ian Lynagh committed
127 128
endif
	@echo "===--- building final phase"
thomie's avatar
thomie committed
129
	$(MAKE) --no-print-directory -f ghc.mk phase=final $@
130

thomie's avatar
thomie committed
131
.PHONY: binary-dist
Ian Lynagh's avatar
Ian Lynagh committed
132
binary-dist: binary-dist-prep
133
	mv bindistprep/*.tar.$(TAR_COMP_EXT) .
Ian Lynagh's avatar
Ian Lynagh committed
134

thomie's avatar
thomie committed
135
.PHONY: binary-dist-prep
Ian Lynagh's avatar
Ian Lynagh committed
136 137
binary-dist-prep:
ifeq "$(mingw32_TARGET_OS)" "1"
thomie's avatar
thomie committed
138
	$(MAKE) --no-print-directory -f ghc.mk windows-binary-dist-prep
139
else
Ian Lynagh's avatar
Ian Lynagh committed
140
	rm -f bindist-list
141
	$(MAKE) --no-print-directory -f ghc.mk bindist-list BINDIST=YES
thomie's avatar
thomie committed
142
	$(MAKE) --no-print-directory -f ghc.mk unix-binary-dist-prep
143
endif
144

145 146 147 148 149
.PHONY: install-strip
install-strip:
	# See Note [install-strip].
	$(MAKE) --no-print-directory -f ghc.mk INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install

150 151 152 153 154 155
.PHONY: sdist sdist-ghc sdist-ghc-prep sdist-windows-tarballs sdist-windows-tarballs-prep sdist-testsuite sdist-testsuite-prep
# Just running `./boot && ./configure && make sdist` should work, so skip
# phase 0 and 1 and don't build any dependency files.
sdist sdist-ghc sdist-ghc-prep sdist-windows-tarballs sdist-windows-tarballs-prep sdist-testsuite sdist-testsuite-prep :
	$(MAKE) --no-print-directory -f ghc.mk $@ NO_INCLUDE_DEPS=YES NO_INCLUDE_PKGDATA=YES

thomie's avatar
thomie committed
156
.PHONY: clean distclean maintainer-clean
157
clean distclean maintainer-clean:
thomie's avatar
thomie committed
158
	$(MAKE) --no-print-directory -f ghc.mk $@ CLEANING=YES
Ian Lynagh's avatar
Ian Lynagh committed
159
	test ! -d testsuite || $(MAKE) -C testsuite $@
Ian Lynagh's avatar
Ian Lynagh committed
160

thomie's avatar
thomie committed
161
.PHONY: $(filter clean_%,$(MAKECMDGOALS))
162
$(filter clean_%, $(MAKECMDGOALS)) : clean_% :
thomie's avatar
thomie committed
163
	$(MAKE) --no-print-directory -f ghc.mk $@ CLEANING=YES
164

thomie's avatar
thomie committed
165
.PHONY: bootstrapping-files show echo
166
bootstrapping-files show echo:
thomie's avatar
thomie committed
167
	$(MAKE) --no-print-directory -f ghc.mk $@
sof's avatar
sof committed
168

169 170 171 172
.PHONY: show!
show!:
	$(MAKE) --no-print-directory -f ghc.mk show NO_INCLUDE_PKGDATA=YES

173
ifeq "$(darwin_TARGET_OS)" "1"
thomie's avatar
thomie committed
174
.PHONY: framework-pkg
175 176 177 178
framework-pkg:
	$(MAKE) -C distrib/MacOS $@
endif

Ian Lynagh's avatar
Ian Lynagh committed
179 180 181
# If the user says 'make A B', then we don't want to invoke two
# instances of the rule above in parallel:
.NOTPARALLEL:
182

Ian Lynagh's avatar
Ian Lynagh committed
183
endif
184

185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
# Note [validate and testsuite speed]
#
# There are 3 different validate and testsuite speed settings:
# fast, normal and slow.
#
#                              how    how   used
#           cd tests  config.  many   many  by
# validate  && make   speed=   tests  ways  whom
# =============================================================================
# --fast    fast      2        some   1     Travis (to stay within time limit)
# --normal  test      1        all    1     Phabricator (slow takes too long?)
# --slow    slow      0        all    all   Nightly (slow is ok)
#
#           accept    1        all    1
#
# `make accept` should run all tests exactly once. There is no point in
# accepting a test for multiple ways, since it should produce the same output
# for all ways.
#
# To make sure all .stderr and .stdout files in the testsuite are never
# out-of-date, it is useful if Phabricator, via a normal `./validate` and `make
# test`, runs each test at least once.
207 208
.PHONY: fasttest
fasttest:
thomie's avatar
thomie committed
209
	$(MAKE) -C testsuite/tests CLEANUP=1 SUMMARY_FILE=../../testsuite_summary.txt fast
210

211 212
.PHONY: test
test:
thomie's avatar
thomie committed
213
	$(MAKE) -C testsuite/tests CLEANUP=1 SUMMARY_FILE=../../testsuite_summary.txt
214 215 216 217

.PHONY: slowtest fulltest
slowtest fulltest:
	$(MAKE) -C testsuite/tests CLEANUP=1 SUMMARY_FILE=../../testsuite_summary.txt slow