1
#===- ./Makefile -------------------------------------------*- Makefile -*--===#
3
# The LLVM Compiler Infrastructure
5
# This file is distributed under the University of Illinois Open Source
6
# License. See LICENSE.TXT for details.
8
#===------------------------------------------------------------------------===#
12
# Top-Level LLVM Build Stages:
13
# 1. Build lib/System and lib/Support, which are used by utils (tblgen).
14
# 2. Build utils, which is used by VMCore.
15
# 3. Build VMCore, which builds the Intrinsics.inc file used by libs.
16
# 4. Build libs, which are needed by llvm-config.
17
# 5. Build llvm-config, which determines inter-lib dependencies for tools.
18
# 6. Build tools, runtime, docs.
20
# When cross-compiling, there are some things (tablegen) that need to
21
# be build for the build system first.
23
# If "RC_ProjectName" exists in the environment, and its value is
24
# "llvmCore", then this is an "Apple-style" build; search for
25
# "Apple-style" in the comments for more info. Anything else is a
27
ifneq ($(findstring llvmCore, $(RC_ProjectName)),llvmCore) # Normal build (not "Apple-style").
29
ifeq ($(BUILD_DIRS_ONLY),1)
30
DIRS := lib/System lib/Support utils
33
DIRS := lib/System lib/Support utils lib/VMCore lib tools/llvm-shlib \
34
tools/llvm-config tools runtime docs unittests
35
OPTIONAL_DIRS := projects bindings
38
ifeq ($(BUILD_EXAMPLES),1)
39
OPTIONAL_DIRS += examples
42
EXTRA_DIST := test unittests llvm.spec include win32 Xcode
44
include $(LEVEL)/Makefile.config
46
ifneq ($(ENABLE_SHARED),1)
47
DIRS := $(filter-out tools/llvm-shlib, $(DIRS))
50
ifeq ($(MAKECMDGOALS),libs-only)
51
DIRS := $(filter-out tools runtime docs, $(DIRS))
55
ifeq ($(MAKECMDGOALS),install-libs)
56
DIRS := $(filter-out tools runtime docs, $(DIRS))
57
OPTIONAL_DIRS := $(filter bindings, $(OPTIONAL_DIRS))
60
ifeq ($(MAKECMDGOALS),tools-only)
61
DIRS := $(filter-out runtime docs, $(DIRS))
65
ifeq ($(MAKECMDGOALS),install-clang)
66
DIRS := tools/clang/tools/driver tools/clang/lib/Headers \
67
tools/clang/lib/Runtime tools/clang/docs
72
ifeq ($(MAKECMDGOALS),clang-only)
73
DIRS := $(filter-out tools runtime docs unittests, $(DIRS)) tools/clang
77
ifeq ($(MAKECMDGOALS),unittests)
78
DIRS := $(filter-out tools runtime docs, $(DIRS)) utils unittests
82
# Use NO_INSTALL define of the Makefile of each directory for deciding
83
# if the directory is installed or not
84
ifeq ($(MAKECMDGOALS),install)
85
OPTIONAL_DIRS := $(filter bindings, $(OPTIONAL_DIRS))
88
# If we're cross-compiling, build the build-hosted tools first
89
ifeq ($(LLVM_CROSS_COMPILING),1)
90
all:: cross-compile-build-tools
93
$(Verb) rm -rf BuildTools
95
cross-compile-build-tools:
96
$(Verb) if [ ! -f BuildTools/Makefile ]; then \
97
$(MKDIR) BuildTools; \
101
$(PROJ_SRC_DIR)/configure --build=$(BUILD_TRIPLE) \
102
--host=$(BUILD_TRIPLE) --target=$(BUILD_TRIPLE); \
105
($(MAKE) -C BuildTools \
108
ENABLE_OPTIMIZED=$(ENABLE_OPTIMIZED) \
109
ENABLE_PROFILING=$(ENABLE_PROFILING) \
110
ENABLE_COVERAGE=$(ENABLE_COVERAGE) \
111
DISABLE_ASSERTIONS=$(DISABLE_ASSERTIONS) \
112
ENABLE_EXPENSIVE_CHECKS=$(ENABLE_EXPENSIVE_CHECKS) \
116
# Include the main makefile machinery.
117
include $(LLVM_SRC_ROOT)/Makefile.rules
119
# Specify options to pass to configure script when we're
120
# running the dist-check target
121
DIST_CHECK_CONFIG_OPTIONS = --with-llvmgccdir=$(LLVMGCCDIR)
123
.PHONY: debug-opt-prof
125
$(Echo) Building Debug Version
128
$(Echo) Building Optimized Version
130
$(Verb) $(MAKE) ENABLE_OPTIMIZED=1
132
$(Echo) Building Profiling Version
134
$(Verb) $(MAKE) ENABLE_PROFILING=1
137
$(Echo) Eliminating files constructed by configure
139
$(TopDistDir)/include/llvm/Config/config.h \
140
$(TopDistDir)/include/llvm/System/DataTypes.h
145
install-clang: install
146
install-libs: install
148
#------------------------------------------------------------------------
149
# Make sure the generated headers are up-to-date. This must be kept in
150
# sync with the AC_CONFIG_HEADER invocations in autoconf/configure.ac
151
#------------------------------------------------------------------------
153
include/llvm/Config/config.h \
154
include/llvm/Config/Targets.def \
155
include/llvm/Config/AsmPrinters.def \
156
include/llvm/Config/AsmParsers.def \
157
include/llvm/Config/Disassemblers.def \
158
include/llvm/System/DataTypes.h \
159
tools/llvmc/plugins/Base/Base.td
160
FilesToConfigPATH := $(addprefix $(LLVM_OBJ_ROOT)/,$(FilesToConfig))
162
all-local:: $(FilesToConfigPATH)
163
$(FilesToConfigPATH) : $(LLVM_OBJ_ROOT)/% : $(LLVM_SRC_ROOT)/%.in
164
$(Echo) Regenerating $*
165
$(Verb) cd $(LLVM_OBJ_ROOT) && $(ConfigStatusScript) $*
166
.PRECIOUS: $(FilesToConfigPATH)
168
# NOTE: This needs to remain as the last target definition in this file so
169
# that it gets executed last.
170
ifneq ($(BUILD_DIRS_ONLY),1)
172
$(Echo) '*****' Completed $(BuildMode)$(AssertMode) Build
173
ifeq ($(BuildMode),Debug)
174
$(Echo) '*****' Note: Debug build can be 10 times slower than an
175
$(Echo) '*****' optimized build. Use 'make ENABLE_OPTIMIZED=1' to
176
$(Echo) '*****' make an optimized build. Alternatively you can
177
$(Echo) '*****' configure with --enable-optimized.
182
$(Verb)$(MAKE) check TESTSUITE=Feature RUNLLVM2CPP=1
185
$(Verb)$(MAKE) -C test check-one TESTONE=$(TESTONE)
187
srpm: $(LLVM_OBJ_ROOT)/llvm.spec
188
rpmbuild -bs $(LLVM_OBJ_ROOT)/llvm.spec
190
rpm: $(LLVM_OBJ_ROOT)/llvm.spec
191
rpmbuild -bb --target $(TARGET_TRIPLE) $(LLVM_OBJ_ROOT)/llvm.spec
194
$(Verb) du -sk $(LibDir)
195
$(Verb) du -sk $(ToolDir)
196
$(Verb) du -sk $(ExmplDir)
197
$(Verb) du -sk $(ObjDir)
200
$(Verb) if test ! -f ./config.status ; then \
201
./configure --prefix="$(LLVM_TOP)/install" \
202
--with-llvm-gcc="$(LLVM_TOP)/llvm-gcc" ; \
204
$(Verb) $(MAKE) tools-only
209
SUB-SVN-DIRS = $(AWK) '/\?\ \ \ \ \ \ / {print $$2}' \
210
| LC_ALL=C xargs $(SVN) info 2>/dev/null \
211
| $(AWK) '/Path:\ / {print $$2}'
214
$(SVN) $(SVN-UPDATE-OPTIONS) update $(LLVM_SRC_ROOT)
215
@ $(SVN) status $(LLVM_SRC_ROOT) | $(SUB-SVN-DIRS) | xargs $(SVN) $(SVN-UPDATE-OPTIONS) update
217
happiness: update all check unittests
219
.PHONY: srpm rpm update happiness
221
# declare all targets at this level to be serial:
225
else # Building "Apple-style."
226
# In an Apple-style build, once configuration is done, lines marked
227
# "Apple-style" are removed with sed! Please don't remove these!
228
# Look for the string "Apple-style" in utils/buildit/build_llvm.
229
include $(shell find . -name GNUmakefile) # Building "Apple-style."
230
endif # Building "Apple-style."