Makefile revision 96360
1# $FreeBSD: head/gnu/usr.bin/cc/cc_tools/Makefile 96360 2002-05-10 17:42:19Z 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 echo '#include "ansidecl.h"' >> ${.TARGET} 146 echo '#include "${GCC_CPU}/${GCC_CPU}.h"' >> ${.TARGET} 147.if ${TARGET_ARCH} == "i386" 148 echo '#include "${GCC_CPU}/att.h"' >> ${.TARGET} 149.endif 150.if ${TARGET_ARCH} != "alpha" 151 echo '#include "dbxelf.h"' >> ${.TARGET} 152 echo '#include "elfos.h"' >> ${.TARGET} 153.endif 154 echo '#include <freebsd-native.h>' >> ${.TARGET} 155 echo '#include "freebsd-spec.h"' >> ${.TARGET} 156 echo '#include "freebsd.h"' >> ${.TARGET} 157.if ${TARGET_ARCH} == "alpha" 158 echo '#include "${GCC_CPU}/elf.h"' >> ${.TARGET} 159.endif 160.if ${TARGET_ARCH} != "i386" 161.if exists(${GCCDIR}/config/${GCC_CPU}/sysv4.h) 162 echo '#include "${GCC_CPU}/sysv4.h"' >> ${.TARGET} 163.endif 164.endif 165 echo '#include "${GCC_CPU}/freebsd.h"' >> ${.TARGET} 166 echo '#include "defaults.h"' >> ${.TARGET} 167 echo '#ifndef POSIX' >> ${.TARGET} 168 echo '# define POSIX' >> ${.TARGET} 169 echo '#endif' >> ${.TARGET} 170.if ${TARGET_ARCH} != "ia64" 171 echo '#define CONFIG_SJLJ_EXCEPTIONS 0' >> ${.TARGET} 172.endif 173 174tm_p.h: 175 echo '#include "${GCC_CPU}/${GCC_CPU}-protos.h"' >> ${.TARGET} 176 echo '#include "tm-preds.h"' >> ${.TARGET} 177 178safe-ctype.h: Makefile 179 echo '#include <ctype.h>' > ${.TARGET} 180.for Z in TOUPPER TOLOWER ISDIGIT ISXDIGIT ISUPPER ISLOWER ISALPHA ISALNUM \ 181 ISSPACE ISPUNCT ISGRAPH ISBLANK ISPRINT ISCNTRL 182 echo '#define ${Z} ${Z:L}' >> ${.TARGET} 183.endfor 184 echo "#define ISIDST(x) \ 185 ((x) == '_' || isalpha(x))" >> ${.TARGET} 186 echo "#define ISIDNUM(x) \ 187 (isdigit(x) || ISIDST(x))" >> ${.TARGET} 188 echo "#define IS_VSPACE(x) \ 189 ((x) == '\n' || (x) == '\r')" >> ${.TARGET} 190 echo "#define IS_NVSPACE(x) \ 191 (!IS_VSPACE(x) && (isspace(x) || (x) == '\0'))" >> ${.TARGET} 192 echo "#define IS_SPACE_OR_NUL(x) \ 193 (isspace(x) || (x) == '\0')" >> ${.TARGET} 194 195#----------------------------------------------------------------------- 196# General things. 197 198SRCS+= ${GENSRCS} 199CLEANFILES+= ${GENSRCS} 200 201all: ${SRCS} 202 203.include <bsd.prog.mk> 204 205#----------------------------------------------------------------------- 206# Fixups. 207 208# Set OBJS the same as bsd.prog.mk would do if we defined PROG. We can't 209# define PROG because we have multiple programs. 210# 211OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 212 213.if !exists(${DEPENDFILE}) 214# Fudge pre-dependfile dependencies of objects in much the same way as 215# bsd.prog.mk would do if we defined PROG. There are complications to 216# avoid circular dependencies. First, only make most objects depend on 217# all headers. Filter out the objects that would cause problems (i.e., 218# objects that will be used to create programs that will generate headers). 219# 220${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} 221 222# Force these to be made absolustly first w/-j 223${OBJS}: ${COMMONHDRS} 224 225# Next, make each of the problematic objects depend on only most headers. 226# Filter out the headers that would cause problems (and a few more when it 227# is inconvenient to filter precisely). 228# 229bitmap.o genattr.o gencodes.o genconfig.o genflags.o gensupport.o obstack.o print-rtl.o \ 230 read-rtl.o rtl.o: ${SRCS:M*.h:Ninsn-*.h} 231gencheck.o: gencheck.h ${SRCS:M*.h:Ngenrtl.h:Ntree-check.h:Ninsn-*.h} 232gengenrtl.o: ${SRCS:M*.h:Ngenrtl.h:Ninsn-*.h} 233genpreds.o: ${COMMONHDRS} 234.endif 235