Makefile revision 53173
150472Speter# $FreeBSD: head/gnu/usr.bin/cc/cc_tools/Makefile 53173 1999-11-15 04:16:19Z obrien $ 218390Speter 318390Speter# 418390Speter# This could probably be merged with ../cc_int/Makefile, but bsd.lib.mk 534112Sbde# is such a !@#!*#% nightmare because of how it reprograms the dependencies, 618390Speter# suffix rules, SRCS, etc. It's easiest to cheat by using bsd.prog.mk and 718390Speter# SRCS to get dependencies. 818390Speter# 918390Speter 1035402Sbde# ../Makefile.inc will put an absolute path to our objdir in CFLAGS. 1135402Sbde# Prevent mkdep from using it, so that we don't have to give rules for 1235402Sbde# aliases of generated headers. 1349864Sobrien 1445582SbdeCFLAGS+= -I. 1535402Sbde 1618390Speter.include "../Makefile.inc" 1718390Speter 1845583Sbde.PATH: ${GCCDIR} ${GCCDIR}/cp 1945583Sbde 2045582SbdeCFLAGS+= -I${GCCDIR}/objc 2145582Sbde 2218390Speter#----------------------------------------------------------------------- 2318390Speter# insn-* gunk 2418390Speter 2535402Sbde.for i in attr codes config flags 2635402Sbdeinsn-$i.h: gen$i ${MD_FILE} 2718390Speter ./gen$i ${MD_FILE} > insn-$i.h 2835402SbdeGENSRCS+= insn-$i.h 2918390Speter.endfor 3018390Speter 3135402Sbde.for i in attrtab emit extract opinit output peep recog 3235402Sbdeinsn-$i.c: gen$i ${MD_FILE} 3318390Speter ./gen$i ${MD_FILE} > insn-$i.c 3435402SbdeGENSRCS+= insn-$i.c 3518390Speter.endfor 3618390Speter 3735402Sbde.for i in attr codes config emit extract flags opinit output peep recog 3837460Sbdebuild-tools: gen$i 3937460Sbde 4053173Sobriengen$i: gen$i.o rtl.o obstack.o print-rtl.o bitmap.o 4138462Sjb ${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC} 4218390Speter 4335402SbdeGENSRCS+= gen$i.c 4435402SbdeCLEANFILES+= gen$i 4518390Speter.endfor 4618390Speter 4745583Sbde.for i in attrtab 4845299Sobrienbuild-tools: gen$i 4945299Sobrien 5045583Sbdegen$i: gen$i.o rtl.o rtlanal.o print-rtl.o obstack.o bitmap.o 5145299Sobrien ${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC} 5245299Sobrien 5345299SobrienGENSRCS+= gen$i.c 5445299SobrienCLEANFILES+= gen$i 5545299Sobrien.endfor 5645299Sobrien 5745583SbdeSRCS+= bitmap.c obstack.c print-rtl.c rtl.c rtlanal.c 5845299Sobrien 5945583Sbde.for i in check genrtl 6037460Sbdebuild-tools: gen$i 6137460Sbde 6245583Sbdegen$i: gen$i.o 6338462Sjb ${CC} -static ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC} 6418390Speter 6535402SbdeGENSRCS+= gen$i.c 6635402SbdeCLEANFILES+= gen$i 6718390Speter.endfor 6818390Speter 6945583Sbde.ORDER: genrtl.c genrtl.h 7045583Sbdegenrtl.c genrtl.h: gengenrtl 7145583Sbde ./gengenrtl genrtl.h genrtl.c 7245583Sbde 7345583SbdeGENSRCS+= genrtl.c genrtl.h 7445583Sbde 7518390Speter#----------------------------------------------------------------------- 7618390Speter# C hash codes 7718390Speterc-gperf.h: c-parse.gperf 7818390Speter gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$$ \ 7949864Sobrien ${GCCDIR}/c-parse.gperf > ${.TARGET} 8035402SbdeGENSRCS+= c-gperf.h 8118390Speter 8218390Speter#----------------------------------------------------------------------- 8318390Speter# C++ hash codes 8452171Sobriengxx-hash.h: gxx.gperf 8518390Speter gperf -p -j1 -g -o -t -N is_reserved_word '-k1,4,7,$$' \ 8652171Sobrien ${GCCDIR}/cp/gxx.gperf >gxx-hash.h 8752172SobrienGENSRCS+= gxx-hash.h 8818390Speter 8952172Sobrien# make a link the the Cygnus used name for now -- hopes are they will change it 9052171Sobrienhash.h: gxx-hash.h 9152648Sobrien ln -sf ${.ALLSRC} ${.TARGET} 9252172SobrienGENSRCS+= hash.h 9352171Sobrien 9418390Speter#----------------------------------------------------------------------- 9545583Sbde# Common parser stuff. 9645299Sobrien 9745299Sobrientree-check.h: gencheck 9845299Sobrien ./gencheck > ${.TARGET} 9945519SbdeGENSRCS+= tree-check.h 10045299Sobrien 10145299Sobrien#----------------------------------------------------------------------- 10218390Speter# C parser 10345519Sbde.ORDER: c-parse.c c-parse.h 10418390Speterc-parse.c c-parse.h: c-parse.in 10518390Speter sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \ 10618390Speter -e "/^ifc$$/d" -e "/^end ifc$$/d" \ 10718390Speter ${GCCDIR}/c-parse.in > c-parse.y 10849152Sobrien ${YACC} -d -o c-parse.c c-parse.y 10949810Sobrien mv c-parse.y c-parse.y.out 11018390Speter 11135402SbdeGENSRCS+= c-parse.c c-parse.h 11249810SobrienCLEANFILES+= c-parse.y c-parse.y.out # insurance 11318390Speter 11418390Speter#----------------------------------------------------------------------- 11518390Speter# objc parser 11645519Sbde.ORDER: objc-parse.c objc-parse.h 11718390Speterobjc-parse.c objc-parse.h: c-parse.in 11818390Speter sed -e "/^ifc$$/,/^end ifc$$/d" \ 11918390Speter -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \ 12018390Speter ${GCCDIR}/c-parse.in > objc-parse.y 12149152Sobrien ${YACC} -d -o objc-parse.c objc-parse.y 12249810Sobrien mv objc-parse.y objc-parse.y.out 12318390Speter 12435402SbdeGENSRCS+= objc-parse.c objc-parse.h 12549810SobrienCLEANFILES+= objc-parse.y objc-parse.y.out # insurance 12618390Speter 12718390Speter#----------------------------------------------------------------------- 12834112Sbde# C++ parser done in its own makefile 12918390Speter#----------------------------------------------------------------------- 13034112Sbde# CPP parser done in its own makefile 13118390Speter#----------------------------------------------------------------------- 13218390Speter# the host/target compiler config. 13318390Speter 13445583SbdeCOMMONHDRS= config.h hconfig.h multilib.h options.h specs.h tconfig.h tm.h 13553173SobrienGENSRCS+= ${COMMONHDRS} gencheck.h 13634112Sbde 13745299Sobrienconfig.h hconfig.h: 13853161Sobrien echo '#include "auto-host.h"' > ${.TARGET} 13953173Sobrien echo '#include "gansidecl.h"' >> ${.TARGET} 14053161Sobrien echo '#include "${GCC_ARCH}/xm-${GCC_ARCH}.h"' >> ${.TARGET} 14153173Sobrien echo '#include "hwint.h"' >> ${.TARGET} 14245299Sobrien 14353173Sobriengencheck.h: 14453173Sobrien echo '#include "cp/cp-tree.def"' > ${.TARGET} 14553173Sobrien echo '#include "objc/objc-tree.def"' >> ${.TARGET} 14653173Sobrien 14745583Sbdemultilib.h: 14845583Sbde echo 'static char *multilib_raw[] = { \ 14953161Sobrien "aout maout;", "elf !maout;", NULL };' > ${.TARGET} 15045583Sbde echo 'static char *multilib_matches_raw[] = { \ 15153161Sobrien "maout maout;", "melf melf;", NULL };' >> ${.TARGET} 15253161Sobrien echo 'static char *multilib_extra = "";' >> ${.TARGET} 15345299Sobrien 15440457Sbdeoptions.h: 15553161Sobrien echo '#include "cp/lang-options.h"' > ${.TARGET} 15653161Sobrien echo '#include "f/lang-options.h"' >> ${.TARGET} 15745299Sobrien 15840457Sbdespecs.h: 15953161Sobrien echo '#include "cp/lang-specs.h"' > ${.TARGET} 16053161Sobrien echo '#include "f/lang-specs.h"' >> ${.TARGET} 16153173Sobrien echo '#include "objc/lang-specs.h"' >> ${.TARGET} 16245299Sobrien 16345583Sbdetconfig.h: 16453173Sobrien echo '#include "gansidecl.h"' > ${.TARGET} 16553173Sobrien echo '#include "${GCC_ARCH}/xm-${GCC_ARCH}.h"' >> ${.TARGET} 16645583Sbde 16753173Sobrien# KEEP THIS IN SYNC with src/gcc/lib/libgcc/Makefile !! 16840457Sbdetm.h: 16953161Sobrien echo '#include "${GCC_ARCH}/${GCC_ARCH}.h"' > ${.TARGET} 17049864Sobrien.if ${GCC_ARCH} == "i386" 17153161Sobrien echo '#include "${GCC_ARCH}/att.h"' >> ${.TARGET} 17253161Sobrien echo '#include "svr4.h"' >> ${.TARGET} 17349864Sobrien.endif 17453173Sobrien echo '#include <freebsd.h>' >> ${.TARGET} 17553161Sobrien echo '#include "${GCC_ARCH}/freebsd.h"' >> ${.TARGET} 17645943Sobrien.if ${GCC_ARCH} == "i386" 17753161Sobrien echo '#include "${GCC_ARCH}/perform.h"' >> ${.TARGET} 17845305Sobrien.endif 17953161Sobrien echo '#include <freebsd-native.h>' >> ${.TARGET} 18018390Speter 18134229Speter#----------------------------------------------------------------------- 18235402Sbde# General things. 18334229Speter 18435402SbdeSRCS+= ${GENSRCS} 18535402SbdeCLEANFILES+= ${GENSRCS} 18634229Speter 18735402Sbdeall: ${SRCS} 18835402Sbde 18935402Sbde.include <bsd.prog.mk> 19035402Sbde 19134229Speter#----------------------------------------------------------------------- 19235402Sbde# Fixups. 19334112Sbde 19435402Sbde# Set OBJS the same as bsd.prog.mk would do if we defined PROG. We can't 19535402Sbde# define PROG because we have multiple programs. 19635402Sbde# 19735402SbdeOBJS+= ${SRCS:N*.h:R:S/$/.o/g} 19835402Sbde 19935402Sbde.if !exists(${DEPENDFILE}) 20045519Sbde# Fudge pre-dependfile dependencies of objects in much the same way as 20145519Sbde# bsd.prog.mk would do if we defined PROG. There are complications to 20245519Sbde# avoid circular dependencies. First, only make most objects depend on 20345519Sbde# all headers. Filter out the objects that would cause problems (i.e., 20445519Sbde# objects that will be used to create programs that will generate headers). 20535402Sbde# 20653173Sobrien${OBJS:Nbitmap.o:Ngenattr.o:Ngencheck.o:Ngencodes.o:Ngenconfig.o:Ngenflags.o:Ngengenrtl.o:Nobstack.o:Nprint-rtl.o:Nrtl.o}: ${SRCS:M*.h} 20735402Sbde 20845519Sbde# Next, make each of the problematic objects depend on only most headers. 20945519Sbde# Filter out the headers that would cause problems (and a few more when it 21045519Sbde# is inconvenient to filter precisely). 21135402Sbde# 21245519Sbdebitmap.o genattr.o gencodes.o genconfig.o genflags.o obstack.o rtl.o: \ 21345519Sbde ${SRCS:M*.h:Ninsn-*.h} 21453173Sobriengencheck.o: gencheck.h ${SRCS:M*.h:Ngenrtl.h:Ntree-check.h:Ninsn-*.h} 21545519Sbdegengenrtl.o: ${SRCS:M*.h:Ngenrtl.h:Ninsn-*.h} 21635402Sbde.endif 217