1 1.21 matt # $NetBSD: Makefile.inc,v 1.21 2013/08/22 00:16:54 matt Exp $ 2 1.1 mrg 3 1.1 mrg .if ${MKGCC} != "no" 4 1.21 matt LIBGCC_MACHINE_ARCH?=${MACHINE_ARCH:S/earmv5/earm/} 5 1.19 matt .if exists(${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}.mk) 6 1.19 matt .include "${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}.mk" 7 1.1 mrg .endif 8 1.1 mrg .endif 9 1.1 mrg 10 1.1 mrg UNSUPPORTED_COMPILER.clang= # defined 11 1.1 mrg 12 1.2 mrg DIST= ${NETBSDSRCDIR}/external/gpl3/gcc/dist 13 1.1 mrg GNUHOSTDIST= ${DIST} 14 1.19 matt GCCARCH= ${NETBSDSRCDIR}/external/gpl3/gcc/usr.bin/gcc/arch/${LIBGCC_MACHINE_ARCH} 15 1.19 matt GCCARCHLIBGCC= ${NETBSDSRCDIR}/external/gpl3/gcc/lib/libgcc/arch/${LIBGCC_MACHINE_ARCH} 16 1.19 matt GCCARCHXX= ${NETBSDSRCDIR}/external/gpl3/gcc/lib/libstdc++-v3/arch/${LIBGCC_MACHINE_ARCH} 17 1.1 mrg 18 1.1 mrg GCPPFLAGS= ${G_LIBGCC2_CFLAGS} ${G_USE_COLLECT2} ${G_INCLUDES} 19 1.1 mrg CPPFLAGS+= -I${.CURDIR} -I${GCCARCHLIBGCC} 20 1.1 mrg CPPFLAGS+= -I${GCCARCH} ${GCPPFLAGS:M-D*} ${GCPPFLAGS:M-I*:N-I.*} 21 1.12 mrg CPPFLAGS+= ${GCPPFLAGS:M-m*} ${GCPPFLAGS:M-f*} 22 1.3 mrg CPPFLAGS+= ${G_EXTRA_HEADERS:M/*:H:u:S/^/-I/g} 23 1.1 mrg CPPFLAGS+= -I${DIST} -I${DIST}/gcc/cp -I${DIST}/gcc/config -I${GCCARCHXX} -I. 24 1.1 mrg 25 1.19 matt .if ${LIBGCC_MACHINE_ARCH} == "powerpc" || \ 26 1.19 matt ${LIBGCC_MACHINE_ARCH} == "sh3el" || \ 27 1.19 matt ${LIBGCC_MACHINE_ARCH} == "sh3eb" || \ 28 1.19 matt ${LIBGCC_MACHINE_ARCH} == "m68000" 29 1.1 mrg _TRADITIONAL_CPP= 30 1.1 mrg COMPILE.S= ${CC} ${AFLAGS} ${CPPFLAGS} -c 31 1.1 mrg .endif 32 1.1 mrg 33 1.1 mrg # 34 1.1 mrg # Old style libgcc build procedure. 35 1.1 mrg # 36 1.1 mrg 37 1.1 mrg # This is copied from gcc/mklibgcc.in:$lib2funcs 38 1.5 mrg LIB2FUNCS_ALL= \ 39 1.5 mrg _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2 \ 40 1.5 mrg _clear_cache _enable_execute_stack _trampoline __main _absvsi2 \ 41 1.5 mrg _absvdi2 _addvsi3 _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 \ 42 1.5 mrg _negvsi2 _negvdi2 _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 \ 43 1.5 mrg _ctzsi2 _ctzdi2 _popcount_tab _popcountsi2 _popcountdi2 \ 44 1.5 mrg _paritysi2 _paritydi2 _powisf2 _powidf2 _powixf2 _powitf2 \ 45 1.5 mrg _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3 \ 46 1.5 mrg _divtc3 _bswapsi2 _bswapdi2 47 1.5 mrg 48 1.21 matt .if ${LIBGCC_MACHINE_ARCH} != "coldfire" && empty(LIBGCC_MACHINE_ARCH:Mearm*) 49 1.21 matt 50 1.21 matt LIB2FUNCS_ALL+= \ 51 1.21 matt _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 52 1.21 matt 53 1.21 matt .endif 54 1.21 matt 55 1.21 matt .if ${LIBGCC_MACHINE_ARCH} != "coldfire" && empty(LIBGCC_MACHINE_ARCH:Mearm*) 56 1.20 matt 57 1.5 mrg # non swfloat versions 58 1.5 mrg .for _p in _fix _fixuns 59 1.7 mrg . for _m in sf df xf tf 60 1.7 mrg LIB2FUNCS_ALL+= ${_p}${_m}di 61 1.5 mrg . endfor 62 1.5 mrg .endfor 63 1.7 mrg 64 1.5 mrg .for _p in _float _floatun 65 1.7 mrg . for _m in sf df xf tf 66 1.7 mrg LIB2FUNCS_ALL+= ${_p}di${_m} 67 1.5 mrg . endfor 68 1.5 mrg .endfor 69 1.1 mrg 70 1.5 mrg .for _m in sf df xf 71 1.7 mrg LIB2FUNCS_ALL+= _fixuns${_m}si 72 1.5 mrg .endfor 73 1.20 matt .endif 74 1.1 mrg 75 1.1 mrg LIB2FUNCS_SHORT:=${LIB2FUNCS_ALL} 76 1.1 mrg LIB2_DIVMOD_FUNCS:=${G_LIB2_DIVMOD_FUNCS} 77 1.1 mrg .for f in ${G_LIB1ASMFUNCS}; do 78 1.1 mrg LIB2FUNCS_SHORT:=${LIB2FUNCS_SHORT:N${f}} 79 1.1 mrg LIB2_DIVMOD_FUNCS:=${LIB2_DIVMOD_FUNCS:N${f}} 80 1.1 mrg .endfor 81 1.1 mrg 82 1.1 mrg LIB2FUNCS= ${LIB2FUNCS_SHORT:=.c} 83 1.1 mrg LIB2FUNCS_ST= ${G_LIB2FUNCS_ST:=.c} 84 1.1 mrg LIB2DIVMOD= ${LIB2_DIVMOD_FUNCS:=.c} 85 1.1 mrg LIB2_EH= ${G_LIB2ADDEH:M*.c:T} 86 1.14 matt LIB2_EHASM= ${G_LIB2ADDEH:M*.S:T} 87 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 88 1.1 mrg LIB1ASMFUNCS= ${G_LIB1ASMFUNCS:=.S} 89 1.1 mrg .endif 90 1.1 mrg 91 1.19 matt DPSRCS+= ${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}.mk 92 1.1 mrg CLEANFILES+= ${LIB2FUNCS} ${LIB2FUNCS_ST} ${LIB2DIVMOD} cs-tconfig.h 93 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 94 1.1 mrg CLEANFILES+= ${LIB1ASMFUNCS} 95 1.1 mrg .endif 96 1.1 mrg 97 1.6 mrg .for file in ${G_LIB2ADD:M${GNUHOSTDIST}*:N*.c} 98 1.1 mrg BUILDSYMLINKS+= ${file} ${file:T:S/.asm$/.S/} 99 1.1 mrg .endfor 100 1.1 mrg 101 1.1 mrg # XXX 102 1.19 matt .if (${LIBGCC_MACHINE_ARCH} == "m68000" || ${LIBGCC_MACHINE_ARCH} == "m68k") 103 1.1 mrg CPICFLAGS:= 104 1.1 mrg BUILDSYMLINKS+= ${DIST}/gcc/config/m68k/fpgnulib.c fpgnulib.c 105 1.1 mrg BUILDSYMLINKS+= ${DIST}/gcc/config/m68k/fpgnulib.c xfgnulib.c 106 1.1 mrg CPPFLAGS.xfgnulib.c+=-DEXTFLOAT=1 107 1.1 mrg .endif 108 1.1 mrg 109 1.19 matt .if ${LIBGCC_MACHINE_ARCH} == "powerpc64" 110 1.1 mrg COPTS+= -mlong-double-128 111 1.1 mrg .endif 112 1.1 mrg 113 1.1 mrg ${LIB2FUNCS} ${LIB2FUNCS_ST}: ${.CURDIR}/Makefile 114 1.1 mrg ${_MKTARGET_CREATE} 115 1.1 mrg printf '#define L${.PREFIX}\n#include <libgcc2.c>\n' >${.TARGET} 116 1.1 mrg 117 1.1 mrg ${LIB2DIVMOD}: ${.CURDIR}/Makefile 118 1.1 mrg ${_MKTARGET_CREATE} 119 1.1 mrg printf '#define L${.PREFIX}\n#include <libgcc2.c>\n' >${.TARGET} 120 1.1 mrg 121 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 122 1.1 mrg ${LIB1ASMFUNCS}: ${.CURDIR}/Makefile 123 1.1 mrg ${_MKTARGET_CREATE} 124 1.1 mrg printf '#define L${.PREFIX}\n#include <${G_LIB1ASMSRC}>\n' >${.TARGET} 125 1.1 mrg .endif 126 1.1 mrg 127 1.1 mrg ${LIB2_EH:.c=.o}: 128 1.1 mrg ${_MKTARGET_COMPILE} 129 1.1 mrg ${COMPILE.c} -fexceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 130 1.1 mrg 131 1.1 mrg ${LIB2_EH:.c=.pico}: 132 1.1 mrg ${_MKTARGET_COMPILE} 133 1.1 mrg ${COMPILE.c} ${CPICFLAGS} -fexceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 134 1.1 mrg 135 1.1 mrg ${G_LIB2_DIVMOD_FUNCS:=.o}: 136 1.1 mrg ${_MKTARGET_COMPILE} 137 1.1 mrg ${COMPILE.c} -fexceptions -fnon-call-exceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 138 1.1 mrg 139 1.1 mrg ${G_LIB2_DIVMOD_FUNCS:=.pico}: 140 1.1 mrg ${_MKTARGET_COMPILE} 141 1.1 mrg ${COMPILE.c} ${CPICFLAGS} -fexceptions -fnon-call-exceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 142 1.1 mrg 143 1.1 mrg dp-bit.c: ${.CURDIR}/Makefile 144 1.1 mrg ${_MKTARGET_CREATE} 145 1.1 mrg printf '#define FLOAT\n#include <fp-bit.c>\n' >${.TARGET} 146 1.1 mrg 147 1.1 mrg # 148 1.1 mrg # Common rules. 149 1.1 mrg # 150 1.1 mrg 151 1.1 mrg .PATH: ${DIST}/gcc ${DIST}/gcc/cp ${DIST}/gcc/cp/inc ${DIST}/gcc/config \ 152 1.17 skrll ${G_LIB2ADD:H:O:u} ${G_LIB2ADDEH:H:O:u} 153 1.1 mrg 154 1.4 mrg .include "../Makefile.tconfigh" 155 1.1 mrg DPSRCS+= tconfig.h 156 1.1 mrg 157 1.16 christos .if ${MKGCC} != "no" && defined(G_UNWIND_H) && !empty(G_UNWIND_H) 158 1.9 mrg # XXX figure out why Makefile.hacks doesn't work 159 1.1 mrg BUILDSYMLINKS+= ${G_UNWIND_H} unwind.h 160 1.1 mrg DPSRCS+= unwind.h 161 1.15 msaitoh .endif 162 1.1 mrg 163 1.9 mrg # these aren't necessary but are #include'd 164 1.9 mrg FAKEHEADERS=options.h insn-flags.h insn-constants.h sysroot-suffix.h 165 1.9 mrg ${FAKEHEADERS}: 166 1.9 mrg ${_MKTARGET_CREATE} 167 1.9 mrg touch ${.TARGET} 168 1.9 mrg DPSRCS+= ${FAKEHEADERS} 169 1.9 mrg CLEANFILES+= ${FAKEHEADERS} 170 1.9 mrg 171 1.9 mrg # XXX arm hack 172 1.21 matt .if !empty(LIBGCC_MACHINE_ARCH:M*arm*) 173 1.9 mrg ${SRCS}: insn-modes.h 174 1.9 mrg # XXX XXX 175 1.9 mrg ${__DPSRCS.d}: insn-modes.h 176 1.9 mrg insn-modes.h: 177 1.9 mrg ${_MKTARGET_CREATE} 178 1.9 mrg echo "enum machine_mode { X };" > ${.TARGET} 179 1.9 mrg DPSRCS+= insn-modes.h 180 1.9 mrg CLEANFILES+= insn-modes.h 181 1.9 mrg .endif 182 1.7 mrg 183 1.9 mrg # XXX 184 1.19 matt .if defined(HAVE_GCC) && ${HAVE_GCC} == 45 && ${LIBGCC_MACHINE_ARCH} == "m68k" 185 1.9 mrg COPTS._fixunsxfdi.c+= -O0 186 1.9 mrg .endif 187