From 4f2458912cb4d8ace78afdff740709dca458ea7a Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Wed, 13 Oct 2004 11:39:51 +0000 Subject: [PATCH] Get rid of the horrendous FIND_PATH macro, have libs and progs linked into a common directory for simplicity. Provide an easy way to relink some objects git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16949 91177308-0d34-0410-b5e6-96231b3b80d8 --- Makefile_rules | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 Makefile_rules diff --git a/Makefile_rules b/Makefile_rules new file mode 100644 index 00000000000..d561f43d605 --- /dev/null +++ b/Makefile_rules @@ -0,0 +1,163 @@ +#,===-- 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 -- 2.11.0