Makefile revision f6afae2f49ed65a6a482257c7e55520857d751b7
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 10LEVEL := . 11 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. 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. 27ifneq ($(findstring llvmCore, $(RC_ProjectName)),llvmCore) # Normal build (not "Apple-style"). 28 29ifeq ($(BUILD_DIRS_ONLY),1) 30 DIRS := lib/System lib/Support utils 31 OPTIONAL_DIRS := 32else 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 36endif 37 38ifeq ($(BUILD_EXAMPLES),1) 39 OPTIONAL_DIRS += examples 40endif 41 42EXTRA_DIST := test unittests llvm.spec include win32 Xcode 43 44include $(LEVEL)/Makefile.config 45 46# llvm-gcc4 doesn't need runtime libs. llvm-gcc4 is the only supported one. 47# FIXME: Remove runtime entirely once we have an understanding of where 48# libprofile etc should go. 49#ifeq ($(LLVMGCC_MAJVERS),4) 50# DIRS := $(filter-out runtime, $(DIRS)) 51#endif 52 53ifeq ($(MAKECMDGOALS),libs-only) 54 DIRS := $(filter-out tools runtime docs, $(DIRS)) 55 OPTIONAL_DIRS := 56endif 57 58ifeq ($(MAKECMDGOALS),install-libs) 59 DIRS := $(filter-out tools runtime docs, $(DIRS)) 60 OPTIONAL_DIRS := $(filter bindings, $(OPTIONAL_DIRS)) 61endif 62 63ifeq ($(MAKECMDGOALS),tools-only) 64 DIRS := $(filter-out runtime docs, $(DIRS)) 65 OPTIONAL_DIRS := 66endif 67 68ifeq ($(MAKECMDGOALS),install-clang) 69 DIRS := tools/clang/tools/driver tools/clang/lib/Headers \ 70 tools/clang/lib/Runtime tools/clang/docs 71 OPTIONAL_DIRS := 72 NO_INSTALL = 1 73endif 74 75ifeq ($(MAKECMDGOALS),clang-only) 76 DIRS := $(filter-out tools runtime docs unittests, $(DIRS)) tools/clang 77 OPTIONAL_DIRS := 78endif 79 80ifeq ($(MAKECMDGOALS),unittests) 81 DIRS := $(filter-out tools runtime docs, $(DIRS)) utils unittests 82 OPTIONAL_DIRS := 83endif 84 85# Use NO_INSTALL define of the Makefile of each directory for deciding 86# if the directory is installed or not 87ifeq ($(MAKECMDGOALS),install) 88 OPTIONAL_DIRS := $(filter bindings, $(OPTIONAL_DIRS)) 89endif 90 91# If we're cross-compiling, build the build-hosted tools first 92ifeq ($(LLVM_CROSS_COMPILING),1) 93all:: cross-compile-build-tools 94 95clean:: 96 $(Verb) rm -rf BuildTools 97 98cross-compile-build-tools: 99 $(Verb) if [ ! -f BuildTools/Makefile ]; then \ 100 $(MKDIR) BuildTools; \ 101 cd BuildTools ; \ 102 unset CFLAGS ; \ 103 unset CXXFLAGS ; \ 104 $(PROJ_SRC_DIR)/configure --build=$(BUILD_TRIPLE) \ 105 --host=$(BUILD_TRIPLE) --target=$(BUILD_TRIPLE); \ 106 cd .. ; \ 107 fi; \ 108 ($(MAKE) -C BuildTools \ 109 BUILD_DIRS_ONLY=1 \ 110 UNIVERSAL= \ 111 ENABLE_OPTIMIZED=$(ENABLE_OPTIMIZED) \ 112 ENABLE_PROFILING=$(ENABLE_PROFILING) \ 113 ENABLE_COVERAGE=$(ENABLE_COVERAGE) \ 114 DISABLE_ASSERTIONS=$(DISABLE_ASSERTIONS) \ 115 ENABLE_EXPENSIVE_CHECKS=$(ENABLE_EXPENSIVE_CHECKS) \ 116 ) || exit 1; 117endif 118 119# Include the main makefile machinery. 120include $(LLVM_SRC_ROOT)/Makefile.rules 121 122# Specify options to pass to configure script when we're 123# running the dist-check target 124DIST_CHECK_CONFIG_OPTIONS = --with-llvmgccdir=$(LLVMGCCDIR) 125 126.PHONY: debug-opt-prof 127debug-opt-prof: 128 $(Echo) Building Debug Version 129 $(Verb) $(MAKE) 130 $(Echo) 131 $(Echo) Building Optimized Version 132 $(Echo) 133 $(Verb) $(MAKE) ENABLE_OPTIMIZED=1 134 $(Echo) 135 $(Echo) Building Profiling Version 136 $(Echo) 137 $(Verb) $(MAKE) ENABLE_PROFILING=1 138 139dist-hook:: 140 $(Echo) Eliminating files constructed by configure 141 $(Verb) $(RM) -f \ 142 $(TopDistDir)/include/llvm/Config/config.h \ 143 $(TopDistDir)/include/llvm/System/DataTypes.h 144 145clang-only: all 146tools-only: all 147libs-only: all 148install-clang: install 149install-libs: install 150 151#------------------------------------------------------------------------ 152# Make sure the generated headers are up-to-date. This must be kept in 153# sync with the AC_CONFIG_HEADER invocations in autoconf/configure.ac 154#------------------------------------------------------------------------ 155FilesToConfig := \ 156 include/llvm/Config/config.h \ 157 include/llvm/Config/Targets.def \ 158 include/llvm/Config/AsmPrinters.def \ 159 include/llvm/Config/AsmParsers.def \ 160 include/llvm/Config/Disassemblers.def \ 161 include/llvm/System/DataTypes.h \ 162 tools/llvmc/plugins/Base/Base.td 163FilesToConfigPATH := $(addprefix $(LLVM_OBJ_ROOT)/,$(FilesToConfig)) 164 165all-local:: $(FilesToConfigPATH) 166$(FilesToConfigPATH) : $(LLVM_OBJ_ROOT)/% : $(LLVM_SRC_ROOT)/%.in 167 $(Echo) Regenerating $* 168 $(Verb) cd $(LLVM_OBJ_ROOT) && $(ConfigStatusScript) $* 169.PRECIOUS: $(FilesToConfigPATH) 170 171# NOTE: This needs to remain as the last target definition in this file so 172# that it gets executed last. 173ifneq ($(BUILD_DIRS_ONLY),1) 174all:: 175 $(Echo) '*****' Completed $(BuildMode)$(AssertMode) Build 176ifeq ($(BuildMode),Debug) 177 $(Echo) '*****' Note: Debug build can be 10 times slower than an 178 $(Echo) '*****' optimized build. Use 'make ENABLE_OPTIMIZED=1' to 179 $(Echo) '*****' make an optimized build. Alternatively you can 180 $(Echo) '*****' configure with --enable-optimized. 181endif 182endif 183 184check-llvm2cpp: 185 $(Verb)$(MAKE) check TESTSUITE=Feature RUNLLVM2CPP=1 186 187check-one: 188 $(Verb)$(MAKE) -C test check-one TESTONE=$(TESTONE) 189 190srpm: $(LLVM_OBJ_ROOT)/llvm.spec 191 rpmbuild -bs $(LLVM_OBJ_ROOT)/llvm.spec 192 193rpm: $(LLVM_OBJ_ROOT)/llvm.spec 194 rpmbuild -bb --target $(TARGET_TRIPLE) $(LLVM_OBJ_ROOT)/llvm.spec 195 196show-footprint: 197 $(Verb) du -sk $(LibDir) 198 $(Verb) du -sk $(ToolDir) 199 $(Verb) du -sk $(ExmplDir) 200 $(Verb) du -sk $(ObjDir) 201 202build-for-llvm-top: 203 $(Verb) if test ! -f ./config.status ; then \ 204 ./configure --prefix="$(LLVM_TOP)/install" \ 205 --with-llvm-gcc="$(LLVM_TOP)/llvm-gcc" ; \ 206 fi 207 $(Verb) $(MAKE) tools-only 208 209SVN = svn 210SVN-UPDATE-OPTIONS = 211AWK = awk 212SUB-SVN-DIRS = $(AWK) '/\?\ \ \ \ \ \ / {print $$2}' \ 213 | LC_ALL=C xargs $(SVN) info 2>/dev/null \ 214 | $(AWK) '/Path:\ / {print $$2}' 215 216update: 217 $(SVN) $(SVN-UPDATE-OPTIONS) update $(LLVM_SRC_ROOT) 218 @ $(SVN) status $(LLVM_SRC_ROOT) | $(SUB-SVN-DIRS) | xargs $(SVN) $(SVN-UPDATE-OPTIONS) update 219 220happiness: update all check unittests 221 222.PHONY: srpm rpm update happiness 223 224# declare all targets at this level to be serial: 225 226.NOTPARALLEL: 227 228else # Building "Apple-style." 229# In an Apple-style build, once configuration is done, lines marked 230# "Apple-style" are removed with sed! Please don't remove these! 231# Look for the string "Apple-style" in utils/buildit/build_llvm. 232include $(shell find . -name GNUmakefile) # Building "Apple-style." 233endif # Building "Apple-style." 234