Makefile 5.93 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
else
35

36
.PHONY: default
Ian Lynagh's avatar
Ian Lynagh committed
37 38
default : all
	@:
39

40 41
# For help, type 'make help'
.PHONY: help
Kyle J. Van Berendonck's avatar
Kyle J. Van Berendonck committed
42
help:
Austin Seipp's avatar
Austin Seipp committed
43
	@cat MAKEHELP.md
44

45
ifneq "$(filter maintainer-clean distclean clean clean_% help,$(MAKECMDGOALS))" ""
46 47
-include mk/config.mk
else
48 49 50 51
include mk/config.mk
ifeq "$(ProjectVersion)" ""
$(error Please run ./configure first)
endif
52
endif
53 54 55

include mk/custom-settings.mk

56 57 58 59 60 61 62
# 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
63
# No need to update makefiles for these targets:
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
# (the ones we're filtering out)
REALGOALS=$(filter-out \
    binary-dist \
    binary-dist-prep \
    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 \
81
    show! \
82 83 84 85
    echo \
    help \
    test \
    fulltest \
86
    slowtest \
87 88
    fasttest \
  ,$(MAKECMDGOALS))
89

90 91 92 93
# 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
94
%.old:  %
95
	@set -x && test -f $@ && cmp -s $< $@ || cp -p $< $@
kili's avatar
kili committed
96 97
	touch -r $@ $<

98

Ian Lynagh's avatar
Ian Lynagh committed
99 100
# NB. not the same as saying '%: ...', which doesn't do the right thing:
# it does nothing if we specify a target that already exists.
101
.PHONY: $(REALGOALS) all
kili's avatar
kili committed
102
$(REALGOALS) all: mk/config.mk.old mk/project.mk.old compiler/ghc.cabal.old
103
ifneq "$(OMIT_PHASE_0)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
104
	@echo "===--- building phase 0"
thomie's avatar
thomie committed
105
	$(MAKE) --no-print-directory -f ghc.mk phase=0 phase_0_builds
106
endif
107
ifneq "$(OMIT_PHASE_1)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
108
	@echo "===--- building phase 1"
thomie's avatar
thomie committed
109
	$(MAKE) --no-print-directory -f ghc.mk phase=1 phase_1_builds
Ian Lynagh's avatar
Ian Lynagh committed
110 111
endif
	@echo "===--- building final phase"
thomie's avatar
thomie committed
112
	$(MAKE) --no-print-directory -f ghc.mk phase=final $@
113

114
.PHONY: binary-dist
Ian Lynagh's avatar
Ian Lynagh committed
115
binary-dist: binary-dist-prep
116
	mv bindistprep/*.tar.$(TAR_COMP_EXT) .
Ian Lynagh's avatar
Ian Lynagh committed
117

118
.PHONY: binary-dist-prep
Ian Lynagh's avatar
Ian Lynagh committed
119 120
binary-dist-prep:
ifeq "$(mingw32_TARGET_OS)" "1"
thomie's avatar
thomie committed
121
	$(MAKE) --no-print-directory -f ghc.mk windows-binary-dist-prep
122
else
Ian Lynagh's avatar
Ian Lynagh committed
123
	rm -f bindist-list
124
	$(MAKE) --no-print-directory -f ghc.mk bindist-list BINDIST=YES
thomie's avatar
thomie committed
125
	$(MAKE) --no-print-directory -f ghc.mk unix-binary-dist-prep
126
endif
127

128 129 130 131 132 133
.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

134
.PHONY: clean distclean maintainer-clean
135
clean distclean maintainer-clean:
thomie's avatar
thomie committed
136
	$(MAKE) --no-print-directory -f ghc.mk $@ CLEANING=YES
Ian Lynagh's avatar
Ian Lynagh committed
137
	test ! -d testsuite || $(MAKE) -C testsuite $@
Ian Lynagh's avatar
Ian Lynagh committed
138

139
.PHONY: $(filter clean_%,$(MAKECMDGOALS))
140
$(filter clean_%, $(MAKECMDGOALS)) : clean_% :
thomie's avatar
thomie committed
141
	$(MAKE) --no-print-directory -f ghc.mk $@ CLEANING=YES
142

143
.PHONY: bootstrapping-files show echo
144
bootstrapping-files show echo:
thomie's avatar
thomie committed
145
	$(MAKE) --no-print-directory -f ghc.mk $@
sof's avatar
sof committed
146

147 148 149 150
.PHONY: show!
show!:
	$(MAKE) --no-print-directory -f ghc.mk show NO_INCLUDE_PKGDATA=YES

151
ifeq "$(darwin_TARGET_OS)" "1"
152
.PHONY: framework-pkg
153 154 155 156
framework-pkg:
	$(MAKE) -C distrib/MacOS $@
endif

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

Ian Lynagh's avatar
Ian Lynagh committed
161
endif
162

163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
# 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.
185 186
.PHONY: fasttest
fasttest:
thomie's avatar
thomie committed
187
	$(MAKE) -C testsuite/tests CLEANUP=1 SUMMARY_FILE=../../testsuite_summary.txt fast
188

189 190
.PHONY: test
test:
thomie's avatar
thomie committed
191
	$(MAKE) -C testsuite/tests CLEANUP=1 SUMMARY_FILE=../../testsuite_summary.txt
192 193 194 195

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