#,===-- Makefile.rules.am - Common make rules for LLVM ------*- Makefile -*--===# # # The LLVM Compiler Infrastructure # # This file was developed by Reid Spencer and is distributed under the # University of Illinois Open Source License. See LICENSE.TXT for details. # #===------------------------------------------------------------------------===# # # LLVM Specific C/C++ compiler flags # LLVM_COMMONFLAGS := -Wall -W -Wwrite-strings -Wno-unused -Wcast-align LLVM_CXXFLAGS := LLVM_CFLAGS := LLVM_CPPFLAGS := \ -I. \ -I$(srcdir) \ -I$(top_srcdir)/include \ -I$(top_builddir)/include \ -D_RENTRANT -D_GNU_SOURCE -D__STDC_LIMIT_MACROS ifeq ($(BUILDMODE),Profile) LLVM_CPPFLAGS += -DNDEBUG LLVM_CXXFLAGS += -pg -O3 -finline-functions -felide-constructors LLVM_CFLAGS += -pg else ifeq ($(BUILDMODE),Release) LLVM_CPPFLAGS += -DNDEBUG LLVM_CXXFLAGS += -O3 -finline-functions -fomit-frame-pointer -felide-constructors LLVM_CFLAGS += -O3 else LLVM_CPPFLAGS += -D_DEBUG LLVM_CXXFLAGS += -O1 LLVM_CFLAGS += -O1 endif endif LDIR = $(top_builddir)/$(BUILDMODE)/lib BDIR = $(top_builddir)/$(BUILDMODE)/bin DDIR = $(top_builddir)/$(BUILDMODE)/data EDIR = $(top_builddir)/$(BUILDMODE)/etc # Required tool definitions as macros so they can be overridden LINKLIB := ${LIBTOOL} --tag=CXX --mode=link $(CXX) -o BURG := $(top_builddir)/utils/Burg/burg$(EXEEXT) RunBurg := $(BURG) -I TBLGEN := $(top_builddir)/utils/TableGen/TableGen$(EXEEXT) LGCCLDPROG := $(top_builddir)/tools/gccld/gccld$(EXEEXT) # Set up the standard automake variables # AM_CPPFLAGS = $(LLVM_CPPFLAGS) AM_CXXFLAGS = $(LLVM_COMMONFLAGS) $(LLVM_CXXFLAGS) AM_CFLAGS = $(LLVM_COMMONFLAGS) $(LLVM_CFLAGS) AM_LDFLAGS = -L$(LDIR) # LLVM GNU Make Function macros GETOBJ = $(patsubst %,$(LDIR)/LLVM%.o,$(1)) GETLIB = $(patsubst %,-lLLVM%,$(1)) GETOBJS = $(foreach I,$(1) $(2) $(3) $(4) $(5) $(6) $(7) $(8) $(9) $(10),$(call GETOBJ,$(I))) GETLIBS = $(foreach I,$(1) $(2) $(3) $(4) $(5) $(6) $(7) $(8) $(9) $(10),$(call GETLIB,$(I))) # LLVM Rules ifdef lib_LIBRARIES lib_LINKS_TO_MAKE = $(foreach L,$(lib_LIBRARIES),$(patsubst lib%.a,$(LDIR)/lib%.a,$(L))) all-am : $(lib_LINKS_TO_MAKE) $(LDIR)/lib%.a : lib%.a cwd=`pwd` ; cd $(LDIR) ; $(LN) -s $${cwd}/$* . endif ifdef bin_PROGRAMS bin_LINKS_TO_MAKE = $(foreach P,$(bin_PROGRAMS),$(patsubst %,$(BDIR)/%,$(P))) all-am : $(bin_LINKS_TO_MAKE) $(BDIR)/% : % cwd=`pwd` ; cd $(BDIR) ; $(LN) -s $${cwd}/$* . endif ifdef PRELINK PRELINK_LIB_NAME = $(LDIR)/$(patsubst lib%.a,%.o,$(PRELINK)) PRELINK_VAR_NAME = $(patsubst lib%.a,lib%_a,$(PRELINK))_OBJECTS PRELINK_OBJECTS = $($(PRELINK_VAR_NAME)) all-am: $(PRELINK_LIB_NAME) $(PRELINK_LIB_NAME) : $(PRELINK_OBJECTS) $(LIBTOOL) --mode=link $(CXX) -o $(PRELINK_LIB_NAME) $(PRELINK_OBJECTS) clean-am: clean-relink clean-relink: $(RM) -f $(PRELINK_LIB_NAME) endif %.cpp: %.l @${ECHO} Flexing $< $(VERB) $(FLEX) -t $< | \ $(SED) '/^find_rule/d' | \ $(SED) 's/void yyunput/inline void yyunput/' | \ $(SED) 's/void \*yy_flex_realloc/inline void *yy_flex_realloc/' | \ $(SED) 's/#define YY_BUF_SIZE 16384/#define YY_BUF_SIZE (16384*64)/' > $@.tmp $(VERB) $(CMP) -s $@ $@.tmp > /dev/null || ${MV} -f $@.tmp $@ @# remove the output of flex if it didn't get moved over... @$(RM) -f $@.tmp SUFFIXES = .td %.c: %.y # Cancel built-in rules for yacc %.h: %.y # Cancel built-in rules for yacc %.cpp %.h : %.y @${ECHO} "Bisoning `basename $<`" $(VERB) $(BISON) -v -d -p $( /dev/null || ${MV} -f $*.tab.c $*.cpp $(VERB) $(CMP) -s $*.tab.h $*.h > /dev/null || ${MV} -f $*.tab.h $*.h @# If the files were not updated, don't leave them lying around... @$(RM) -f $*.tab.c $*.tab.h %GenRegisterNames.inc : %.td @echo "Building $< register names with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-register-enums -o $@ %GenRegisterInfo.h.inc : %.td @echo "Building $< register information header with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-register-desc-header -o $@ %GenRegisterInfo.inc : %.td @echo "Building $< register info implementation with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-register-desc -o $@ %GenInstrNames.inc : %.td @echo "Building $< instruction names with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-instr-enums -o $@ %GenInstrInfo.inc : %.td @echo "Building $< instruction information with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-instr-desc -o $@ %GenAsmWriter.inc : %.td @echo "Building $< assembly writer with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-asm-writer -o $@ %GenATTAsmWriter.inc : %.td @echo "Building $< AT&T assembly writer with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-asm-writer -o $@ %GenIntelAsmWriter.inc : %.td @echo "Building $< Intel assembly writer with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-asm-writer -asmwriternum=1 -o $@ %GenInstrSelector.inc: %.td @echo "Building $< instruction selector with tblgen" $(VERB) $(TBLGEN) -I $(srcdir) $< -gen-instr-selector -o $@ TDFILES = $(wildcard $(srcdir)/*.td ) $(srcdir)/../Target.td