Makefile revision 96697
1# $FreeBSD: head/gnu/usr.bin/cc/cc_tools/Makefile 96697 2002-05-15 21:59:46Z obrien $ 2 3# 4# This could probably be merged with ../cc_int/Makefile, but bsd.lib.mk 5# is such a !@#!*#% nightmare because of how it reprograms the dependencies, 6# suffix rules, SRCS, etc. It's easiest to cheat by using bsd.prog.mk and 7# SRCS to get dependencies. 8# 9 10# ../Makefile.inc will put an absolute path to our objdir in CFLAGS. 11# Prevent mkdep from using it, so that we don't have to give rules for 12# aliases of generated headers. 13 14CFLAGS+= -I. 15 16.include "../Makefile.inc" 17 18.PATH: ${GCCDIR} ${GCCDIR}/cp ${GCCDIR}/../libiberty 19 20CFLAGS+= -static -DGENERATOR_FILE 21 22#----------------------------------------------------------------------- 23# insn-* gunk 24 25.for F in attr codes config flags 26insn-$F.h: gen$F ${MD_FILE} 27 ./gen$F ${MD_FILE} > insn-$F.h 28GENSRCS+= insn-$F.h 29.endfor 30 31GENSRCS+= gen-time-stamp 32gen-time-stamp: genattrtab genemit genextract genopinit genoutput genpeep genrecog 33 touch ${.TARGET} 34 35.for F in attr codes config emit extract flags opinit output peep recog 36build-tools: gen$F 37 38gen$F: gen$F.o rtl.o obstack.o print-rtl.o bitmap.o errors.o gensupport.o ggc-none.o hashtab.o read-rtl.o 39 ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC} 40 41GENSRCS+= gen$F.c 42CLEANFILES+= gen$F 43.endfor 44 45.for F in attrtab 46build-tools: gen$F 47 48gen$F: gen$F.o rtl.o print-rtl.o obstack.o bitmap.o errors.o gensupport.o ggc-none.o hashtab.o read-rtl.o 49 ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC} 50 51GENSRCS+= gen$F.c 52CLEANFILES+= gen$F 53.endfor 54 55SRCS+= bitmap.c errors.c gensupport.c ggc-none.c hashtab.c obstack.c print-rtl.c regclass.c rtl.c rtlanal.c read-rtl.c 56 57.for F in check genrtl preds 58build-tools: gen$F 59 60gen$F: gen$F.o 61 ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.ALLSRC} 62 63GENSRCS+= gen$F.c 64CLEANFILES+= gen$F 65.endfor 66 67.ORDER: genrtl.c genrtl.h 68genrtl.c genrtl.h: gengenrtl 69 ./gengenrtl > genrtl.c 70 ./gengenrtl -h > genrtl.h 71 72GENSRCS+= genrtl.c genrtl.h 73 74#----------------------------------------------------------------------- 75# Common parser stuff. 76 77tree-check.h: gencheck 78 ./gencheck > ${.TARGET} 79GENSRCS+= tree-check.h 80 81#----------------------------------------------------------------------- 82# Predicates stuff. 83 84tm-preds.h: genpreds 85 ./genpreds > ${.TARGET} 86GENSRCS+= tm-preds.h 87 88#----------------------------------------------------------------------- 89# the host/target compiler config. 90 91COMMONHDRS= config.h hconfig.h multilib.h options.h specs.h tconfig.h \ 92 tm_p.h configargs.h safe-ctype.h 93GENSRCS+= ${COMMONHDRS} gencheck.h 94 95MFILE?= ${.CURDIR}/Makefile 96${COMMONHDRS}: ${MFILE} 97 98configargs.h: 99 echo 'static const char configuration_arguments[] =' > ${.TARGET} 100 echo ' "FreeBSD/${TARGET_ARCH} system compiler";' >> ${.TARGET} 101 echo 'static const char thread_model[] = "posix";' >> ${.TARGET} 102 103hconfig.h: 104 echo '#include "auto-host.h"' > ${.TARGET} 105 echo '#include <tconfig.h>' >> ${.TARGET} 106 107gencheck.h: 108 echo '#include "cp/cp-tree.def"' > ${.TARGET} 109 echo '#include "objc/objc-tree.def"' >> ${.TARGET} 110 111multilib.h: 112 echo 'static const char *const multilib_raw[] = { \ 113 "aout maout;", "elf !maout;", NULL };' > ${.TARGET} 114 echo 'static const char *const multilib_matches_raw[] = { \ 115 "maout maout;", "melf melf;", NULL };' >> ${.TARGET} 116 echo 'static const char *multilib_extra = "";' >> ${.TARGET} 117 echo 'static const char *const multilib_exclusions_raw[] = { \ 118 NULL };' >> ${.TARGET} 119 120options.h: 121 echo '#include "cp/lang-options.h"' > ${.TARGET} 122 echo '#include "f/lang-options.h"' >> ${.TARGET} 123 echo '#include "objc/lang-options.h"' >> ${.TARGET} 124 125specs.h: 126 echo '#include "cp/lang-specs.h"' > ${.TARGET} 127 echo '#include "f/lang-specs.h"' >> ${.TARGET} 128 echo '#include "objc/lang-specs.h"' >> ${.TARGET} 129 130config.h: 131 echo '#include <hconfig.h>' > ${.TARGET} 132 echo '#ifndef GENERATOR_FILE' >> ${.TARGET} 133 echo '#include "insn-codes.h"' >> ${.TARGET} 134 echo '#include "insn-flags.h"' >> ${.TARGET} 135 echo '#endif' >> ${.TARGET} 136 137tconfig.h: 138 echo 'struct rtx_def;' > ${.TARGET} 139 echo 'typedef struct rtx_def *rtx;' >> ${.TARGET} 140 echo 'struct rtvec_def;' >> ${.TARGET} 141 echo 'typedef struct rtvec_def *rtvec;' >> ${.TARGET} 142 echo 'union tree_node;' >> ${.TARGET} 143 echo 'typedef union tree_node *tree;' >> ${.TARGET} 144 echo '' >> ${.TARGET} 145.if ${TARGET_ARCH} == "ia64" 146 echo '#define TARGET_CPU_DEFAULT (MASK_GNU_AS|MASK_GNU_LD)' >>${.TARGET} 147.endif 148 echo '#include "ansidecl.h"' >> ${.TARGET} 149 echo '#include "${GCC_CPU}/${GCC_CPU}.h"' >> ${.TARGET} 150.if ${TARGET_ARCH} == "i386" 151 echo '#include "${GCC_CPU}/att.h"' >> ${.TARGET} 152.endif 153.if ${TARGET_ARCH} != "alpha" 154 echo '#include "dbxelf.h"' >> ${.TARGET} 155 echo '#include "elfos.h"' >> ${.TARGET} 156.endif 157 echo '#include <freebsd-native.h>' >> ${.TARGET} 158 echo '#include "freebsd-spec.h"' >> ${.TARGET} 159 echo '#include "freebsd.h"' >> ${.TARGET} 160.if ${TARGET_ARCH} == "alpha" 161 echo '#include "${GCC_CPU}/elf.h"' >> ${.TARGET} 162.endif 163.if ${TARGET_ARCH} != "i386" 164.if exists(${GCCDIR}/config/${GCC_CPU}/sysv4.h) 165 echo '#include "${GCC_CPU}/sysv4.h"' >> ${.TARGET} 166.endif 167.endif 168 echo '#include "${GCC_CPU}/freebsd.h"' >> ${.TARGET} 169 echo '#include "defaults.h"' >> ${.TARGET} 170 echo '#ifndef POSIX' >> ${.TARGET} 171 echo '# define POSIX' >> ${.TARGET} 172 echo '#endif' >> ${.TARGET} 173.if ${TARGET_ARCH} != "ia64" 174 echo '#define CONFIG_SJLJ_EXCEPTIONS 0' >> ${.TARGET} 175.endif 176 177tm_p.h: 178 echo '#include "${GCC_CPU}/${GCC_CPU}-protos.h"' >> ${.TARGET} 179 echo '#include "tm-preds.h"' >> ${.TARGET} 180 181safe-ctype.h: Makefile 182 echo '#include <ctype.h>' > ${.TARGET} 183.for Z in TOUPPER TOLOWER ISDIGIT ISXDIGIT ISUPPER ISLOWER ISALPHA ISALNUM \ 184 ISSPACE ISPUNCT ISGRAPH ISBLANK ISPRINT ISCNTRL 185 echo '#define ${Z} ${Z:L}' >> ${.TARGET} 186.endfor 187 echo "#define ISIDST(x) \ 188 ((x) == '_' || isalpha(x))" >> ${.TARGET} 189 echo "#define ISIDNUM(x) \ 190 (isdigit(x) || ISIDST(x))" >> ${.TARGET} 191 echo "#define IS_VSPACE(x) \ 192 ((x) == '\n' || (x) == '\r')" >> ${.TARGET} 193 echo "#define IS_NVSPACE(x) \ 194 (!IS_VSPACE(x) && (isspace(x) || (x) == '\0'))" >> ${.TARGET} 195 echo "#define IS_SPACE_OR_NUL(x) \ 196 (isspace(x) || (x) == '\0')" >> ${.TARGET} 197 198#----------------------------------------------------------------------- 199# General things. 200 201SRCS+= ${GENSRCS} 202CLEANFILES+= ${GENSRCS} 203 204all: ${SRCS} 205 206.include <bsd.prog.mk> 207 208#----------------------------------------------------------------------- 209# Fixups. 210 211# Set OBJS the same as bsd.prog.mk would do if we defined PROG. We can't 212# define PROG because we have multiple programs. 213# 214OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 215 216.if !exists(${DEPENDFILE}) 217# Fudge pre-dependfile dependencies of objects in much the same way as 218# bsd.prog.mk would do if we defined PROG. There are complications to 219# avoid circular dependencies. First, only make most objects depend on 220# all headers. Filter out the objects that would cause problems (i.e., 221# objects that will be used to create programs that will generate headers). 222# 223${OBJS:Nbitmap.o:Nerrors.o:Ngenattr.o:Ngencheck.o:Ngencodes.o:Ngenconfig.o:Ngenflags.o:Ngengenrtl.o:Ngenpreds.o:Ngensupport.o:Nggc-none.o:Nhashtab.o:Nobstack.o:Nprint-rtl.o:Nread-rtl.o:Nrtl.o}: ${SRCS:M*.h} 224 225# Force these to be made absolustly first w/-j 226${OBJS}: ${COMMONHDRS} 227 228# Next, make each of the problematic objects depend on only most headers. 229# Filter out the headers that would cause problems (and a few more when it 230# is inconvenient to filter precisely). 231# 232bitmap.o genattr.o gencodes.o genconfig.o genflags.o gensupport.o obstack.o print-rtl.o \ 233 read-rtl.o rtl.o: ${SRCS:M*.h:Ninsn-*.h} 234gencheck.o: gencheck.h ${SRCS:M*.h:Ngenrtl.h:Ntree-check.h:Ninsn-*.h} 235gengenrtl.o: ${SRCS:M*.h:Ngenrtl.h:Ninsn-*.h} 236genpreds.o: ${COMMONHDRS} 237.endif 238