John Bauman | 66b8ab2 | 2014-05-06 15:57:45 -0400 | [diff] [blame] | 1 | #===- ./Makefile -------------------------------------------*- Makefile -*--===#
|
| 2 | #
|
| 3 | # The LLVM Compiler Infrastructure
|
| 4 | #
|
| 5 | # This file is distributed under the University of Illinois Open Source
|
| 6 | # License. See LICENSE.TXT for details.
|
| 7 | #
|
| 8 | #===------------------------------------------------------------------------===#
|
| 9 |
|
| 10 | LEVEL := .
|
| 11 |
|
| 12 | # Top-Level LLVM Build Stages:
|
| 13 | # 1. Build lib/Support and lib/TableGen, 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.
|
| 19 | #
|
| 20 | # When cross-compiling, there are some things (tablegen) that need to
|
| 21 | # be build for the build system first.
|
| 22 |
|
| 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
|
| 26 | # normal build.
|
| 27 | ifneq ($(findstring llvmCore, $(RC_ProjectName)),llvmCore) # Normal build (not "Apple-style").
|
| 28 |
|
| 29 | ifeq ($(BUILD_DIRS_ONLY),1)
|
| 30 | DIRS := lib/Support lib/TableGen utils
|
| 31 | OPTIONAL_DIRS := tools/clang/utils/TableGen
|
| 32 | else
|
| 33 | DIRS := lib/Support lib/TableGen utils lib/VMCore lib tools/llvm-shlib \
|
| 34 | tools/llvm-config tools runtime docs unittests
|
| 35 | OPTIONAL_DIRS := projects bindings
|
| 36 | endif
|
| 37 |
|
| 38 | ifeq ($(BUILD_EXAMPLES),1)
|
| 39 | OPTIONAL_DIRS += examples
|
| 40 | endif
|
| 41 |
|
| 42 | EXTRA_DIST := test unittests llvm.spec include win32 Xcode
|
| 43 |
|
| 44 | include $(LEVEL)/Makefile.config
|
| 45 |
|
| 46 | ifneq ($(ENABLE_SHARED),1)
|
| 47 | DIRS := $(filter-out tools/llvm-shlib, $(DIRS))
|
| 48 | endif
|
| 49 |
|
| 50 | ifneq ($(ENABLE_DOCS),1)
|
| 51 | DIRS := $(filter-out docs, $(DIRS))
|
| 52 | endif
|
| 53 |
|
| 54 | ifeq ($(MAKECMDGOALS),libs-only)
|
| 55 | DIRS := $(filter-out tools runtime docs, $(DIRS))
|
| 56 | OPTIONAL_DIRS :=
|
| 57 | endif
|
| 58 |
|
| 59 | ifeq ($(MAKECMDGOALS),install-libs)
|
| 60 | DIRS := $(filter-out tools runtime docs, $(DIRS))
|
| 61 | OPTIONAL_DIRS := $(filter bindings, $(OPTIONAL_DIRS))
|
| 62 | endif
|
| 63 |
|
| 64 | ifeq ($(MAKECMDGOALS),tools-only)
|
| 65 | DIRS := $(filter-out runtime docs, $(DIRS))
|
| 66 | OPTIONAL_DIRS :=
|
| 67 | endif
|
| 68 |
|
| 69 | ifeq ($(MAKECMDGOALS),install-clang)
|
| 70 | DIRS := tools/clang/tools/driver tools/clang/lib/Headers \
|
| 71 | tools/clang/runtime tools/clang/docs \
|
| 72 | tools/lto runtime
|
| 73 | OPTIONAL_DIRS :=
|
| 74 | NO_INSTALL = 1
|
| 75 | endif
|
| 76 |
|
| 77 | ifeq ($(MAKECMDGOALS),install-clang-c)
|
| 78 | DIRS := tools/clang/tools/driver tools/clang/lib/Headers \
|
| 79 | tools/clang/tools/libclang tools/clang/tools/c-index-test \
|
| 80 | tools/clang/include/clang-c
|
| 81 | OPTIONAL_DIRS :=
|
| 82 | NO_INSTALL = 1
|
| 83 | endif
|
| 84 |
|
| 85 | ifeq ($(MAKECMDGOALS),clang-only)
|
| 86 | DIRS := $(filter-out tools docs unittests, $(DIRS)) \
|
| 87 | tools/clang tools/lto
|
| 88 | OPTIONAL_DIRS :=
|
| 89 | endif
|
| 90 |
|
| 91 | ifeq ($(MAKECMDGOALS),unittests)
|
| 92 | DIRS := $(filter-out tools runtime docs, $(DIRS)) utils unittests
|
| 93 | OPTIONAL_DIRS :=
|
| 94 | endif
|
| 95 |
|
| 96 | # Use NO_INSTALL define of the Makefile of each directory for deciding
|
| 97 | # if the directory is installed or not
|
| 98 | ifeq ($(MAKECMDGOALS),install)
|
| 99 | OPTIONAL_DIRS := $(filter bindings, $(OPTIONAL_DIRS))
|
| 100 | endif
|
| 101 |
|
| 102 | # Don't build unittests when ONLY_TOOLS is set.
|
| 103 | ifneq ($(ONLY_TOOLS),)
|
| 104 | DIRS := $(filter-out unittests, $(DIRS))
|
| 105 | endif
|
| 106 |
|
| 107 | # If we're cross-compiling, build the build-hosted tools first
|
| 108 | ifeq ($(LLVM_CROSS_COMPILING),1)
|
| 109 | all:: cross-compile-build-tools
|
| 110 |
|
| 111 | clean::
|
| 112 | $(Verb) rm -rf BuildTools
|
| 113 |
|
| 114 | cross-compile-build-tools:
|
| 115 | $(Verb) if [ ! -f BuildTools/Makefile ]; then \
|
| 116 | $(MKDIR) BuildTools; \
|
| 117 | cd BuildTools ; \
|
| 118 | unset CFLAGS ; \
|
| 119 | unset CXXFLAGS ; \
|
| 120 | $(PROJ_SRC_DIR)/configure --build=$(BUILD_TRIPLE) \
|
| 121 | --host=$(BUILD_TRIPLE) --target=$(BUILD_TRIPLE) \
|
| 122 | --disable-polly ; \
|
| 123 | cd .. ; \
|
| 124 | fi; \
|
| 125 | (unset SDKROOT; \
|
| 126 | $(MAKE) -C BuildTools \
|
| 127 | BUILD_DIRS_ONLY=1 \
|
| 128 | UNIVERSAL= \
|
| 129 | ENABLE_OPTIMIZED=$(ENABLE_OPTIMIZED) \
|
| 130 | ENABLE_PROFILING=$(ENABLE_PROFILING) \
|
| 131 | ENABLE_COVERAGE=$(ENABLE_COVERAGE) \
|
| 132 | DISABLE_ASSERTIONS=$(DISABLE_ASSERTIONS) \
|
| 133 | ENABLE_EXPENSIVE_CHECKS=$(ENABLE_EXPENSIVE_CHECKS) \
|
| 134 | CFLAGS= \
|
| 135 | CXXFLAGS= \
|
| 136 | ) || exit 1;
|
| 137 | endif
|
| 138 |
|
| 139 | # Include the main makefile machinery.
|
| 140 | include $(LLVM_SRC_ROOT)/Makefile.rules
|
| 141 |
|
| 142 | # Specify options to pass to configure script when we're
|
| 143 | # running the dist-check target
|
| 144 | DIST_CHECK_CONFIG_OPTIONS = --with-llvmgccdir=$(LLVMGCCDIR)
|
| 145 |
|
| 146 | .PHONY: debug-opt-prof
|
| 147 | debug-opt-prof:
|
| 148 | $(Echo) Building Debug Version
|
| 149 | $(Verb) $(MAKE)
|
| 150 | $(Echo)
|
| 151 | $(Echo) Building Optimized Version
|
| 152 | $(Echo)
|
| 153 | $(Verb) $(MAKE) ENABLE_OPTIMIZED=1
|
| 154 | $(Echo)
|
| 155 | $(Echo) Building Profiling Version
|
| 156 | $(Echo)
|
| 157 | $(Verb) $(MAKE) ENABLE_PROFILING=1
|
| 158 |
|
| 159 | dist-hook::
|
| 160 | $(Echo) Eliminating files constructed by configure
|
| 161 | $(Verb) $(RM) -f \
|
| 162 | $(TopDistDir)/include/llvm/Config/config.h \
|
| 163 | $(TopDistDir)/include/llvm/Support/DataTypes.h
|
| 164 |
|
| 165 | clang-only: all
|
| 166 | tools-only: all
|
| 167 | libs-only: all
|
| 168 | install-clang: install
|
| 169 | install-clang-c: install
|
| 170 | install-libs: install
|
| 171 |
|
| 172 | # If SHOW_DIAGNOSTICS is enabled, clear the diagnostics file first.
|
| 173 | ifeq ($(SHOW_DIAGNOSTICS),1)
|
| 174 | clean-diagnostics:
|
| 175 | $(Verb) rm -f $(LLVM_OBJ_ROOT)/$(BuildMode)/diags
|
| 176 | .PHONY: clean-diagnostics
|
| 177 |
|
| 178 | all-local:: clean-diagnostics
|
| 179 | endif
|
| 180 |
|
| 181 | #------------------------------------------------------------------------
|
| 182 | # Make sure the generated headers are up-to-date. This must be kept in
|
| 183 | # sync with the AC_CONFIG_HEADER invocations in autoconf/configure.ac
|
| 184 | #------------------------------------------------------------------------
|
| 185 | FilesToConfig := \
|
| 186 | include/llvm/Config/config.h \
|
| 187 | include/llvm/Config/Targets.def \
|
| 188 | include/llvm/Config/AsmPrinters.def \
|
| 189 | include/llvm/Config/AsmParsers.def \
|
| 190 | include/llvm/Config/Disassemblers.def \
|
| 191 | include/llvm/Support/DataTypes.h
|
| 192 | FilesToConfigPATH := $(addprefix $(LLVM_OBJ_ROOT)/,$(FilesToConfig))
|
| 193 |
|
| 194 | all-local:: $(FilesToConfigPATH)
|
| 195 | $(FilesToConfigPATH) : $(LLVM_OBJ_ROOT)/% : $(LLVM_SRC_ROOT)/%.in
|
| 196 | $(Echo) Regenerating $*
|
| 197 | $(Verb) cd $(LLVM_OBJ_ROOT) && $(ConfigStatusScript) $*
|
| 198 | .PRECIOUS: $(FilesToConfigPATH)
|
| 199 |
|
| 200 | # NOTE: This needs to remain as the last target definition in this file so
|
| 201 | # that it gets executed last.
|
| 202 | ifneq ($(BUILD_DIRS_ONLY),1)
|
| 203 | all::
|
| 204 | $(Echo) '*****' Completed $(BuildMode) Build
|
| 205 | ifneq ($(ENABLE_OPTIMIZED),1)
|
| 206 | $(Echo) '*****' Note: Debug build can be 10 times slower than an
|
| 207 | $(Echo) '*****' optimized build. Use 'make ENABLE_OPTIMIZED=1' to
|
| 208 | $(Echo) '*****' make an optimized build. Alternatively you can
|
| 209 | $(Echo) '*****' configure with --enable-optimized.
|
| 210 | ifeq ($(SHOW_DIAGNOSTICS),1)
|
| 211 | $(Verb) if test -s $(LLVM_OBJ_ROOT)/$(BuildMode)/diags; then \
|
| 212 | $(LLVM_SRC_ROOT)/utils/show-diagnostics \
|
| 213 | $(LLVM_OBJ_ROOT)/$(BuildMode)/diags; \
|
| 214 | fi
|
| 215 | endif
|
| 216 | endif
|
| 217 | endif
|
| 218 |
|
| 219 | check-llvm2cpp:
|
| 220 | $(Verb)$(MAKE) check TESTSUITE=Feature RUNLLVM2CPP=1
|
| 221 |
|
| 222 | srpm: $(LLVM_OBJ_ROOT)/llvm.spec
|
| 223 | rpmbuild -bs $(LLVM_OBJ_ROOT)/llvm.spec
|
| 224 |
|
| 225 | rpm: $(LLVM_OBJ_ROOT)/llvm.spec
|
| 226 | rpmbuild -bb --target $(TARGET_TRIPLE) $(LLVM_OBJ_ROOT)/llvm.spec
|
| 227 |
|
| 228 | show-footprint:
|
| 229 | $(Verb) du -sk $(LibDir)
|
| 230 | $(Verb) du -sk $(ToolDir)
|
| 231 | $(Verb) du -sk $(ExmplDir)
|
| 232 | $(Verb) du -sk $(ObjDir)
|
| 233 |
|
| 234 | build-for-llvm-top:
|
| 235 | $(Verb) if test ! -f ./config.status ; then \
|
| 236 | ./configure --prefix="$(LLVM_TOP)/install" \
|
| 237 | --with-llvm-gcc="$(LLVM_TOP)/llvm-gcc" ; \
|
| 238 | fi
|
| 239 | $(Verb) $(MAKE) tools-only
|
| 240 |
|
| 241 | SVN = svn
|
| 242 | SVN-UPDATE-OPTIONS =
|
| 243 | AWK = awk
|
| 244 | SUB-SVN-DIRS = $(AWK) '/\?\ \ \ \ \ \ / {print $$2}' \
|
| 245 | | LC_ALL=C xargs $(SVN) info 2>/dev/null \
|
| 246 | | $(AWK) '/Path:\ / {print $$2}'
|
| 247 |
|
| 248 | update:
|
| 249 | $(SVN) $(SVN-UPDATE-OPTIONS) update $(LLVM_SRC_ROOT)
|
| 250 | @ $(SVN) status $(LLVM_SRC_ROOT) | $(SUB-SVN-DIRS) | xargs $(SVN) $(SVN-UPDATE-OPTIONS) update
|
| 251 |
|
| 252 | happiness: update all check-all
|
| 253 |
|
| 254 | .PHONY: srpm rpm update happiness
|
| 255 |
|
| 256 | # declare all targets at this level to be serial:
|
| 257 |
|
| 258 | .NOTPARALLEL:
|
| 259 |
|
| 260 | else # Building "Apple-style."
|
| 261 | # In an Apple-style build, once configuration is done, lines marked
|
| 262 | # "Apple-style" are removed with sed! Please don't remove these!
|
| 263 | # Look for the string "Apple-style" in utils/buildit/build_llvm.
|
| 264 | include $(shell find . -name GNUmakefile) # Building "Apple-style."
|
| 265 | endif # Building "Apple-style."
|