162fd235522f83059437ce3f5aa066f2d017655b
[oota-llvm.git] / Makefile.rules
1 #===-- Makefile.rules - Common make rules for LLVM ---------*- 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 # This file is included by all of the LLVM makefiles.  For details on how to use
11 # it properly, please see the document MakefileGuide.html in the docs directory.
12 #
13 #===-----------------------------------------------------------------------====#
14
15 ################################################################################
16 # TARGETS: Define standard targets that can be invoked
17 ################################################################################
18
19 #--------------------------------------------------------------------
20 # Define the various target sets
21 #--------------------------------------------------------------------
22 RecursiveTargets := all clean clean-all install uninstall install-bytecode \
23                     unitcheck
24 LocalTargets     := all-local clean-local clean-all-local check-local \
25                     install-local printvars uninstall-local \
26                     install-bytecode-local
27 TopLevelTargets  := check dist dist-check dist-clean dist-gzip dist-bzip2 \
28                     dist-zip unittests
29 UserTargets      := $(RecursiveTargets) $(LocalTargets) $(TopLevelTargets)
30 InternalTargets  := preconditions distdir dist-hook
31
32 ################################################################################
33 # INITIALIZATION: Basic things the makefile needs
34 ################################################################################
35
36 #--------------------------------------------------------------------
37 # Set the VPATH so that we can find source files.
38 #--------------------------------------------------------------------
39 VPATH=$(PROJ_SRC_DIR)
40
41 #--------------------------------------------------------------------
42 # Reset the list of suffixes we know how to build.
43 #--------------------------------------------------------------------
44 .SUFFIXES:
45 .SUFFIXES: .c .cpp .cc .h .hpp .o .a .bc .td .ps .dot .ll .m .mm
46 .SUFFIXES: $(SHLIBEXT) $(SUFFIXES)
47
48 #--------------------------------------------------------------------
49 # Mark all of these targets as phony to avoid implicit rule search
50 #--------------------------------------------------------------------
51 .PHONY: $(UserTargets) $(InternalTargets)
52
53 #--------------------------------------------------------------------
54 # Make sure all the user-target rules are double colon rules and
55 # they are defined first.
56 #--------------------------------------------------------------------
57
58 $(UserTargets)::
59
60 ################################################################################
61 # PRECONDITIONS: that which must be built/checked first
62 ################################################################################
63
64 SrcMakefiles       := $(filter %Makefile %Makefile.tests,\
65                       $(wildcard $(PROJ_SRC_DIR)/Makefile*))
66 ObjMakefiles       := $(subst $(PROJ_SRC_DIR),$(PROJ_OBJ_DIR),$(SrcMakefiles))
67 ConfigureScript    := $(PROJ_SRC_ROOT)/configure
68 ConfigStatusScript := $(PROJ_OBJ_ROOT)/config.status
69 MakefileConfigIn   := $(strip $(wildcard $(PROJ_SRC_ROOT)/Makefile.config.in))
70 MakefileCommonIn   := $(strip $(wildcard $(PROJ_SRC_ROOT)/Makefile.common.in))
71 MakefileConfig     := $(PROJ_OBJ_ROOT)/Makefile.config
72 MakefileCommon     := $(PROJ_OBJ_ROOT)/Makefile.common
73 PreConditions      := $(ConfigStatusScript) $(ObjMakefiles)
74 ifneq ($(MakefileCommonIn),)
75 PreConditions      += $(MakefileCommon)
76 endif
77
78 ifneq ($(MakefileConfigIn),)
79 PreConditions      += $(MakefileConfig)
80 endif
81
82 preconditions: $(PreConditions)
83
84 #------------------------------------------------------------------------
85 # Make sure the BUILT_SOURCES are built first
86 #------------------------------------------------------------------------
87 $(filter-out clean clean-local,$(UserTargets)):: $(BUILT_SOURCES)
88
89 clean-all-local::
90 ifneq ($(strip $(BUILT_SOURCES)),)
91         -$(Verb) $(RM) -f $(BUILT_SOURCES)
92 endif
93
94 ifneq ($(PROJ_OBJ_ROOT),$(PROJ_SRC_ROOT))
95 spotless:
96         $(Verb) if test -x config.status ; then \
97           $(EchoCmd) Wiping out $(PROJ_OBJ_ROOT) ; \
98           $(MKDIR) .spotless.save ; \
99           $(MV) config.status .spotless.save ; \
100           $(MV) mklib  .spotless.save ; \
101           $(MV) projects  .spotless.save ; \
102           $(RM) -rf * ; \
103           $(MV) .spotless.save/config.status . ; \
104           $(MV) .spotless.save/mklib . ; \
105           $(MV) .spotless.save/projects . ; \
106           $(RM) -rf .spotless.save ; \
107           $(EchoCmd) Rebuilding configuration of $(PROJ_OBJ_ROOT) ; \
108           $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
109           $(ConfigStatusScript) ; \
110         else \
111           $(EchoCmd) "make spotless" can only be run from $(PROJ_OBJ_ROOT); \
112         fi
113 else
114 spotless:
115         $(EchoCmd) "spotless target not supported for objdir == srcdir"
116 endif
117
118 $(BUILT_SOURCES) : $(ObjMakefiles)
119
120 #------------------------------------------------------------------------
121 # Make sure we're not using a stale configuration
122 #------------------------------------------------------------------------
123 reconfigure:
124         $(Echo) Reconfiguring $(PROJ_OBJ_ROOT)
125         $(Verb) cd $(PROJ_OBJ_ROOT) && \
126           if test -w $(PROJ_OBJ_ROOT)/config.cache ; then \
127             $(RM) $(PROJ_OBJ_ROOT)/config.cache ; \
128           fi ; \
129           $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
130           $(ConfigStatusScript)
131
132 .PRECIOUS: $(ConfigStatusScript)
133 $(ConfigStatusScript): $(ConfigureScript)
134         $(Echo) Reconfiguring with $<
135         $(Verb) cd $(PROJ_OBJ_ROOT) && \
136           if test -w $(PROJ_OBJ_ROOT)/config.cache ; then \
137             $(RM) $(PROJ_OBJ_ROOT)/config.cache ; \
138           fi ; \
139           $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
140           $(ConfigStatusScript)
141
142 #------------------------------------------------------------------------
143 # Make sure the configuration makefile is up to date
144 #------------------------------------------------------------------------
145 ifneq ($(MakefileConfigIn),)
146 $(MakefileConfig): $(MakefileConfigIn) $(ConfigStatusScript)
147         $(Echo) Regenerating $@
148         $(Verb) cd $(PROJ_OBJ_ROOT) ; $(ConfigStatusScript) Makefile.config
149 endif
150
151 ifneq ($(MakefileCommonIn),)
152 $(MakefileCommon): $(MakefileCommonIn) $(ConfigStatusScript)
153         $(Echo) Regenerating $@
154         $(Verb) cd $(PROJ_OBJ_ROOT) ; $(ConfigStatusScript) Makefile.common
155 endif
156
157 #------------------------------------------------------------------------
158 # If the Makefile in the source tree has been updated, copy it over into the
159 # build tree. But, only do this if the source and object makefiles differ
160 #------------------------------------------------------------------------
161 ifndef PROJ_MAKEFILE
162 PROJ_MAKEFILE := $(PROJ_SRC_DIR)/Makefile
163 endif
164
165 ifneq ($(PROJ_OBJ_DIR),$(PROJ_SRC_DIR))
166
167 Makefile: $(PROJ_MAKEFILE) $(ExtraMakefiles)
168         $(Echo) "Updating Makefile"
169         $(Verb) $(MKDIR) $(@D)
170         $(Verb) $(CP) -f $< $@
171
172 # Copy the Makefile.* files unless we're in the root directory which avoids
173 # the copying of Makefile.config.in or other things that should be explicitly
174 # taken care of.
175 $(PROJ_OBJ_DIR)/Makefile% : $(PROJ_MAKEFILE)%
176         @case '$?' in \
177           *Makefile.rules) ;; \
178           *.in) ;; \
179           *) $(EchoCmd) "Updating $(@F)" ; \
180              $(MKDIR) $(@D) ; \
181              $(CP) -f $< $@ ;; \
182         esac
183
184 endif
185
186 #------------------------------------------------------------------------
187 # Set up the basic dependencies
188 #------------------------------------------------------------------------
189 $(UserTargets):: $(PreConditions)
190
191 all:: all-local
192 clean:: clean-local
193 clean-all:: clean-local clean-all-local
194 install:: install-local
195 uninstall:: uninstall-local
196 install-local:: all-local
197 install-bytecode:: install-bytecode-local
198
199 ###############################################################################
200 # LLVMC: Provide rules for compiling llvmc-based driver
201 ###############################################################################
202
203 ifdef LLVMC_BASED_DRIVER
204
205 TOOLNAME = $(LLVMC_BASED_DRIVER)
206
207 LLVMLIBS = CompilerDriver.a
208 LINK_COMPONENTS = support
209
210 endif # LLVMC_BASED_DRIVER
211
212 ###############################################################################
213 # VARIABLES: Set up various variables based on configuration data
214 ###############################################################################
215
216 # Variable for if this make is for a "cleaning" target
217 ifneq ($(strip $(filter clean clean-local dist-clean,$(MAKECMDGOALS))),)
218   IS_CLEANING_TARGET=1
219 endif
220
221 #--------------------------------------------------------------------
222 # Variables derived from configuration we are building
223 #--------------------------------------------------------------------
224
225 CPP.Defines :=
226 ifeq ($(ENABLE_OPTIMIZED),1)
227   BuildMode := Release
228   # Don't use -fomit-frame-pointer on Darwin or FreeBSD.
229   ifneq ($(HOST_OS),FreeBSD)
230   ifneq ($(HOST_OS),Darwin)
231     OmitFramePointer := -fomit-frame-pointer
232   endif
233   endif
234
235   # Darwin requires -fstrict-aliasing to be explicitly enabled.
236   # Avoid -fstrict-aliasing on Darwin for now, there are unresolved issues
237   # with -fstrict-aliasing and ipa-type-escape radr://6756684
238   #ifeq ($(HOST_OS),Darwin)
239   #  EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing
240   #endif
241   CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer)
242   C.Flags   += $(OPTIMIZE_OPTION) $(OmitFramePointer)
243   LD.Flags  += $(OPTIMIZE_OPTION)
244   ifdef DEBUG_SYMBOLS
245     BuildMode := $(BuildMode)+Debug
246     CXX.Flags += -g
247     C.Flags   += -g
248     LD.Flags  += -g
249     KEEP_SYMBOLS := 1
250   endif
251 else
252   ifdef NO_DEBUG_SYMBOLS
253     BuildMode := Unoptimized
254     CXX.Flags +=
255     C.Flags   +=
256     LD.Flags  +=
257     KEEP_SYMBOLS := 1
258   else
259     BuildMode := Debug
260     CXX.Flags += -g
261     C.Flags   += -g
262     LD.Flags  += -g
263     KEEP_SYMBOLS := 1
264   endif
265 endif
266
267 ifeq ($(ENABLE_PROFILING),1)
268   BuildMode := $(BuildMode)+Profile
269   CXX.Flags := $(filter-out -fomit-frame-pointer,$(CXX.Flags)) -pg -g
270   C.Flags   := $(filter-out -fomit-frame-pointer,$(C.Flags)) -pg -g
271   LD.Flags  := $(filter-out -fomit-frame-pointer,$(LD.Flags)) -pg -g
272   KEEP_SYMBOLS := 1
273 endif
274
275 #ifeq ($(ENABLE_VISIBILITY_INLINES_HIDDEN),1)
276 #    CXX.Flags += -fvisibility-inlines-hidden
277 #endif
278
279 ifdef ENABLE_EXPENSIVE_CHECKS
280   # GNU libstdc++ uses RTTI if you define _GLIBCXX_DEBUG, which we did above.
281   # See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40160
282   REQUIRES_RTTI := 1
283 endif
284
285 # IF REQUIRES_EH=1 is specified then don't disable exceptions
286 ifndef REQUIRES_EH
287   CXX.Flags += -fno-exceptions
288 else
289   # If the library requires EH, it also requires RTTI.
290   REQUIRES_RTTI := 1
291 endif
292
293 ifdef REQUIRES_FRAME_POINTER
294   CXX.Flags := $(filter-out -fomit-frame-pointer,$(CXX.Flags))
295   C.Flags   := $(filter-out -fomit-frame-pointer,$(C.Flags))
296   LD.Flags  := $(filter-out -fomit-frame-pointer,$(LD.Flags))
297 endif
298
299 # If REQUIRES_RTTI=1 is specified then don't disable run-time type id.
300 ifneq ($(REQUIRES_RTTI), 1)
301   CXX.Flags += -fno-rtti
302 endif
303
304 ifeq ($(ENABLE_COVERAGE),1)
305   BuildMode := $(BuildMode)+Coverage
306   CXX.Flags += -ftest-coverage -fprofile-arcs
307   C.Flags   += -ftest-coverage -fprofile-arcs
308 endif
309
310 # If DISABLE_ASSERTIONS=1 is specified (make command line or configured),
311 # then disable assertions by defining the appropriate preprocessor symbols.
312 ifeq ($(DISABLE_ASSERTIONS),1)
313   CPP.Defines += -DNDEBUG
314 else
315   BuildMode := $(BuildMode)+Asserts
316   CPP.Defines += -D_DEBUG
317 endif
318
319 # If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or
320 # configured), then enable expensive checks by defining the
321 # appropriate preprocessor symbols.
322 ifeq ($(ENABLE_EXPENSIVE_CHECKS),1)
323   BuildMode := $(BuildMode)+Checks
324   CPP.Defines += -D_GLIBCXX_DEBUG -DXDEBUG
325 endif
326
327 # LOADABLE_MODULE implies several other things so we force them to be
328 # defined/on.
329 ifdef LOADABLE_MODULE
330   SHARED_LIBRARY := 1
331   LINK_LIBS_IN_SHARED := 1
332 endif
333
334 ifdef SHARED_LIBRARY
335   ENABLE_PIC := 1
336   PIC_FLAG = "(PIC)"
337 endif
338
339 ifeq ($(ENABLE_PIC),1)
340   ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
341     # Nothing. Win32 defaults to PIC and warns when given -fPIC
342   else
343     ifeq ($(HOST_OS),Darwin)
344       # Common symbols not allowed in dylib files
345       CXX.Flags += -fno-common
346       C.Flags   += -fno-common
347     else
348       # Linux and others; pass -fPIC
349       CXX.Flags += -fPIC
350       C.Flags   += -fPIC
351     endif
352   endif
353 else
354   ifeq ($(HOST_OS),Darwin)
355       CXX.Flags += -mdynamic-no-pic
356       C.Flags   += -mdynamic-no-pic
357   endif
358 endif
359
360 # Support makefile variable to disable any kind of timestamp/non-deterministic
361 # info from being used in the build.
362 ifeq ($(ENABLE_TIMESTAMPS),1)
363   DOTDIR_TIMESTAMP_COMMAND := $(DATE)
364 else
365   DOTDIR_TIMESTAMP_COMMAND := echo 'Created.'
366 endif
367
368 ifeq ($(HOST_OS),MingW)
369   # Work around PR4957
370   CPP.Defines += -D__NO_CTYPE_INLINE
371   ifeq ($(LLVM_CROSS_COMPILING),1)
372     # Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=525016
373     ifdef TOOLNAME
374       LD.Flags += -Wl,--allow-multiple-definition
375     endif
376   endif
377 endif
378
379 CXX.Flags     += -Woverloaded-virtual
380 CPP.BaseFlags += $(CPP.Defines)
381 AR.Flags      := cru
382
383 # Make Floating point IEEE compliant on Alpha.
384 ifeq ($(ARCH),Alpha)
385   CXX.Flags     += -mieee
386   CPP.BaseFlags += -mieee
387 ifeq ($(ENABLE_PIC),0)
388   CXX.Flags     += -fPIC
389   CPP.BaseFlags += -fPIC
390 endif
391
392   LD.Flags += -Wl,--no-relax
393 endif
394
395 # GNU ld/PECOFF accepts but ignores them below;
396 #   --version-script
397 #   --export-dynamic
398 #   --rpath
399 # FIXME: autoconf should be aware of them.
400 ifneq (,$(filter $(HOST_OS),Cygwin MingW))
401   HAVE_LINK_VERSION_SCRIPT := 0
402   RPATH :=
403   RDYNAMIC := -Wl,--export-all-symbols
404 endif
405
406 #--------------------------------------------------------------------
407 # Directory locations
408 #--------------------------------------------------------------------
409 TargetMode :=
410 ifeq ($(LLVM_CROSS_COMPILING),1)
411   BuildLLVMToolDir := $(LLVM_OBJ_ROOT)/BuildTools/$(BuildMode)/bin
412 endif
413
414 ObjRootDir  := $(PROJ_OBJ_DIR)/$(BuildMode)
415 ObjDir      := $(ObjRootDir)
416 LibDir      := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib
417 ToolDir     := $(PROJ_OBJ_ROOT)/$(BuildMode)/bin
418 ExmplDir    := $(PROJ_OBJ_ROOT)/$(BuildMode)/examples
419 LLVMLibDir  := $(LLVM_OBJ_ROOT)/$(BuildMode)/lib
420 LLVMToolDir := $(LLVM_OBJ_ROOT)/$(BuildMode)/bin
421 LLVMExmplDir:= $(LLVM_OBJ_ROOT)/$(BuildMode)/examples
422
423 #--------------------------------------------------------------------
424 # Locations of shared libraries
425 #--------------------------------------------------------------------
426
427 SharedPrefix     := lib
428 SharedLibDir     := $(LibDir)
429 LLVMSharedLibDir := $(LLVMLibDir)
430
431 # Win32.DLL prefers to be located on the "PATH" of binaries.
432 ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
433   SharedLibDir     := $(ToolDir)
434   LLVMSharedLibDir := $(LLVMToolDir)
435
436   ifeq ($(HOST_OS),Cygwin)
437     SharedPrefix  := cyg
438   else
439     SharedPrefix  :=
440   endif
441 endif
442
443 #--------------------------------------------------------------------
444 # LLVM Capable Compiler
445 #--------------------------------------------------------------------
446
447 ifneq ($(findstring llvm-gcc,$(LLVMCC_OPTION)),)
448   LLVMCC := $(LLVMGCC)
449   LLVMCXX := $(LLVMGXX)
450 else
451   ifneq ($(findstring clang,$(LLVMCC_OPTION)),)
452     ifneq ($(CLANGPATH),)
453       LLVMCC := $(CLANGPATH)
454       LLVMCXX := $(CLANGXXPATH)
455     else
456       ifeq ($(ENABLE_BUILT_CLANG),1)
457         LLVMCC := $(LLVMToolDir)/clang
458         LLVMCXX := $(LLVMToolDir)/clang++
459       endif
460     endif
461   endif
462 endif
463
464 #--------------------------------------------------------------------
465 # Full Paths To Compiled Tools and Utilities
466 #--------------------------------------------------------------------
467 EchoCmd  = $(ECHO) llvm[$(MAKELEVEL)]:
468 Echo     = @$(EchoCmd)
469 ifndef LLVMAS
470 LLVMAS   := $(LLVMToolDir)/llvm-as$(EXEEXT)
471 endif
472 ifndef TBLGEN
473   ifeq ($(LLVM_CROSS_COMPILING),1)
474     TBLGEN   := $(BuildLLVMToolDir)/tblgen$(BUILD_EXEEXT)
475   else
476     TBLGEN   := $(LLVMToolDir)/tblgen$(EXEEXT)
477   endif
478 endif
479 LLVM_CONFIG := $(LLVMToolDir)/llvm-config
480 ifndef LLVMLD
481 LLVMLD    := $(LLVMToolDir)/llvm-ld$(EXEEXT)
482 endif
483 ifndef LLVMDIS
484 LLVMDIS  := $(LLVMToolDir)/llvm-dis$(EXEEXT)
485 endif
486 ifndef LLI
487 LLI      := $(LLVMToolDir)/lli$(EXEEXT)
488 endif
489 ifndef LLC
490 LLC      := $(LLVMToolDir)/llc$(EXEEXT)
491 endif
492 ifndef LOPT
493 LOPT     := $(LLVMToolDir)/opt$(EXEEXT)
494 endif
495 ifndef LBUGPOINT
496 LBUGPOINT := $(LLVMToolDir)/bugpoint$(EXEEXT)
497 endif
498
499 #--------------------------------------------------------------------
500 # Adjust to user's request
501 #--------------------------------------------------------------------
502
503 ifeq ($(HOST_OS),Darwin)
504   DARWIN_VERSION := `sw_vers -productVersion`
505   # Strip a number like 10.4.7 to 10.4
506   DARWIN_VERSION := $(shell echo $(DARWIN_VERSION)| sed -E 's/(10.[0-9]).*/\1/')
507   # Get "4" out of 10.4 for later pieces in the makefile.
508   DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/')
509
510   LoadableModuleOptions := -Wl,-flat_namespace -Wl,-undefined,suppress
511   SharedLinkOptions := -dynamiclib
512   ifneq ($(ARCH),ARM)
513     SharedLinkOptions += -mmacosx-version-min=$(DARWIN_VERSION)
514   endif
515 else
516   SharedLinkOptions=-shared
517 endif
518
519 ifeq ($(TARGET_OS),Darwin)
520   ifneq ($(ARCH),ARM)
521     TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION)
522   endif
523 endif
524
525 ifdef SHARED_LIBRARY
526 ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
527 ifneq ($(HOST_OS),Darwin)
528   LD.Flags += $(RPATH) -Wl,'$$ORIGIN'
529 endif
530 endif
531 endif
532
533 ifdef TOOL_VERBOSE
534   C.Flags += -v
535   CXX.Flags += -v
536   LD.Flags += -v
537   VERBOSE := 1
538 endif
539
540 # Adjust settings for verbose mode
541 ifndef VERBOSE
542   Verb := @
543   AR.Flags += >/dev/null 2>/dev/null
544   ConfigureScriptFLAGS += >$(PROJ_OBJ_DIR)/configure.out 2>&1
545 else
546   ConfigureScriptFLAGS :=
547 endif
548
549 # By default, strip symbol information from executable
550 ifndef KEEP_SYMBOLS
551   Strip := $(PLATFORMSTRIPOPTS)
552   StripWarnMsg := "(without symbols)"
553   Install.StripFlag += -s
554 endif
555
556 ifdef TOOL_NO_EXPORTS
557   DynamicFlags :=
558 else
559   DynamicFlag := $(RDYNAMIC)
560 endif
561
562 # Adjust linker flags for building an executable
563 ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
564 ifneq ($(HOST_OS), Darwin)
565 ifdef TOOLNAME
566   LD.Flags += $(RPATH) -Wl,'$$ORIGIN/../lib'
567   ifdef EXAMPLE_TOOL
568     LD.Flags += $(RPATH) -Wl,$(ExmplDir) $(DynamicFlag)
569   else
570     LD.Flags += $(RPATH) -Wl,$(ToolDir) $(DynamicFlag)
571   endif
572 endif
573 else
574 ifneq ($(DARWIN_MAJVERS),4)
575   LD.Flags += $(RPATH) -Wl,@executable_path/../lib
576 endif
577 endif
578 endif
579
580
581 #----------------------------------------------------------
582 # Options To Invoke Tools
583 #----------------------------------------------------------
584
585 ifdef EXTRA_LD_OPTIONS
586 LD.Flags += $(EXTRA_LD_OPTIONS)
587 endif
588
589 ifndef NO_PEDANTIC
590 CompileCommonOpts += -pedantic -Wno-long-long
591 endif
592 CompileCommonOpts += -Wall -W -Wno-unused-parameter -Wwrite-strings \
593                      $(EXTRA_OPTIONS)
594 # Enable cast-qual for C++; the workaround is to use const_cast.
595 CXX.Flags += -Wcast-qual
596
597 ifeq ($(HOST_OS),HP-UX)
598   CompileCommonOpts := -D_REENTRANT -D_HPUX_SOURCE
599 endif
600
601 # If we are building a universal binary on Mac OS/X, pass extra options.  This
602 # is useful to people that want to link the LLVM libraries into their universal
603 # apps.
604 #
605 # The following can be optionally specified:
606 #   UNIVERSAL_SDK_PATH variable can be specified as a path to the SDK to use.
607 #      For Mac OS/X 10.4 Intel machines, the traditional one is:
608 #      UNIVERSAL_SDK_PATH=/Developer/SDKs/MacOSX10.4u.sdk/
609 #   UNIVERSAL_ARCH can be optionally specified to be a list of architectures
610 #      to build for, e.g. UNIVERSAL_ARCH="i386 ppc ppc64".  This defaults to
611 #      i386/ppc only.
612 ifdef UNIVERSAL
613   ifndef UNIVERSAL_ARCH
614     UNIVERSAL_ARCH := i386 ppc
615   endif
616   UNIVERSAL_ARCH_OPTIONS := $(UNIVERSAL_ARCH:%=-arch %)
617   CompileCommonOpts += $(UNIVERSAL_ARCH_OPTIONS)
618   ifdef UNIVERSAL_SDK_PATH
619     CompileCommonOpts += -isysroot $(UNIVERSAL_SDK_PATH)
620   endif
621
622   # Building universal cannot compute dependencies automatically.
623   DISABLE_AUTO_DEPENDENCIES=1
624 else
625   ifeq ($(TARGET_OS),Darwin)
626     ifeq ($(ARCH),x86_64)
627       TargetCommonOpts = -m64
628     else
629       ifeq ($(ARCH),x86)
630         TargetCommonOpts = -m32
631       endif
632     endif
633   endif
634 endif
635
636 ifeq ($(HOST_OS),SunOS)
637 CPP.BaseFlags += -include llvm/Support/Solaris.h
638 endif
639
640 ifeq ($(HOST_OS),AuroraUX)
641 CPP.BaseFlags += -include llvm/Support/Solaris.h
642 endif # !HOST_OS - AuroraUX.
643
644 LD.Flags      += -L$(LibDir) -L$(LLVMLibDir)
645 CPP.BaseFlags += -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS
646 # All -I flags should go here, so that they don't confuse llvm-config.
647 CPP.Flags     += $(sort -I$(PROJ_OBJ_DIR) -I$(PROJ_SRC_DIR) \
648                  $(patsubst %,-I%/include,\
649                  $(PROJ_OBJ_ROOT) $(PROJ_SRC_ROOT) \
650                  $(LLVM_OBJ_ROOT) $(LLVM_SRC_ROOT))) \
651                  $(CPP.BaseFlags)
652
653 # SHOW_DIAGNOSTICS support.
654 ifeq ($(SHOW_DIAGNOSTICS),1)
655   Compile.Wrapper := env CC_LOG_DIAGNOSTICS=1 \
656                           CC_LOG_DIAGNOSTICS_FILE="$(LLVM_OBJ_ROOT)/$(BuildMode)/diags"
657 else
658   Compile.Wrapper :=
659 endif
660
661 ifeq ($(BUILD_COMPONENT), 1)
662   Compile.C     = $(Compile.Wrapper) \
663                   $(BUILD_CC) $(CPP.Flags) $(C.Flags) $(CFLAGS) $(CPPFLAGS) \
664                   $(TargetCommonOpts) $(CompileCommonOpts) -c
665   Compile.CXX   = $(Compile.Wrapper) \
666                   $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) \
667                   $(CPPFLAGS) \
668                   $(TargetCommonOpts) $(CompileCommonOpts) -c
669   Preprocess.CXX= $(Compile.Wrapper) \
670                   $(BUILD_CXX) $(CPP.Flags) $(CPPFLAGS) $(TargetCommonOpts) \
671                   $(CompileCommonOpts) $(CXX.Flags) -E
672   Link          = $(Compile.Wrapper) \
673                   $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) \
674                   $(LD.Flags) $(LDFLAGS) \
675                   $(TargetCommonOpts) $(CompileCommonOpts) $(Strip)
676 else
677   Compile.C     = $(Compile.Wrapper) \
678                   $(CC) $(CPP.Flags) $(C.Flags) $(CFLAGS) $(CPPFLAGS) \
679                   $(TargetCommonOpts) $(CompileCommonOpts) -c
680   Compile.CXX   = $(Compile.Wrapper) \
681                   $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) $(CPPFLAGS) \
682                   $(TargetCommonOpts) $(CompileCommonOpts) -c
683   Preprocess.CXX= $(Compile.Wrapper) \
684                   $(CXX) $(CPP.Flags) $(TargetCommonOpts) $(CPPFLAGS) \
685                   $(CompileCommonOpts) $(CXX.Flags) -E
686   Link          = $(Compile.Wrapper) \
687                   $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) $(LD.Flags) \
688                   $(LDFLAGS) $(TargetCommonOpts)  $(CompileCommonOpts) $(Strip)
689 endif
690
691 BCCompile.C   = $(LLVMCC) $(CPP.Flags) $(C.Flags) $(CFLAGS) $(CPPFLAGS) \
692                 $(TargetCommonOpts) $(CompileCommonOpts)
693 Preprocess.C  = $(CC) $(CPP.Flags) $(C.Flags) $(CPPFLAGS) \
694                 $(TargetCommonOpts) $(CompileCommonOpts) -E
695
696 BCCompile.CXX = $(LLVMCXX) $(CPP.Flags) $(CXX.Flags) $(CXXFLAGS) $(CPPFLAGS) \
697                 $(TargetCommonOpts) $(CompileCommonOpts)
698
699 ProgInstall   = $(INSTALL) $(Install.StripFlag) -m 0755
700 ScriptInstall = $(INSTALL) -m 0755
701 DataInstall   = $(INSTALL) -m 0644
702
703 # When compiling under Mingw/Cygwin, the tblgen tool expects Windows
704 # paths. In this case, the SYSPATH function (defined in
705 # Makefile.config) transforms Unix paths into Windows paths.
706 TableGen      = $(TBLGEN) -I $(call SYSPATH, $(PROJ_SRC_DIR)) \
707                 -I $(call SYSPATH, $(LLVM_SRC_ROOT)/include) \
708                 -I $(call SYSPATH, $(PROJ_SRC_ROOT)/include) \
709                 -I $(call SYSPATH, $(PROJ_SRC_ROOT)/lib/Target)
710
711 Archive       = $(AR) $(AR.Flags)
712 LArchive      = $(LLVMToolDir)/llvm-ar rcsf
713 ifdef RANLIB
714 Ranlib        = $(RANLIB)
715 else
716 Ranlib        = ranlib
717 endif
718
719 AliasTool     = ln -s
720
721 #----------------------------------------------------------
722 # Get the list of source files and compute object file
723 # names from them.
724 #----------------------------------------------------------
725
726 ifndef SOURCES
727   Sources := $(notdir $(wildcard $(PROJ_SRC_DIR)/*.cpp \
728              $(PROJ_SRC_DIR)/*.cc $(PROJ_SRC_DIR)/*.c))
729 else
730   Sources := $(SOURCES)
731 endif
732
733 ifdef BUILT_SOURCES
734 Sources += $(filter %.cpp %.c %.cc,$(BUILT_SOURCES))
735 endif
736
737 BaseNameSources := $(sort $(basename $(Sources)))
738
739 ObjectsO  := $(BaseNameSources:%=$(ObjDir)/%.o)
740 ObjectsBC := $(BaseNameSources:%=$(ObjDir)/%.bc)
741
742 #----------------------------------------------------------
743 # For Mingw MSYS bash and Python/w32:
744 #
745 # $(ECHOPATH) prints DOSish pathstring.
746 #   ex) $(ECHOPATH) /include/sys/types.h
747 #   --> C:/mingw/include/sys/types.h
748 # built-in "echo" does not transform path to DOSish path.
749 #
750 # FIXME: It would not be needed when MSYS's python
751 # were provided.
752 #----------------------------------------------------------
753
754 ifeq (-mingw32,$(findstring -mingw32,$(BUILD_TRIPLE)))
755   ECHOPATH := $(Verb)python -u -c "import sys;print ' '.join(sys.argv[1:])"
756 else
757   ECHOPATH := $(Verb)$(ECHO)
758 endif
759
760 ###############################################################################
761 # DIRECTORIES: Handle recursive descent of directory structure
762 ###############################################################################
763
764 #---------------------------------------------------------
765 # Provide rules to make install dirs. This must be early
766 # in the file so they get built before dependencies
767 #---------------------------------------------------------
768
769 $(DESTDIR)$(PROJ_bindir) $(DESTDIR)$(PROJ_libdir) $(DESTDIR)$(PROJ_includedir) $(DESTDIR)$(PROJ_etcdir)::
770         $(Verb) $(MKDIR) $@
771
772 # To create other directories, as needed, and timestamp their creation
773 %/.dir:
774         $(Verb) $(MKDIR) $* > /dev/null
775         $(Verb) $(DOTDIR_TIMESTAMP_COMMAND) > $@
776
777 .PRECIOUS: $(ObjDir)/.dir $(LibDir)/.dir $(ToolDir)/.dir $(ExmplDir)/.dir
778 .PRECIOUS: $(LLVMLibDir)/.dir $(LLVMToolDir)/.dir $(LLVMExmplDir)/.dir
779
780 #---------------------------------------------------------
781 # Handle the DIRS options for sequential construction
782 #---------------------------------------------------------
783
784 SubDirs :=
785 ifdef DIRS
786 SubDirs += $(DIRS)
787
788 ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
789 $(RecursiveTargets)::
790         $(Verb) for dir in $(DIRS); do \
791           if ([ ! -f $$dir/Makefile ] || \
792               command test $$dir/Makefile -ot $(PROJ_SRC_DIR)/$$dir/Makefile ); then \
793             $(MKDIR) $$dir; \
794             $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
795           fi; \
796           ($(MAKE) -C $$dir $@ ) || exit 1; \
797         done
798 else
799 $(RecursiveTargets)::
800         $(Verb) for dir in $(DIRS); do \
801           ($(MAKE) -C $$dir $@ ) || exit 1; \
802         done
803 endif
804
805 endif
806
807 #---------------------------------------------------------
808 # Handle the EXPERIMENTAL_DIRS options ensuring success
809 # after each directory is built.
810 #---------------------------------------------------------
811 ifdef EXPERIMENTAL_DIRS
812 $(RecursiveTargets)::
813         $(Verb) for dir in $(EXPERIMENTAL_DIRS); do \
814           if ([ ! -f $$dir/Makefile ] || \
815               command test $$dir/Makefile -ot $(PROJ_SRC_DIR)/$$dir/Makefile ); then \
816             $(MKDIR) $$dir; \
817             $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
818           fi; \
819           ($(MAKE) -C $$dir $@ ) || exit 0; \
820         done
821 endif
822
823 #-----------------------------------------------------------
824 # Handle the OPTIONAL_PARALLEL_DIRS options for optional parallel construction
825 #-----------------------------------------------------------
826 ifdef OPTIONAL_PARALLEL_DIRS
827   PARALLEL_DIRS += $(foreach T,$(OPTIONAL_PARALLEL_DIRS),$(shell test -d $(PROJ_SRC_DIR)/$(T) && echo "$(T)"))
828 endif
829
830 #-----------------------------------------------------------
831 # Handle the PARALLEL_DIRS options for parallel construction
832 #-----------------------------------------------------------
833 ifdef PARALLEL_DIRS
834
835 SubDirs += $(PARALLEL_DIRS)
836
837 # Unfortunately, this list must be maintained if new recursive targets are added
838 all      :: $(addsuffix /.makeall      ,$(PARALLEL_DIRS))
839 clean    :: $(addsuffix /.makeclean    ,$(PARALLEL_DIRS))
840 clean-all:: $(addsuffix /.makeclean-all,$(PARALLEL_DIRS))
841 install  :: $(addsuffix /.makeinstall  ,$(PARALLEL_DIRS))
842 uninstall:: $(addsuffix /.makeuninstall,$(PARALLEL_DIRS))
843 install-bytecode  :: $(addsuffix /.makeinstall-bytecode,$(PARALLEL_DIRS))
844 unitcheck:: $(addsuffix /.makeunitcheck,$(PARALLEL_DIRS))
845
846 ParallelTargets := $(foreach T,$(RecursiveTargets),%/.make$(T))
847
848 $(ParallelTargets) :
849         $(Verb) if ([ ! -f $(@D)/Makefile ] || \
850                     command test $(@D)/Makefile -ot \
851                       $(PROJ_SRC_DIR)/$(@D)/Makefile ); then \
852           $(MKDIR) $(@D); \
853           $(CP) $(PROJ_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \
854         fi; \
855         $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@)
856 endif
857
858 #---------------------------------------------------------
859 # Handle the OPTIONAL_DIRS options for directores that may
860 # or may not exist.
861 #---------------------------------------------------------
862 ifdef OPTIONAL_DIRS
863
864 SubDirs += $(OPTIONAL_DIRS)
865
866 ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
867 $(RecursiveTargets)::
868         $(Verb) for dir in $(OPTIONAL_DIRS); do \
869           if [ -d $(PROJ_SRC_DIR)/$$dir ]; then\
870             if ([ ! -f $$dir/Makefile ] || \
871                 command test $$dir/Makefile -ot $(PROJ_SRC_DIR)/$$dir/Makefile ); then \
872               $(MKDIR) $$dir; \
873               $(CP) $(PROJ_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
874             fi; \
875             ($(MAKE) -C$$dir $@ ) || exit 1; \
876           fi \
877         done
878 else
879 $(RecursiveTargets)::
880         $(Verb) for dir in $(OPTIONAL_DIRS); do \
881           if [ -d $(PROJ_SRC_DIR)/$$dir ]; then\
882             ($(MAKE) -C$$dir $@ ) || exit 1; \
883           fi \
884         done
885 endif
886 endif
887
888 #---------------------------------------------------------
889 # Handle the CONFIG_FILES options
890 #---------------------------------------------------------
891 ifdef CONFIG_FILES
892
893 ifdef NO_INSTALL
894 install-local::
895         $(Echo) Install circumvented with NO_INSTALL
896 uninstall-local::
897         $(Echo) UnInstall circumvented with NO_INSTALL
898 else
899 install-local:: $(DESTDIR)$(PROJ_etcdir) $(CONFIG_FILES)
900         $(Echo) Installing Configuration Files To $(DESTDIR)$(PROJ_etcdir)
901         $(Verb)for file in $(CONFIG_FILES); do \
902           if test -f $(PROJ_OBJ_DIR)/$${file} ; then \
903             $(DataInstall) $(PROJ_OBJ_DIR)/$${file} $(DESTDIR)$(PROJ_etcdir) ; \
904           elif test -f $(PROJ_SRC_DIR)/$${file} ; then \
905             $(DataInstall) $(PROJ_SRC_DIR)/$${file} $(DESTDIR)$(PROJ_etcdir) ; \
906           else \
907             $(ECHO) Error: cannot find config file $${file}. ; \
908           fi \
909         done
910
911 uninstall-local::
912         $(Echo) Uninstalling Configuration Files From $(DESTDIR)$(PROJ_etcdir)
913         $(Verb)for file in $(CONFIG_FILES); do \
914           $(RM) -f $(DESTDIR)$(PROJ_etcdir)/$${file} ; \
915         done
916 endif
917
918 endif
919
920 ###############################################################################
921 # Set up variables for building libraries
922 ###############################################################################
923
924 #---------------------------------------------------------
925 # Define various command line options pertaining to the
926 # libraries needed when linking. There are "Proj" libs
927 # (defined by the user's project) and "LLVM" libs (defined
928 # by the LLVM project).
929 #---------------------------------------------------------
930
931 ifdef USEDLIBS
932 ProjLibsOptions := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS)))
933 ProjLibsOptions := $(patsubst %.o, $(LibDir)/%.o,  $(ProjLibsOptions))
934 ProjUsedLibs    := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(USEDLIBS)))
935 ProjLibsPaths   := $(addprefix $(LibDir)/,$(ProjUsedLibs))
936 endif
937
938 ifdef LLVMLIBS
939 LLVMLibsOptions := $(patsubst %.a.o, -l%, $(addsuffix .o, $(LLVMLIBS)))
940 LLVMLibsOptions := $(patsubst %.o, $(LLVMLibDir)/%.o, $(LLVMLibsOptions))
941 LLVMUsedLibs    := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(LLVMLIBS)))
942 LLVMLibsPaths   := $(addprefix $(LLVMLibDir)/,$(LLVMUsedLibs))
943 endif
944
945 # Loadable module for Win32 requires all symbols resolved for linking.
946 # Then all symbols in LLVM.dll will be available.
947 ifeq ($(ENABLE_SHARED),1)
948   ifdef LOADABLE_MODULE
949     ifneq (,$(filter $(HOST_OS),Cygwin MingW))
950       LINK_COMPONENTS += all
951     endif
952   endif
953 endif
954
955 ifndef IS_CLEANING_TARGET
956 ifdef LINK_COMPONENTS
957
958 # If LLVM_CONFIG doesn't exist, build it.  This can happen if you do a make
959 # clean in tools, then do a make in tools (instead of at the top level).
960 $(LLVM_CONFIG):
961         @echo "*** llvm-config doesn't exist - rebuilding it."
962         @$(MAKE) -C $(PROJ_OBJ_ROOT)/tools/llvm-config
963
964 $(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT): $(LLVM_CONFIG)
965
966 ifeq ($(ENABLE_SHARED), 1)
967 # We can take the "auto-import" feature to get rid of using dllimport.
968 ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
969 LLVMLibsOptions += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc \
970                    -L $(SharedLibDir)
971 endif
972 LLVMLibsOptions += -lLLVM-$(LLVMVersion)
973 LLVMLibsPaths += $(SharedLibDir)/$(SharedPrefix)LLVM-$(LLVMVersion)$(SHLIBEXT)
974 else
975
976 ifndef NO_LLVM_CONFIG
977 LLVMConfigLibs := $(shell $(LLVM_CONFIG) --libs $(LINK_COMPONENTS) || echo Error)
978 ifeq ($(LLVMConfigLibs),Error)
979 $(error llvm-config --libs failed)
980 endif
981 LLVMLibsOptions += $(LLVMConfigLibs)
982 LLVMConfigLibfiles := $(shell $(LLVM_CONFIG) --libfiles $(LINK_COMPONENTS) || echo Error)
983 ifeq ($(LLVMConfigLibfiles),Error)
984 $(error llvm-config --libfiles failed)
985 endif
986 LLVMLibsPaths += $(LLVM_CONFIG) $(LLVMConfigLibfiles)
987 endif
988
989 endif
990 endif
991 endif
992
993 # Set up the library exports file.
994 ifdef EXPORTED_SYMBOL_FILE
995
996 # First, set up the native export file, which may differ from the source
997 # export file.
998
999 ifeq ($(HOST_OS),Darwin)
1000 # Darwin convention prefixes symbols with underscores.
1001 NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).sed
1002 $(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
1003         $(Verb) sed -e 's/^/_/' < $< > $@
1004 clean-local::
1005         -$(Verb) $(RM) -f $(NativeExportsFile)
1006 else
1007 ifeq ($(HAVE_LINK_VERSION_SCRIPT),1)
1008 # Gold and BFD ld require a version script rather than a plain list.
1009 NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).map
1010 $(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
1011         $(Verb) echo "{" > $@
1012         $(Verb) grep -q "\<" $< && echo "  global:" >> $@ || :
1013         $(Verb) sed -e 's/$$/;/' -e 's/^/    /' < $< >> $@
1014 ifneq ($(HOST_OS),OpenBSD)
1015         $(Verb) echo "  local: *;" >> $@
1016 endif
1017         $(Verb) echo "};" >> $@
1018 clean-local::
1019         -$(Verb) $(RM) -f $(NativeExportsFile)
1020 else
1021 ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
1022 # GNU ld Win32 accepts .DEF files that contain "DATA" entries.
1023 NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE:.exports=.def))
1024 $(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
1025         $(Echo) Generating $(notdir $@)
1026         $(Verb) $(ECHO) "EXPORTS" > $@
1027         $(Verb) $(CAT) $< >> $@
1028 clean-local::
1029         -$(Verb) $(RM) -f $(NativeExportsFile)
1030 else
1031 # Default behavior: just use the exports file verbatim.
1032 NativeExportsFile := $(EXPORTED_SYMBOL_FILE)
1033 endif
1034 endif
1035 endif
1036
1037 # Now add the linker command-line options to use the native export file.
1038
1039 # Darwin
1040 ifeq ($(HOST_OS),Darwin)
1041 LLVMLibsOptions += -Wl,-exported_symbols_list,$(NativeExportsFile)
1042 endif
1043
1044 # gold, bfd ld, etc.
1045 ifeq ($(HAVE_LINK_VERSION_SCRIPT),1)
1046 LLVMLibsOptions += -Wl,--version-script,$(NativeExportsFile)
1047 endif
1048
1049 # Windows
1050 ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
1051 # LLVMLibsOptions is invalidated at processing tools/llvm-shlib.
1052 SharedLinkOptions += $(NativeExportsFile)
1053 endif
1054
1055 endif
1056
1057 ###############################################################################
1058 # Library Build Rules: Four ways to build a library
1059 ###############################################################################
1060
1061 #---------------------------------------------------------
1062 # Bytecode Module Targets:
1063 #   If the user set MODULE_NAME then they want to build a
1064 #   bytecode module from the sources. We compile all the
1065 #   sources and link it together into a single bytecode
1066 #   module.
1067 #---------------------------------------------------------
1068
1069 ifdef MODULE_NAME
1070 ifeq ($(strip $(LLVMCC)),)
1071 $(warning Modules require LLVM capable compiler but none is available ****)
1072 else
1073
1074 Module     := $(LibDir)/$(MODULE_NAME).bc
1075 LinkModule := $(LLVMLD) -r
1076
1077
1078 ifdef EXPORTED_SYMBOL_FILE
1079 LinkModule += -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
1080 endif
1081
1082 $(Module): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(LLVMLD)
1083         $(Echo) Building $(BuildMode) Bytecode Module $(notdir $@)
1084         $(Verb) $(LinkModule) -o $@ $(ObjectsBC)
1085
1086 all-local:: $(Module)
1087
1088 clean-local::
1089 ifneq ($(strip $(Module)),)
1090         -$(Verb) $(RM) -f $(Module)
1091 endif
1092
1093 ifdef BYTECODE_DESTINATION
1094 ModuleDestDir := $(BYTECODE_DESTINATION)
1095 else
1096 ModuleDestDir := $(DESTDIR)$(PROJ_libdir)
1097 endif
1098
1099 ifdef NO_INSTALL
1100 install-local::
1101         $(Echo) Install circumvented with NO_INSTALL
1102 uninstall-local::
1103         $(Echo) Uninstall circumvented with NO_INSTALL
1104 else
1105 DestModule := $(ModuleDestDir)/$(MODULE_NAME).bc
1106
1107 install-module:: $(DestModule)
1108 install-local:: $(DestModule)
1109
1110 $(DestModule): $(ModuleDestDir) $(Module)
1111         $(Echo) Installing $(BuildMode) Bytecode Module $(DestModule)
1112         $(Verb) $(DataInstall) $(Module) $(DestModule)
1113
1114 uninstall-local::
1115         $(Echo) Uninstalling $(BuildMode) Bytecode Module $(DestModule)
1116         -$(Verb) $(RM) -f $(DestModule)
1117 endif
1118
1119 endif
1120 endif
1121
1122 # if we're building a library ...
1123 ifdef LIBRARYNAME
1124
1125 # Make sure there isn't any extraneous whitespace on the LIBRARYNAME option
1126 LIBRARYNAME := $(strip $(LIBRARYNAME))
1127 ifdef LOADABLE_MODULE
1128 BaseLibName.A  := $(LIBRARYNAME).a
1129 BaseLibName.SO := $(LIBRARYNAME)$(SHLIBEXT)
1130 else
1131 BaseLibName.A  := lib$(LIBRARYNAME).a
1132 BaseLibName.SO := $(SharedPrefix)$(LIBRARYNAME)$(SHLIBEXT)
1133 endif
1134 LibName.A  := $(LibDir)/$(BaseLibName.A)
1135 LibName.SO := $(SharedLibDir)/$(BaseLibName.SO)
1136 LibName.O  := $(LibDir)/$(LIBRARYNAME).o
1137 LibName.BCA:= $(LibDir)/lib$(LIBRARYNAME).bca
1138
1139 #---------------------------------------------------------
1140 # Shared Library Targets:
1141 #   If the user asked for a shared library to be built
1142 #   with the SHARED_LIBRARY variable, then we provide
1143 #   targets for building them.
1144 #---------------------------------------------------------
1145 ifdef SHARED_LIBRARY
1146
1147 all-local:: $(LibName.SO)
1148
1149 ifdef EXPORTED_SYMBOL_FILE
1150 $(LibName.SO): $(NativeExportsFile)
1151 endif
1152
1153 ifdef LINK_LIBS_IN_SHARED
1154 ifdef LOADABLE_MODULE
1155 SharedLibKindMessage := "Loadable Module"
1156 SharedLinkOptions := $(LoadableModuleOptions) $(SharedLinkOptions)
1157 else
1158 SharedLibKindMessage := "Shared Library"
1159 endif
1160 $(LibName.SO): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths) $(SharedLibDir)/.dir
1161         $(Echo) Linking $(BuildMode) $(SharedLibKindMessage) \
1162           $(notdir $@)
1163         $(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO) \
1164           $(ProjLibsOptions) $(LLVMLibsOptions) $(LIBS)
1165 else
1166 $(LibName.SO): $(ObjectsO) $(SharedLibDir)/.dir
1167         $(Echo) Linking $(BuildMode) Shared Library $(notdir $@)
1168         $(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO)
1169 endif
1170
1171 clean-local::
1172 ifneq ($(strip $(LibName.SO)),)
1173         -$(Verb) $(RM) -f $(LibName.SO)
1174 endif
1175
1176 ifdef NO_INSTALL
1177 install-local::
1178         $(Echo) Install circumvented with NO_INSTALL
1179 uninstall-local::
1180         $(Echo) Uninstall circumvented with NO_INSTALL
1181 else
1182
1183 # Win32.DLL prefers to be located on the "PATH" of binaries.
1184 ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
1185 DestSharedLibDir := $(DESTDIR)$(PROJ_bindir)
1186 else
1187 DestSharedLibDir := $(DESTDIR)$(PROJ_libdir)
1188 endif
1189 DestSharedLib := $(DestSharedLibDir)/$(BaseLibName.SO)
1190
1191 install-local:: $(DestSharedLib)
1192
1193 $(DestSharedLib): $(LibName.SO) $(DestSharedLibDir)
1194         $(Echo) Installing $(BuildMode) Shared Library $(DestSharedLib)
1195         $(Verb) $(INSTALL) $(LibName.SO) $(DestSharedLib)
1196
1197 uninstall-local::
1198         $(Echo) Uninstalling $(BuildMode) Shared Library $(DestSharedLib)
1199         -$(Verb) $(RM) -f $(DestSharedLibDir)/$(SharedPrefix)$(LIBRARYNAME).*
1200 endif
1201 endif
1202
1203 #---------------------------------------------------------
1204 # Bytecode Library Targets:
1205 #   If the user asked for a bytecode library to be built
1206 #   with the BYTECODE_LIBRARY variable, then we provide
1207 #   targets for building them.
1208 #---------------------------------------------------------
1209 ifdef BYTECODE_LIBRARY
1210 ifeq ($(strip $(LLVMCC)),)
1211 $(warning Bytecode libraries require LLVM capable compiler but none is available ****)
1212 else
1213
1214 all-local:: $(LibName.BCA)
1215
1216 ifdef EXPORTED_SYMBOL_FILE
1217 BCLinkLib = $(LLVMLD) -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
1218
1219 $(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir $(LLVMLD) \
1220                 $(LLVMToolDir)/llvm-ar
1221         $(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@) \
1222           "(internalize)"
1223         $(Verb) $(BCLinkLib) -o $(ObjDir)/$(LIBRARYNAME).internalize $(ObjectsBC)
1224         $(Verb) $(RM) -f $@
1225         $(Verb) $(LArchive) $@ $(ObjDir)/$(LIBRARYNAME).internalize.bc
1226 else
1227 $(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir \
1228                 $(LLVMToolDir)/llvm-ar
1229         $(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@)
1230         $(Verb) $(RM) -f $@
1231         $(Verb) $(LArchive) $@ $(ObjectsBC)
1232
1233 endif
1234
1235 clean-local::
1236 ifneq ($(strip $(LibName.BCA)),)
1237         -$(Verb) $(RM) -f $(LibName.BCA)
1238 endif
1239
1240 ifdef BYTECODE_DESTINATION
1241 BytecodeDestDir := $(BYTECODE_DESTINATION)
1242 else
1243 BytecodeDestDir := $(DESTDIR)$(PROJ_libdir)
1244 endif
1245
1246 DestBytecodeLib = $(BytecodeDestDir)/lib$(LIBRARYNAME).bca
1247
1248 install-bytecode-local:: $(DestBytecodeLib)
1249
1250 ifdef NO_INSTALL
1251 install-local::
1252         $(Echo) Install circumvented with NO_INSTALL
1253 uninstall-local::
1254         $(Echo) Uninstall circumvented with NO_INSTALL
1255 else
1256 install-local:: $(DestBytecodeLib)
1257
1258 $(DestBytecodeLib): $(LibName.BCA) $(BytecodeDestDir)
1259         $(Echo) Installing $(BuildMode) Bytecode Archive $(DestBytecodeLib)
1260         $(Verb) $(DataInstall) $(LibName.BCA) $(DestBytecodeLib)
1261
1262 uninstall-local::
1263         $(Echo) Uninstalling $(BuildMode) Bytecode Archive $(DestBytecodeLib)
1264         -$(Verb) $(RM) -f $(DestBytecodeLib)
1265 endif
1266 endif
1267 endif
1268
1269 #---------------------------------------------------------
1270 # Library Targets:
1271 #   If neither BUILD_ARCHIVE or LOADABLE_MODULE are specified, default to
1272 #   building an archive.
1273 #---------------------------------------------------------
1274 ifndef NO_BUILD_ARCHIVE
1275 ifndef BUILD_ARCHIVE
1276 ifndef LOADABLE_MODULE
1277 BUILD_ARCHIVE = 1
1278 endif
1279 endif
1280 endif
1281
1282 #---------------------------------------------------------
1283 # Archive Library Targets:
1284 #   If the user wanted a regular archive library built,
1285 #   then we provide targets for building them.
1286 #---------------------------------------------------------
1287 ifdef BUILD_ARCHIVE
1288
1289 all-local:: $(LibName.A)
1290
1291 $(LibName.A): $(ObjectsO) $(LibDir)/.dir
1292         $(Echo) Building $(BuildMode) Archive Library $(notdir $@)
1293         -$(Verb) $(RM) -f $@
1294         $(Verb) $(Archive) $@ $(ObjectsO)
1295         $(Verb) $(Ranlib) $@
1296
1297 clean-local::
1298 ifneq ($(strip $(LibName.A)),)
1299         -$(Verb) $(RM) -f $(LibName.A)
1300 endif
1301
1302 ifdef NO_INSTALL
1303 install-local::
1304         $(Echo) Install circumvented with NO_INSTALL
1305 uninstall-local::
1306         $(Echo) Uninstall circumvented with NO_INSTALL
1307 else
1308 ifdef NO_INSTALL_ARCHIVES
1309 install-local::
1310         $(Echo) Install circumvented with NO_INSTALL
1311 uninstall-local::
1312         $(Echo) Uninstall circumvented with NO_INSTALL
1313 else
1314 DestArchiveLib := $(DESTDIR)$(PROJ_libdir)/lib$(LIBRARYNAME).a
1315
1316 install-local:: $(DestArchiveLib)
1317
1318 $(DestArchiveLib): $(LibName.A) $(DESTDIR)$(PROJ_libdir)
1319         $(Echo) Installing $(BuildMode) Archive Library $(DestArchiveLib)
1320         $(Verb) $(MKDIR) $(DESTDIR)$(PROJ_libdir)
1321         $(Verb) $(INSTALL) $(LibName.A) $(DestArchiveLib)
1322
1323 uninstall-local::
1324         $(Echo) Uninstalling $(BuildMode) Archive Library $(DestArchiveLib)
1325         -$(Verb) $(RM) -f $(DestArchiveLib)
1326 endif
1327 endif
1328 endif
1329
1330 # endif LIBRARYNAME
1331 endif
1332
1333 ###############################################################################
1334 # Tool Build Rules: Build executable tool based on TOOLNAME option
1335 ###############################################################################
1336
1337 ifdef TOOLNAME
1338
1339 #---------------------------------------------------------
1340 # Set up variables for building a tool.
1341 #---------------------------------------------------------
1342 TOOLEXENAME := $(strip $(TOOLNAME))$(EXEEXT)
1343 ifdef EXAMPLE_TOOL
1344 ToolBuildPath   := $(ExmplDir)/$(TOOLEXENAME)
1345 else
1346 ToolBuildPath   := $(ToolDir)/$(TOOLEXENAME)
1347 endif
1348
1349 # TOOLALIAS is a name to symlink (or copy) the tool to.
1350 ifdef TOOLALIAS
1351 ifdef EXAMPLE_TOOL
1352 ToolAliasBuildPath   := $(ExmplDir)/$(strip $(TOOLALIAS))$(EXEEXT)
1353 else
1354 ToolAliasBuildPath   := $(ToolDir)/$(strip $(TOOLALIAS))$(EXEEXT)
1355 endif
1356 endif
1357
1358 #---------------------------------------------------------
1359 # Prune Exports
1360 #---------------------------------------------------------
1361
1362 # If the tool opts in with TOOL_NO_EXPORTS, optimize startup time of the app by
1363 # not exporting all of the weak symbols from the binary.  This reduces dyld
1364 # startup time by 4x on darwin in some cases.
1365 ifdef TOOL_NO_EXPORTS
1366 ifeq ($(HOST_OS),Darwin)
1367
1368 # Tiger tools don't support this.
1369 ifneq ($(DARWIN_MAJVERS),4)
1370 LD.Flags += -Wl,-exported_symbol,_main
1371 endif
1372 endif
1373
1374 ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux NetBSD FreeBSD))
1375 ifneq ($(ARCH), Mips)
1376   LD.Flags += -Wl,--version-script=$(LLVM_SRC_ROOT)/autoconf/ExportMap.map
1377 endif
1378 endif
1379 endif
1380
1381 #---------------------------------------------------------
1382 # Tool Order File Support
1383 #---------------------------------------------------------
1384
1385 ifeq ($(HOST_OS),Darwin)
1386 ifdef TOOL_ORDER_FINE
1387
1388 LD.Flags += -Wl,-order_file,$(TOOL_ORDER_FILE)
1389
1390 endif
1391 endif
1392
1393 #---------------------------------------------------------
1394 # Tool Version Info Support
1395 #---------------------------------------------------------
1396
1397 ifeq ($(HOST_OS),Darwin)
1398 ifdef TOOL_INFO_PLIST
1399
1400 LD.Flags += -Wl,-sectcreate,__TEXT,__info_plist,$(ObjDir)/$(TOOL_INFO_PLIST)
1401
1402 $(ToolBuildPath): $(ObjDir)/$(TOOL_INFO_PLIST)
1403
1404 $(ObjDir)/$(TOOL_INFO_PLIST): $(PROJ_SRC_DIR)/$(TOOL_INFO_PLIST).in $(ObjDir)/.dir
1405         $(Echo) "Creating $(TOOLNAME) '$(TOOL_INFO_PLIST)' file..."
1406         $(Verb)sed -e "s#@TOOL_INFO_UTI@#$(TOOL_INFO_UTI)#g" \
1407                    -e "s#@TOOL_INFO_NAME@#$(TOOL_INFO_NAME)#g" \
1408                    -e "s#@TOOL_INFO_VERSION@#$(TOOL_INFO_VERSION)#g" \
1409                  -e "s#@TOOL_INFO_BUILD_VERSION@#$(TOOL_INFO_BUILD_VERSION)#g" \
1410                    $< > $@
1411
1412 endif
1413 endif
1414
1415 #---------------------------------------------------------
1416 # Provide targets for building the tools
1417 #---------------------------------------------------------
1418 all-local:: $(ToolBuildPath) $(ToolAliasBuildPath)
1419
1420 clean-local::
1421 ifneq ($(strip $(ToolBuildPath)),)
1422         -$(Verb) $(RM) -f $(ToolBuildPath)
1423 endif
1424 ifneq ($(strip $(ToolAliasBuildPath)),)
1425         -$(Verb) $(RM) -f $(ToolAliasBuildPath)
1426 endif
1427
1428 ifdef EXAMPLE_TOOL
1429 $(ToolBuildPath): $(ExmplDir)/.dir
1430 else
1431 $(ToolBuildPath): $(ToolDir)/.dir
1432 endif
1433
1434 $(ToolBuildPath): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths)
1435         $(Echo) Linking $(BuildMode) executable $(TOOLNAME) $(StripWarnMsg)
1436         $(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \
1437         $(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB) $(LIBS)
1438         $(Echo) ======= Finished Linking $(BuildMode) Executable $(TOOLNAME) \
1439           $(StripWarnMsg)
1440
1441 ifneq ($(strip $(ToolAliasBuildPath)),)
1442 $(ToolAliasBuildPath): $(ToolBuildPath)
1443         $(Echo) Creating $(BuildMode) Alias $(TOOLALIAS) $(StripWarnMsg)
1444         $(Verb) $(RM) -f $(ToolAliasBuildPath)
1445         $(Verb) $(AliasTool) $(TOOLEXENAME) $(ToolAliasBuildPath)
1446         $(Echo) ======= Finished Creating $(BuildMode) Alias $(TOOLALIAS) \
1447           $(StripWarnMsg)
1448 endif
1449
1450 ifdef NO_INSTALL
1451 install-local::
1452         $(Echo) Install circumvented with NO_INSTALL
1453 uninstall-local::
1454         $(Echo) Uninstall circumvented with NO_INSTALL
1455 else
1456 DestTool = $(DESTDIR)$(PROJ_bindir)/$(TOOLEXENAME)
1457
1458 install-local:: $(DestTool)
1459
1460 $(DestTool): $(ToolBuildPath) $(DESTDIR)$(PROJ_bindir)
1461         $(Echo) Installing $(BuildMode) $(DestTool)
1462         $(Verb) $(ProgInstall) $(ToolBuildPath) $(DestTool)
1463
1464 uninstall-local::
1465         $(Echo) Uninstalling $(BuildMode) $(DestTool)
1466         -$(Verb) $(RM) -f $(DestTool)
1467
1468 # TOOLALIAS install.
1469 ifdef TOOLALIAS
1470 DestToolAlias = $(DESTDIR)$(PROJ_bindir)/$(TOOLALIAS)$(EXEEXT)
1471
1472 install-local:: $(DestToolAlias)
1473
1474 $(DestToolAlias): $(DestTool)
1475         $(Echo) Installing $(BuildMode) $(DestToolAlias)
1476         $(Verb) $(RM) -f $(DestToolAlias)
1477         $(Verb) $(AliasTool) $(TOOLEXENAME) $(DestToolAlias)
1478
1479 uninstall-local::
1480         $(Echo) Uninstalling $(BuildMode) $(DestToolAlias)
1481         -$(Verb) $(RM) -f $(DestToolAlias)
1482 endif
1483
1484 endif
1485 endif
1486
1487 ###############################################################################
1488 # Object Build Rules: Build object files based on sources
1489 ###############################################################################
1490
1491 # FIXME: This should be checking for "if not GCC or ICC", not for "if HP-UX"
1492 ifeq ($(HOST_OS),HP-UX)
1493   DISABLE_AUTO_DEPENDENCIES=1
1494 endif
1495
1496 # Provide rule sets for when dependency generation is enabled
1497 ifndef DISABLE_AUTO_DEPENDENCIES
1498
1499 #---------------------------------------------------------
1500 # Create .o files in the ObjDir directory from the .cpp and .c files...
1501 #---------------------------------------------------------
1502
1503 DEPEND_OPTIONS = -MMD -MP -MF "$(ObjDir)/$*.d.tmp" \
1504          -MT "$(ObjDir)/$*.o" -MT "$(ObjDir)/$*.d"
1505
1506 # If the build succeeded, move the dependency file over, otherwise
1507 # remove it.
1508 DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.d.tmp" "$(ObjDir)/$*.d"; \
1509                   else $(RM) "$(ObjDir)/$*.d.tmp"; exit 1; fi
1510
1511 $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
1512         $(Echo) "Compiling $*.cpp for $(BuildMode) build" $(PIC_FLAG)
1513         $(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
1514                 $(DEPEND_MOVEFILE)
1515
1516 $(ObjDir)/%.o: %.mm $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
1517         $(Echo) "Compiling $*.mm for $(BuildMode) build" $(PIC_FLAG)
1518         $(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
1519                 $(DEPEND_MOVEFILE)
1520
1521 $(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
1522         $(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG)
1523         $(Verb) if $(Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
1524                 $(DEPEND_MOVEFILE)
1525
1526 $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
1527         $(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG)
1528         $(Verb) if $(Compile.C) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
1529                 $(DEPEND_MOVEFILE)
1530
1531 $(ObjDir)/%.o: %.m $(ObjDir)/.dir $(BUILT_SOURCES) $(PROJ_MAKEFILE)
1532         $(Echo) "Compiling $*.m for $(BuildMode) build" $(PIC_FLAG)
1533         $(Verb) if $(Compile.C) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
1534                 $(DEPEND_MOVEFILE)
1535
1536 #---------------------------------------------------------
1537 # Create .bc files in the ObjDir directory from .cpp .cc and .c files...
1538 #---------------------------------------------------------
1539
1540 BC_DEPEND_OPTIONS = -MMD -MP -MF "$(ObjDir)/$*.bc.d.tmp" \
1541         -MT "$(ObjDir)/$*.ll" -MT "$(ObjDir)/$*.bc.d"
1542
1543 # If the build succeeded, move the dependency file over, otherwise
1544 # remove it.
1545 BC_DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.bc.d.tmp" "$(ObjDir)/$*.bc.d"; \
1546                      else $(RM) "$(ObjDir)/$*.bc.d.tmp"; exit 1; fi
1547
1548 $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
1549         $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
1550         $(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \
1551                         $< -o $(ObjDir)/$*.ll -S $(LLVMCC_EMITIR_FLAG) ; \
1552                 $(BC_DEPEND_MOVEFILE)
1553
1554 $(ObjDir)/%.ll: %.mm $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
1555         $(Echo) "Compiling $*.mm for $(BuildMode) build (bytecode)"
1556         $(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \
1557                         $< -o $(ObjDir)/$*.ll -S $(LLVMCC_EMITIR_FLAG) ; \
1558                 $(BC_DEPEND_MOVEFILE)
1559
1560 $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
1561         $(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)"
1562         $(Verb) if $(BCCompile.CXX) $(BC_DEPEND_OPTIONS) \
1563                         $< -o $(ObjDir)/$*.ll -S $(LLVMCC_EMITIR_FLAG) ; \
1564                 $(BC_DEPEND_MOVEFILE)
1565
1566 $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCC)
1567         $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
1568         $(Verb) if $(BCCompile.C) $(BC_DEPEND_OPTIONS) \
1569                         $< -o $(ObjDir)/$*.ll -S $(LLVMCC_EMITIR_FLAG) ; \
1570                 $(BC_DEPEND_MOVEFILE)
1571
1572 $(ObjDir)/%.ll: %.m $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCC)
1573         $(Echo) "Compiling $*.m for $(BuildMode) build (bytecode)"
1574         $(Verb) if $(BCCompile.C) $(BC_DEPEND_OPTIONS) \
1575                         $< -o $(ObjDir)/$*.ll -S $(LLVMCC_EMITIR_FLAG) ; \
1576                 $(BC_DEPEND_MOVEFILE)
1577
1578 # Provide alternate rule sets if dependencies are disabled
1579 else
1580
1581 $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
1582         $(Echo) "Compiling $*.cpp for $(BuildMode) build" $(PIC_FLAG)
1583         $(Compile.CXX) $< -o $@
1584
1585 $(ObjDir)/%.o: %.mm $(ObjDir)/.dir $(BUILT_SOURCES)
1586         $(Echo) "Compiling $*.mm for $(BuildMode) build" $(PIC_FLAG)
1587         $(Compile.CXX) $< -o $@
1588
1589 $(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
1590         $(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG)
1591         $(Compile.CXX) $< -o $@
1592
1593 $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
1594         $(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG)
1595         $(Compile.C) $< -o $@
1596
1597 $(ObjDir)/%.o: %.m $(ObjDir)/.dir $(BUILT_SOURCES)
1598         $(Echo) "Compiling $*.m for $(BuildMode) build" $(PIC_FLAG)
1599         $(Compile.C) $< -o $@
1600
1601 $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
1602         $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)"
1603         $(BCCompile.CXX) $< -o $@ -S $(LLVMCC_EMITIR_FLAG)
1604
1605 $(ObjDir)/%.ll: %.mm $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
1606         $(Echo) "Compiling $*.mm for $(BuildMode) build (bytecode)"
1607         $(BCCompile.CXX) $< -o $@ -S $(LLVMCC_EMITIR_FLAG)
1608
1609 $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCXX)
1610         $(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)"
1611         $(BCCompile.CXX) $< -o $@ -S $(LLVMCC_EMITIR_FLAG)
1612
1613 $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCC)
1614         $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)"
1615         $(BCCompile.C) $< -o $@ -S $(LLVMCC_EMITIR_FLAG)
1616
1617 $(ObjDir)/%.ll: %.m $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMCC)
1618         $(Echo) "Compiling $*.m for $(BuildMode) build (bytecode)"
1619         $(BCCompile.C) $< -o $@ -S $(LLVMCC_EMITIR_FLAG)
1620
1621 endif
1622
1623
1624 ## Rules for building preprocessed (.i/.ii) outputs.
1625 $(BuildMode)/%.ii: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
1626         $(Echo) "Compiling $*.cpp for $(BuildMode) build to .ii file"
1627         $(Verb) $(Preprocess.CXX) $< -o $@
1628
1629 $(BuildMode)/%.ii: %.mm $(ObjDir)/.dir $(BUILT_SOURCES)
1630         $(Echo) "Compiling $*.mm for $(BuildMode) build to .ii file"
1631         $(Verb) $(Preprocess.CXX) $< -o $@
1632
1633 $(BuildMode)/%.ii: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
1634         $(Echo) "Compiling $*.cc for $(BuildMode) build to .ii file"
1635         $(Verb) $(Preprocess.CXX) $< -o $@
1636
1637 $(BuildMode)/%.i: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
1638         $(Echo) "Compiling $*.c for $(BuildMode) build to .i file"
1639         $(Verb) $(Preprocess.C) $< -o $@
1640
1641 $(BuildMode)/%.i: %.m $(ObjDir)/.dir $(BUILT_SOURCES)
1642         $(Echo) "Compiling $*.m for $(BuildMode) build to .i file"
1643         $(Verb) $(Preprocess.C) $< -o $@
1644
1645
1646 $(ObjDir)/%.s: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
1647         $(Echo) "Compiling $*.cpp to asm for $(BuildMode) build" $(PIC_FLAG)
1648         $(Compile.CXX) $< -o $@ -S
1649
1650 $(ObjDir)/%.s: %.mm $(ObjDir)/.dir $(BUILT_SOURCES)
1651         $(Echo) "Compiling $*.mm to asm for $(BuildMode) build" $(PIC_FLAG)
1652         $(Compile.CXX) $< -o $@ -S
1653
1654 $(ObjDir)/%.s: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
1655         $(Echo) "Compiling $*.cc to asm for $(BuildMode) build" $(PIC_FLAG)
1656         $(Compile.CXX) $< -o $@ -S
1657
1658 $(ObjDir)/%.s: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
1659         $(Echo) "Compiling $*.c to asm for $(BuildMode) build" $(PIC_FLAG)
1660         $(Compile.C) $< -o $@ -S
1661
1662 $(ObjDir)/%.s: %.m $(ObjDir)/.dir $(BUILT_SOURCES)
1663         $(Echo) "Compiling $*.m to asm for $(BuildMode) build" $(PIC_FLAG)
1664         $(Compile.C) $< -o $@ -S
1665
1666
1667 # make the C and C++ compilers strip debug info out of bytecode libraries.
1668 ifdef DEBUG_RUNTIME
1669 $(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(LOPT)
1670         $(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)"
1671         $(Verb) $(LOPT) $< -std-compile-opts -o $@
1672 else
1673 $(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(LOPT)
1674         $(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)"
1675         $(Verb) $(LOPT) $< -std-compile-opts -strip-debug -o $@
1676 endif
1677
1678
1679 #---------------------------------------------------------
1680 # Provide rule to build .bc files from .ll sources,
1681 # regardless of dependencies
1682 #---------------------------------------------------------
1683 $(ObjDir)/%.bc: %.ll $(ObjDir)/.dir $(LLVMAS)
1684         $(Echo) "Compiling $*.ll for $(BuildMode) build"
1685         $(Verb) $(LLVMAS) $< -f -o $@
1686
1687 ###############################################################################
1688 # TABLEGEN: Provide rules for running tblgen to produce *.inc files
1689 ###############################################################################
1690
1691 ifdef TARGET
1692 TABLEGEN_INC_FILES_COMMON = 1
1693 endif
1694
1695 ifdef LLVMC_BASED_DRIVER
1696 TABLEGEN_INC_FILES_COMMON = 1
1697 endif
1698
1699 ifdef TABLEGEN_INC_FILES_COMMON
1700
1701 INCFiles := $(filter %.inc,$(BUILT_SOURCES))
1702 INCTMPFiles := $(INCFiles:%=$(ObjDir)/%.tmp)
1703 .PRECIOUS: $(INCTMPFiles) $(INCFiles)
1704
1705 # INCFiles rule: All of the tblgen generated files are emitted to
1706 # $(ObjDir)/%.inc.tmp, instead of emitting them directly to %.inc.  This allows
1707 # us to only "touch" the real file if the contents of it change.  IOW, if
1708 # tblgen is modified, all of the .inc.tmp files are regenerated, but no
1709 # dependencies of the .inc files are, unless the contents of the .inc file
1710 # changes.
1711 $(INCFiles) : %.inc : $(ObjDir)/%.inc.tmp
1712         $(Verb) $(CMP) -s $@ $< || $(CP) $< $@
1713
1714 endif # TABLEGEN_INC_FILES_COMMON
1715
1716 ifdef TARGET
1717
1718 TDFiles := $(strip $(wildcard $(PROJ_SRC_DIR)/*.td) \
1719            $(LLVM_SRC_ROOT)/include/llvm/Target/Target.td \
1720            $(LLVM_SRC_ROOT)/include/llvm/Target/TargetCallingConv.td \
1721            $(LLVM_SRC_ROOT)/include/llvm/Target/TargetSchedule.td \
1722            $(LLVM_SRC_ROOT)/include/llvm/Target/TargetSelectionDAG.td \
1723            $(LLVM_SRC_ROOT)/include/llvm/CodeGen/ValueTypes.td) \
1724            $(wildcard $(LLVM_SRC_ROOT)/include/llvm/Intrinsics*.td)
1725
1726 # All of these files depend on tblgen and the .td files.
1727 $(INCTMPFiles) : $(TBLGEN) $(TDFiles)
1728
1729 $(TARGET:%=$(ObjDir)/%GenRegisterNames.inc.tmp): \
1730 $(ObjDir)/%GenRegisterNames.inc.tmp : %.td $(ObjDir)/.dir
1731         $(Echo) "Building $(<F) register names with tblgen"
1732         $(Verb) $(TableGen) -gen-register-enums -o $(call SYSPATH, $@) $<
1733
1734 $(TARGET:%=$(ObjDir)/%GenRegisterInfo.h.inc.tmp): \
1735 $(ObjDir)/%GenRegisterInfo.h.inc.tmp : %.td $(ObjDir)/.dir
1736         $(Echo) "Building $(<F) register information header with tblgen"
1737         $(Verb) $(TableGen) -gen-register-desc-header -o $(call SYSPATH, $@) $<
1738
1739 $(TARGET:%=$(ObjDir)/%GenRegisterInfo.inc.tmp): \
1740 $(ObjDir)/%GenRegisterInfo.inc.tmp : %.td $(ObjDir)/.dir
1741         $(Echo) "Building $(<F) register info implementation with tblgen"
1742         $(Verb) $(TableGen) -gen-register-desc -o $(call SYSPATH, $@) $<
1743
1744 $(TARGET:%=$(ObjDir)/%GenInstrNames.inc.tmp): \
1745 $(ObjDir)/%GenInstrNames.inc.tmp : %.td $(ObjDir)/.dir
1746         $(Echo) "Building $(<F) instruction names with tblgen"
1747         $(Verb) $(TableGen) -gen-instr-enums -o $(call SYSPATH, $@) $<
1748
1749 $(TARGET:%=$(ObjDir)/%GenInstrInfo.inc.tmp): \
1750 $(ObjDir)/%GenInstrInfo.inc.tmp : %.td $(ObjDir)/.dir
1751         $(Echo) "Building $(<F) instruction information with tblgen"
1752         $(Verb) $(TableGen) -gen-instr-desc -o $(call SYSPATH, $@) $<
1753
1754 $(TARGET:%=$(ObjDir)/%GenAsmWriter.inc.tmp): \
1755 $(ObjDir)/%GenAsmWriter.inc.tmp : %.td $(ObjDir)/.dir
1756         $(Echo) "Building $(<F) assembly writer with tblgen"
1757         $(Verb) $(TableGen) -gen-asm-writer -o $(call SYSPATH, $@) $<
1758
1759 $(TARGET:%=$(ObjDir)/%GenAsmWriter1.inc.tmp): \
1760 $(ObjDir)/%GenAsmWriter1.inc.tmp : %.td $(ObjDir)/.dir
1761         $(Echo) "Building $(<F) assembly writer #1 with tblgen"
1762         $(Verb) $(TableGen) -gen-asm-writer -asmwriternum=1 -o $(call SYSPATH, $@) $<
1763
1764 $(TARGET:%=$(ObjDir)/%GenAsmMatcher.inc.tmp): \
1765 $(ObjDir)/%GenAsmMatcher.inc.tmp : %.td $(ObjDir)/.dir
1766         $(Echo) "Building $(<F) assembly matcher with tblgen"
1767         $(Verb) $(TableGen) -gen-asm-matcher -o $(call SYSPATH, $@) $<
1768
1769 $(TARGET:%=$(ObjDir)/%GenMCCodeEmitter.inc.tmp): \
1770 $(ObjDir)/%GenMCCodeEmitter.inc.tmp: %.td $(ObjDir)/.dir
1771         $(Echo) "Building $(<F) MC code emitter with tblgen"
1772         $(Verb) $(TableGen) -gen-emitter -mc-emitter -o $(call SYSPATH, $@) $<
1773
1774 $(TARGET:%=$(ObjDir)/%GenCodeEmitter.inc.tmp): \
1775 $(ObjDir)/%GenCodeEmitter.inc.tmp: %.td $(ObjDir)/.dir
1776         $(Echo) "Building $(<F) code emitter with tblgen"
1777         $(Verb) $(TableGen) -gen-emitter -o $(call SYSPATH, $@) $<
1778
1779 $(TARGET:%=$(ObjDir)/%GenDAGISel.inc.tmp): \
1780 $(ObjDir)/%GenDAGISel.inc.tmp : %.td $(ObjDir)/.dir
1781         $(Echo) "Building $(<F) DAG instruction selector implementation with tblgen"
1782         $(Verb) $(TableGen) -gen-dag-isel -o $(call SYSPATH, $@) $<
1783
1784 $(TARGET:%=$(ObjDir)/%GenDisassemblerTables.inc.tmp): \
1785 $(ObjDir)/%GenDisassemblerTables.inc.tmp : %.td $(ObjDir)/.dir
1786         $(Echo) "Building $(<F) disassembly tables with tblgen"
1787         $(Verb) $(TableGen) -gen-disassembler -o $(call SYSPATH, $@) $<
1788
1789 $(TARGET:%=$(ObjDir)/%GenEDInfo.inc.tmp): \
1790 $(ObjDir)/%GenEDInfo.inc.tmp : %.td $(ObjDir)/.dir
1791         $(Echo) "Building $(<F) enhanced disassembly information with tblgen"
1792         $(Verb) $(TableGen) -gen-enhanced-disassembly-info -o $(call SYSPATH, $@) $<
1793
1794 $(TARGET:%=$(ObjDir)/%GenFastISel.inc.tmp): \
1795 $(ObjDir)/%GenFastISel.inc.tmp : %.td $(ObjDir)/.dir
1796         $(Echo) "Building $(<F) \"fast\" instruction selector implementation with tblgen"
1797         $(Verb) $(TableGen) -gen-fast-isel -o $(call SYSPATH, $@) $<
1798
1799 $(TARGET:%=$(ObjDir)/%GenSubtarget.inc.tmp): \
1800 $(ObjDir)/%GenSubtarget.inc.tmp : %.td $(ObjDir)/.dir
1801         $(Echo) "Building $(<F) subtarget information with tblgen"
1802         $(Verb) $(TableGen) -gen-subtarget -o $(call SYSPATH, $@) $<
1803
1804 $(TARGET:%=$(ObjDir)/%GenCallingConv.inc.tmp): \
1805 $(ObjDir)/%GenCallingConv.inc.tmp : %.td $(ObjDir)/.dir
1806         $(Echo) "Building $(<F) calling convention information with tblgen"
1807         $(Verb) $(TableGen) -gen-callingconv -o $(call SYSPATH, $@) $<
1808
1809 $(TARGET:%=$(ObjDir)/%GenIntrinsics.inc.tmp): \
1810 $(ObjDir)/%GenIntrinsics.inc.tmp : %.td $(ObjDir)/.dir
1811         $(Echo) "Building $(<F) intrinsics information with tblgen"
1812         $(Verb) $(TableGen) -gen-tgt-intrinsic -o $(call SYSPATH, $@) $<
1813
1814 $(ObjDir)/ARMGenDecoderTables.inc.tmp : ARM.td $(ObjDir)/.dir
1815         $(Echo) "Building $(<F) decoder tables with tblgen"
1816         $(Verb) $(TableGen) -gen-arm-decoder -o $(call SYSPATH, $@) $<
1817
1818
1819 clean-local::
1820         -$(Verb) $(RM) -f $(INCFiles)
1821
1822 endif # TARGET
1823
1824 ifdef LLVMC_BASED_DRIVER
1825
1826 TDSrc := $(sort $(strip $(wildcard $(PROJ_SRC_DIR)/*.td)) \
1827                 $(strip $(wildcard $(PROJ_OBJ_DIR)/*.td)))
1828
1829 TDCommon := $(strip $(wildcard \
1830                 $(LLVM_SRC_ROOT)/include/llvm/CompilerDriver/*.td))
1831
1832 TDFiles := $(TDSrc) $(TDCommon)
1833
1834 $(INCTMPFiles) : $(TBLGEN) $(TDFiles)
1835
1836 $(ObjDir)/%.inc.tmp: %.td $(ObjDir)/.dir
1837         $(Echo) "Building LLVMC compilation graph description with tblgen"
1838         $(Verb) $(TableGen) -gen-llvmc -o $(call SYSPATH, $@) $<
1839
1840 clean-local::
1841         -$(Verb) $(RM) -f $(INCFiles)
1842
1843 endif # LLVMC_BASED_DRIVER
1844
1845 ###############################################################################
1846 # OTHER RULES: Other rules needed
1847 ###############################################################################
1848
1849 # To create postscript files from dot files...
1850 ifneq ($(DOT),false)
1851 %.ps: %.dot
1852         $(DOT) -Tps < $< > $@
1853 else
1854 %.ps: %.dot
1855         $(Echo) "Cannot build $@: The program dot is not installed"
1856 endif
1857
1858 # This rules ensures that header files that are removed still have a rule for
1859 # which they can be "generated."  This allows make to ignore them and
1860 # reproduce the dependency lists.
1861 %.h:: ;
1862 %.hpp:: ;
1863
1864 # Define clean-local to clean the current directory. Note that this uses a
1865 # very conservative approach ensuring that empty variables do not cause
1866 # errors or disastrous removal.
1867 clean-local::
1868 ifneq ($(strip $(ObjRootDir)),)
1869         -$(Verb) $(RM) -rf $(ObjRootDir)
1870 endif
1871         -$(Verb) $(RM) -f core core.[0-9][0-9]* *.o *.d *~ *.flc
1872 ifneq ($(strip $(SHLIBEXT)),) # Extra paranoia - make real sure SHLIBEXT is set
1873         -$(Verb) $(RM) -f *$(SHLIBEXT)
1874 endif
1875
1876 clean-all-local::
1877         -$(Verb) $(RM) -rf Debug Release Profile
1878
1879
1880 ###############################################################################
1881 # DEPENDENCIES: Include the dependency files if we should
1882 ###############################################################################
1883 ifndef DISABLE_AUTO_DEPENDENCIES
1884
1885 # If its not one of the cleaning targets
1886 ifndef IS_CLEANING_TARGET
1887
1888 # Get the list of dependency files
1889 DependSourceFiles := $(basename $(filter %.cpp %.c %.cc %.m %.mm, $(Sources)))
1890 DependFiles := $(DependSourceFiles:%=$(PROJ_OBJ_DIR)/$(BuildMode)/%.d)
1891
1892 # Include bitcode dependency files if using bitcode libraries
1893 ifdef BYTECODE_LIBRARY
1894 DependFiles += $(DependSourceFiles:%=$(PROJ_OBJ_DIR)/$(BuildMode)/%.bc.d)
1895 endif
1896
1897 -include $(DependFiles) ""
1898
1899 endif
1900
1901 endif
1902
1903 ###############################################################################
1904 # CHECK: Running the test suite
1905 ###############################################################################
1906
1907 check::
1908         $(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \
1909           if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \
1910             $(EchoCmd) Running test suite ; \
1911             $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local \
1912               TESTSUITE=$(TESTSUITE) ; \
1913           else \
1914             $(EchoCmd) No Makefile in test directory ; \
1915           fi ; \
1916         else \
1917           $(EchoCmd) No test directory ; \
1918         fi
1919
1920 check-lit:: check
1921
1922 check-dg::
1923         $(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \
1924           if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \
1925             $(EchoCmd) Running test suite ; \
1926             $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local-dg ; \
1927           else \
1928             $(EchoCmd) No Makefile in test directory ; \
1929           fi ; \
1930         else \
1931           $(EchoCmd) No test directory ; \
1932         fi
1933
1934 check-all::
1935         $(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \
1936           if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \
1937             $(EchoCmd) Running test suite ; \
1938             $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local-all ; \
1939           else \
1940             $(EchoCmd) No Makefile in test directory ; \
1941           fi ; \
1942         else \
1943           $(EchoCmd) No test directory ; \
1944         fi
1945
1946 ###############################################################################
1947 # UNITTESTS: Running the unittests test suite
1948 ###############################################################################
1949
1950 unittests::
1951         $(Verb) if test -d "$(PROJ_OBJ_ROOT)/unittests" ; then \
1952           if test -f "$(PROJ_OBJ_ROOT)/unittests/Makefile" ; then \
1953             $(EchoCmd) Running unittests test suite ; \
1954             $(MAKE) -C $(PROJ_OBJ_ROOT)/unittests unitcheck; \
1955           else \
1956             $(EchoCmd) No Makefile in unittests directory ; \
1957           fi ; \
1958         else \
1959           $(EchoCmd) No unittests directory ; \
1960         fi
1961
1962 ###############################################################################
1963 # DISTRIBUTION: Handle construction of a distribution tarball
1964 ###############################################################################
1965
1966 #------------------------------------------------------------------------
1967 # Define distribution related variables
1968 #------------------------------------------------------------------------
1969 DistName    := $(PROJECT_NAME)-$(PROJ_VERSION)
1970 DistDir     := $(PROJ_OBJ_ROOT)/$(DistName)
1971 TopDistDir  := $(PROJ_OBJ_ROOT)/$(DistName)
1972 DistTarGZip := $(PROJ_OBJ_ROOT)/$(DistName).tar.gz
1973 DistZip     := $(PROJ_OBJ_ROOT)/$(DistName).zip
1974 DistTarBZ2  := $(PROJ_OBJ_ROOT)/$(DistName).tar.bz2
1975 DistAlways  := CREDITS.TXT LICENSE.TXT README.txt README AUTHORS COPYING \
1976                ChangeLog INSTALL NEWS Makefile Makefile.common Makefile.rules \
1977                Makefile.config.in configure autoconf
1978 DistOther   := $(notdir $(wildcard \
1979                $(PROJ_SRC_DIR)/*.h \
1980                $(PROJ_SRC_DIR)/*.td \
1981                $(PROJ_SRC_DIR)/*.def \
1982                $(PROJ_SRC_DIR)/*.ll \
1983                $(PROJ_SRC_DIR)/*.in))
1984 DistSubDirs := $(SubDirs)
1985 DistSources  = $(Sources) $(EXTRA_DIST)
1986 DistFiles    = $(DistAlways) $(DistSources) $(DistOther)
1987
1988 #------------------------------------------------------------------------
1989 # We MUST build distribution with OBJ_DIR != SRC_DIR
1990 #------------------------------------------------------------------------
1991 ifeq ($(PROJ_SRC_DIR),$(PROJ_OBJ_DIR))
1992 dist dist-check dist-clean dist-gzip dist-bzip2 dist-zip ::
1993         $(Echo) ERROR: Target $@ only available with OBJ_DIR != SRC_DIR
1994
1995 else
1996
1997 #------------------------------------------------------------------------
1998 # Prevent attempt to run dist targets from anywhere but the top level
1999 #------------------------------------------------------------------------
2000 ifneq ($(LEVEL),.)
2001 dist dist-check dist-clean dist-gzip dist-bzip2 dist-zip ::
2002         $(Echo) ERROR: You must run $@ from $(PROJ_OBJ_ROOT)
2003 else
2004
2005 #------------------------------------------------------------------------
2006 # Provide the top level targets
2007 #------------------------------------------------------------------------
2008
2009 dist-gzip:: $(DistTarGZip)
2010
2011 $(DistTarGZip) : $(TopDistDir)/.makedistdir
2012         $(Echo) Packing gzipped distribution tar file.
2013         $(Verb) cd $(PROJ_OBJ_ROOT) ; $(TAR) chf - "$(DistName)" | \
2014           $(GZIP) -c > "$(DistTarGZip)"
2015
2016 dist-bzip2:: $(DistTarBZ2)
2017
2018 $(DistTarBZ2) : $(TopDistDir)/.makedistdir
2019         $(Echo) Packing bzipped distribution tar file.
2020         $(Verb) cd $(PROJ_OBJ_ROOT) ; $(TAR) chf - $(DistName) | \
2021           $(BZIP2) -c >$(DistTarBZ2)
2022
2023 dist-zip:: $(DistZip)
2024
2025 $(DistZip) : $(TopDistDir)/.makedistdir
2026         $(Echo) Packing zipped distribution file.
2027         $(Verb) rm -f $(DistZip)
2028         $(Verb) cd $(PROJ_OBJ_ROOT) ; $(ZIP) -rq $(DistZip) $(DistName)
2029
2030 dist :: $(DistTarGZip) $(DistTarBZ2) $(DistZip)
2031         $(Echo) ===== DISTRIBUTION PACKAGING SUCCESSFUL =====
2032
2033 DistCheckDir := $(PROJ_OBJ_ROOT)/_distcheckdir
2034
2035 dist-check:: $(DistTarGZip)
2036         $(Echo) Checking distribution tar file.
2037         $(Verb) if test -d $(DistCheckDir) ; then \
2038           $(RM) -rf $(DistCheckDir) ; \
2039         fi
2040         $(Verb) $(MKDIR) $(DistCheckDir)
2041         $(Verb) cd $(DistCheckDir) && \
2042           $(MKDIR) $(DistCheckDir)/build && \
2043           $(MKDIR) $(DistCheckDir)/install && \
2044           gunzip -c $(DistTarGZip) | $(TAR) xf - && \
2045           cd build && \
2046           ../$(DistName)/configure --prefix="$(DistCheckDir)/install" \
2047             --srcdir=../$(DistName) $(DIST_CHECK_CONFIG_OPTIONS) && \
2048           $(MAKE) all && \
2049           $(MAKE) check && \
2050           $(MAKE) unittests && \
2051           $(MAKE) install && \
2052           $(MAKE) uninstall && \
2053           $(MAKE) dist-clean && \
2054           $(EchoCmd) ===== $(DistTarGZip) Ready For Distribution =====
2055
2056 dist-clean::
2057         $(Echo) Cleaning distribution files
2058         -$(Verb) $(RM) -rf $(DistTarGZip) $(DistTarBZ2) $(DistZip) $(DistName) \
2059           $(DistCheckDir)
2060
2061 endif
2062
2063 #------------------------------------------------------------------------
2064 # Provide the recursive distdir target for building the distribution directory
2065 #------------------------------------------------------------------------
2066 distdir: $(DistDir)/.makedistdir
2067 $(DistDir)/.makedistdir: $(DistSources)
2068         $(Verb) if test "$(DistDir)" = "$(TopDistDir)" ; then \
2069           if test -d "$(DistDir)" ; then \
2070             find $(DistDir) -type d ! -perm -200 -exec chmod u+w {} ';'  || \
2071               exit 1 ; \
2072           fi ; \
2073           $(EchoCmd) Removing old $(DistDir) ; \
2074           $(RM) -rf $(DistDir); \
2075           $(EchoCmd) Making 'all' to verify build ; \
2076           $(MAKE) ENABLE_OPTIMIZED=1 all ; \
2077         fi
2078         $(Echo) Building Distribution Directory $(DistDir)
2079         $(Verb) $(MKDIR) $(DistDir)
2080         $(Verb) srcdirstrip=`echo "$(PROJ_SRC_DIR)" | sed 's|.|.|g'`; \
2081         srcrootstrip=`echo "$(PROJ_SRC_ROOT)" | sed 's|.|.|g'`; \
2082         for file in $(DistFiles) ; do \
2083           case "$$file" in \
2084             $(PROJ_SRC_DIR)/*) \
2085               file=`echo "$$file" | sed "s#^$$srcdirstrip/##"` \
2086               ;; \
2087             $(PROJ_SRC_ROOT)/*) \
2088               file=`echo "$$file" | \
2089                 sed "s#^$$srcrootstrip/##"` \
2090               ;; \
2091           esac; \
2092           if test -f "$(PROJ_SRC_DIR)/$$file" || \
2093              test -d "$(PROJ_SRC_DIR)/$$file" ; then \
2094             from_dir="$(PROJ_SRC_DIR)" ; \
2095           elif test -f "$$file" || test -d "$$file" ; then \
2096             from_dir=. ; \
2097           fi ; \
2098           to_dir=`echo "$$file" | sed -e 's#/[^/]*$$##'` ; \
2099           if test "$$to_dir" != "$$file" && test "$$to_dir" != "."; then \
2100             to_dir="$(DistDir)/$$dir"; \
2101             $(MKDIR) "$$to_dir" ; \
2102           else \
2103             to_dir="$(DistDir)"; \
2104           fi; \
2105           mid_dir=`echo "$$file" | sed -n -e 's#^\(.*\)/[^/]*$$#\1#p'`; \
2106           if test -n "$$mid_dir" ; then \
2107             $(MKDIR) "$$to_dir/$$mid_dir" || exit 1; \
2108           fi ; \
2109           if test -d "$$from_dir/$$file"; then \
2110             if test -d "$(PROJ_SRC_DIR)/$$file" && \
2111                test "$$from_dir" != "$(PROJ_SRC_DIR)" ; then \
2112                cd $(PROJ_SRC_DIR) ; \
2113                $(TAR) cf - $$file --exclude .svn --exclude CVS | \
2114                  ( cd $$to_dir ; $(TAR) xf - ) ; \
2115                cd $(PROJ_OBJ_DIR) ; \
2116             else \
2117                cd $$from_dir ; \
2118                $(TAR) cf - $$file --exclude .svn --exclude CVS | \
2119                  ( cd $$to_dir ; $(TAR) xf - ) ; \
2120                cd $(PROJ_OBJ_DIR) ; \
2121             fi; \
2122           elif test -f "$$from_dir/$$file" ; then \
2123             $(CP) -p "$$from_dir/$$file" "$(DistDir)/$$file" || exit 1; \
2124           elif test -L "$$from_dir/$$file" ; then \
2125             $(CP) -pd "$$from_dir/$$file" $(DistDir)/$$file || exit 1; \
2126           elif echo "$(DistAlways)" | grep -v "$$file" >/dev/null ; then \
2127             $(EchoCmd) "===== WARNING: Distribution Source " \
2128               "$$from_dir/$$file Not Found!" ; \
2129           elif test "$(Verb)" != '@' ; then \
2130             $(EchoCmd) "Skipping non-existent $$from_dir/$$file" ; \
2131           fi; \
2132         done
2133         $(Verb) for subdir in $(DistSubDirs) ; do \
2134           if test "$$subdir" \!= "." ; then \
2135             new_distdir="$(DistDir)/$$subdir" ; \
2136             test -d "$$new_distdir" || $(MKDIR) "$$new_distdir" || exit 1; \
2137             ( cd $$subdir && $(MAKE) ENABLE_OPTIMIZED=1 \
2138               DistDir="$$new_distdir" distdir ) || exit 1; \
2139           fi; \
2140         done
2141         $(Verb) if test "$(DistDir)" = "$(TopDistDir)" ; then \
2142           $(EchoCmd) Eliminating CVS/.svn directories from distribution ; \
2143           $(RM) -rf `find $(TopDistDir) -type d \( -name CVS -o \
2144                                   -name .svn \) -print` ;\
2145           $(MAKE) dist-hook ; \
2146           $(FIND) $(TopDistDir) -type d ! -perm -777 -exec chmod a+rwx {} \; \
2147             -o ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; \
2148             -o ! -type d ! -perm -400 -exec chmod a+r {} \; \
2149             -o ! -type d ! -perm -444 -exec \
2150               $(SHELL) $(INSTALL_SH) -c -m a+r {} {} \; \
2151             || chmod -R a+r $(DistDir) ; \
2152         fi
2153
2154 # This is invoked by distdir target, define it as a no-op to avoid errors if not
2155 # defined by user.
2156 dist-hook::
2157
2158 endif
2159
2160 ###############################################################################
2161 # TOP LEVEL - targets only to apply at the top level directory
2162 ###############################################################################
2163
2164 ifeq ($(LEVEL),.)
2165
2166 #------------------------------------------------------------------------
2167 # Install support for the project's include files:
2168 #------------------------------------------------------------------------
2169 ifdef NO_INSTALL
2170 install-local::
2171         $(Echo) Install circumvented with NO_INSTALL
2172 uninstall-local::
2173         $(Echo) Uninstall circumvented with NO_INSTALL
2174 else
2175 install-local::
2176         $(Echo) Installing include files
2177         $(Verb) $(MKDIR) $(DESTDIR)$(PROJ_includedir)
2178         $(Verb) if test -d "$(PROJ_SRC_ROOT)/include" ; then \
2179           cd $(PROJ_SRC_ROOT)/include && \
2180           for hdr in `find . -type f \
2181               '(' -name LICENSE.TXT \
2182                -o -name '*.def' \
2183                -o -name '*.h' \
2184                -o -name '*.inc' \
2185                -o -name '*.td' \
2186               ')' -print | grep -v CVS | \
2187               grep -v .svn` ; do \
2188             instdir=`dirname "$(DESTDIR)$(PROJ_includedir)/$$hdr"` ; \
2189             if test \! -d "$$instdir" ; then \
2190               $(EchoCmd) Making install directory $$instdir ; \
2191               $(MKDIR) $$instdir ;\
2192             fi ; \
2193             $(DataInstall) $$hdr $(DESTDIR)$(PROJ_includedir)/$$hdr ; \
2194           done ; \
2195         fi
2196 ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
2197         $(Verb) if test -d "$(PROJ_OBJ_ROOT)/include" ; then \
2198           cd $(PROJ_OBJ_ROOT)/include && \
2199           for hdr in `find . -type f \
2200               '(' -name LICENSE.TXT \
2201                -o -name '*.def' \
2202                -o -name '*.h' \
2203                -o -name '*.inc' \
2204                -o -name '*.td' \
2205               ')' -print | grep -v CVS | \
2206               grep -v .svn` ; do \
2207             instdir=`dirname "$(DESTDIR)$(PROJ_includedir)/$$hdr"` ; \
2208             if test \! -d "$$instdir" ; then \
2209               $(EchoCmd) Making install directory $$instdir ; \
2210               $(MKDIR) $$instdir ;\
2211             fi ; \
2212             $(DataInstall) $$hdr $(DESTDIR)$(PROJ_includedir)/$$hdr ; \
2213           done ; \
2214         fi
2215 endif
2216
2217 uninstall-local::
2218         $(Echo) Uninstalling include files
2219         $(Verb) if [ -d "$(PROJ_SRC_ROOT)/include" ] ; then \
2220           cd $(PROJ_SRC_ROOT)/include && \
2221             $(RM) -f `find . -path '*/Internal' -prune -o '(' -type f \
2222               '!' '(' -name '*~' -o -name '.#*' \
2223         -o -name '*.in' ')' -print ')' | \
2224         grep -v CVS | sed 's#^#$(DESTDIR)$(PROJ_includedir)/#'` ; \
2225           cd $(PROJ_SRC_ROOT)/include && \
2226             $(RM) -f `find . -path '*/Internal' -prune -o '(' -type f -name '*.in' \
2227       -print ')' | sed 's#\.in$$##;s#^#$(DESTDIR)$(PROJ_includedir)/#'` ; \
2228         fi
2229 endif
2230 endif
2231
2232 check-line-length:
2233         @echo searching for overlength lines in files: $(Sources)
2234         @echo
2235         @echo
2236         egrep -n '.{81}' $(Sources) /dev/null
2237
2238 check-for-tabs:
2239         @echo searching for tabs in files: $(Sources)
2240         @echo
2241         @echo
2242         egrep -n '      ' $(Sources) /dev/null
2243
2244 check-footprint:
2245         @ls -l $(LibDir) | awk '\
2246           BEGIN { sum = 0; } \
2247                 { sum += $$5; } \
2248           END   { printf("Libraries: %6.3f MBytes\n", sum/(1024.0*1024.0)); }'
2249         @ls -l $(ToolDir) | awk '\
2250           BEGIN { sum = 0; } \
2251                 { sum += $$5; } \
2252           END   { printf("Programs:  %6.3f MBytes\n", sum/(1024.0*1024.0)); }'
2253 #------------------------------------------------------------------------
2254 # Print out the directories used for building
2255 #------------------------------------------------------------------------
2256 printvars::
2257         $(Echo) "BuildMode    : " '$(BuildMode)'
2258         $(Echo) "PROJ_SRC_ROOT: " '$(PROJ_SRC_ROOT)'
2259         $(Echo) "PROJ_SRC_DIR : " '$(PROJ_SRC_DIR)'
2260         $(Echo) "PROJ_OBJ_ROOT: " '$(PROJ_OBJ_ROOT)'
2261         $(Echo) "PROJ_OBJ_DIR : " '$(PROJ_OBJ_DIR)'
2262         $(Echo) "LLVM_SRC_ROOT: " '$(LLVM_SRC_ROOT)'
2263         $(Echo) "LLVM_OBJ_ROOT: " '$(LLVM_OBJ_ROOT)'
2264         $(Echo) "PROJ_prefix  : " '$(PROJ_prefix)'
2265         $(Echo) "PROJ_bindir  : " '$(PROJ_bindir)'
2266         $(Echo) "PROJ_libdir  : " '$(PROJ_libdir)'
2267         $(Echo) "PROJ_etcdir  : " '$(PROJ_etcdir)'
2268         $(Echo) "PROJ_includedir  : " '$(PROJ_includedir)'
2269         $(Echo) "UserTargets  : " '$(UserTargets)'
2270         $(Echo) "ObjMakefiles : " '$(ObjMakefiles)'
2271         $(Echo) "SrcMakefiles : " '$(SrcMakefiles)'
2272         $(Echo) "ObjDir       : " '$(ObjDir)'
2273         $(Echo) "LibDir       : " '$(LibDir)'
2274         $(Echo) "ToolDir      : " '$(ToolDir)'
2275         $(Echo) "ExmplDir     : " '$(ExmplDir)'
2276         $(Echo) "Sources      : " '$(Sources)'
2277         $(Echo) "TDFiles      : " '$(TDFiles)'
2278         $(Echo) "INCFiles     : " '$(INCFiles)'
2279         $(Echo) "INCTMPFiles  : " '$(INCTMPFiles)'
2280         $(Echo) "PreConditions: " '$(PreConditions)'
2281         $(Echo) "Compile.CXX  : " '$(Compile.CXX)'
2282         $(Echo) "Compile.C    : " '$(Compile.C)'
2283         $(Echo) "Archive      : " '$(Archive)'
2284         $(Echo) "YaccFiles    : " '$(YaccFiles)'
2285         $(Echo) "LexFiles     : " '$(LexFiles)'
2286         $(Echo) "Module       : " '$(Module)'
2287         $(Echo) "FilesToConfig: " '$(FilesToConfigPATH)'
2288         $(Echo) "SubDirs      : " '$(SubDirs)'
2289         $(Echo) "ProjLibsPaths: " '$(ProjLibsPaths)'
2290         $(Echo) "ProjLibsOptions: " '$(ProjLibsOptions)'
2291
2292 ###
2293 # Debugging
2294
2295 # General debugging rule, use 'make dbg-print-XXX' to print the
2296 # definition, value and origin of XXX.
2297 make-print-%:
2298         $(error PRINT: $(value $*) = "$($*)" (from $(origin $*)))