mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
cf32e1a16f
a common directory for simplicity. Provide an easy way to relink some objects llvm-svn: 16949
164 lines
5.1 KiB
Makefile
164 lines
5.1 KiB
Makefile
#,===-- 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 $(<F:%Parser.y=%) -o $*.tab.c $<
|
|
$(VERB) $(CMP) -s $*.tab.c $*.cpp > /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
|