1 1.41 mrg # $NetBSD: Makefile.inc,v 1.41 2019/04/03 02:13:56 mrg Exp $ 2 1.23 mrg 3 1.23 mrg LIBGCC_MACHINE_ARCH?=${MACHINE_ARCH:S/earmv5/earm/} 4 1.1 mrg 5 1.1 mrg .if ${MKGCC} != "no" 6 1.23 mrg .if exists(${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}/defs.mk) 7 1.23 mrg .include "${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}/defs.mk" 8 1.1 mrg .endif 9 1.1 mrg .endif 10 1.1 mrg 11 1.1 mrg UNSUPPORTED_COMPILER.clang= # defined 12 1.1 mrg 13 1.28 mrg DIST= ${GCCDIST} 14 1.1 mrg GNUHOSTDIST= ${DIST} 15 1.28 mrg GCCARCH= ${GCC_SUBDIR}/usr.bin/gcc/arch/${LIBGCC_MACHINE_ARCH} 16 1.28 mrg GCCARCHLIBGCC= ${GCC_SUBDIR}/lib/libgcc/arch/${LIBGCC_MACHINE_ARCH} 17 1.28 mrg GCCARCHXX= ${GCC_SUBDIR}/lib/libstdc++-v3/arch/${LIBGCC_MACHINE_ARCH} 18 1.1 mrg 19 1.1 mrg GCPPFLAGS= ${G_LIBGCC2_CFLAGS} ${G_USE_COLLECT2} ${G_INCLUDES} 20 1.1 mrg CPPFLAGS+= -I${.CURDIR} -I${GCCARCHLIBGCC} 21 1.1 mrg CPPFLAGS+= -I${GCCARCH} ${GCPPFLAGS:M-D*} ${GCPPFLAGS:M-I*:N-I.*} 22 1.12 mrg CPPFLAGS+= ${GCPPFLAGS:M-m*} ${GCPPFLAGS:M-f*} 23 1.3 mrg CPPFLAGS+= ${G_EXTRA_HEADERS:M/*:H:u:S/^/-I/g} 24 1.23 mrg CPPFLAGS+= -I${DIST}/libgcc -I${DIST}/libgcc/config 25 1.35 christos .if ${LIBGCC_MACHINE_ARCH} == "x86_64" 26 1.34 christos CPPFLAGS+= -I${DIST}/libgcc/config/i386 27 1.34 christos .else 28 1.34 christos CPPFLAGS+= -I${DIST}/libgcc/config/${LIBGCC_MACHINE_ARCH} 29 1.34 christos .endif 30 1.23 mrg CPPFLAGS+= -I${DIST}/gcc -I${DIST}/include -I. 31 1.37 mrg CPPFLAGS+= ${G_INTERNAL_CFLAGS:M-DHAVE_CC_TLS} 32 1.1 mrg 33 1.19 matt .if ${LIBGCC_MACHINE_ARCH} == "powerpc" || \ 34 1.19 matt ${LIBGCC_MACHINE_ARCH} == "sh3el" || \ 35 1.19 matt ${LIBGCC_MACHINE_ARCH} == "sh3eb" || \ 36 1.19 matt ${LIBGCC_MACHINE_ARCH} == "m68000" 37 1.1 mrg _TRADITIONAL_CPP= 38 1.1 mrg COMPILE.S= ${CC} ${AFLAGS} ${CPPFLAGS} -c 39 1.1 mrg .endif 40 1.1 mrg 41 1.23 mrg .if ${LIBGCC_MACHINE_ARCH} == "powerpc" 42 1.23 mrg CPPFLAGS+= -I${DIST}/gcc/config/rs6000 43 1.23 mrg .endif 44 1.23 mrg 45 1.1 mrg # 46 1.1 mrg # Old style libgcc build procedure. 47 1.1 mrg # 48 1.1 mrg 49 1.26 martin # This is copied from dist/libgcc/Makefile.in:$lib2funcs 50 1.5 mrg LIB2FUNCS_ALL= \ 51 1.5 mrg _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2 \ 52 1.23 mrg _clear_cache _trampoline __main \ 53 1.23 mrg _absvsi2 _absvdi2 _addvsi3 _addvdi3 \ 54 1.23 mrg _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 \ 55 1.23 mrg _negvsi2 _negvdi2 \ 56 1.23 mrg _ctors \ 57 1.23 mrg _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 \ 58 1.23 mrg _popcount_tab _popcountsi2 _popcountdi2 _paritysi2 _paritydi2 \ 59 1.23 mrg _powisf2 _powidf2 _powixf2 _powitf2 \ 60 1.23 mrg _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3 _divtc3 \ 61 1.26 martin _bswapsi2 _bswapdi2 _clrsbsi2 _clrsbdi2 62 1.5 mrg 63 1.21 matt .if ${LIBGCC_MACHINE_ARCH} != "coldfire" && empty(LIBGCC_MACHINE_ARCH:Mearm*) 64 1.21 matt 65 1.21 matt LIB2FUNCS_ALL+= \ 66 1.21 matt _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 67 1.21 matt 68 1.21 matt .endif 69 1.21 matt 70 1.33 mrg .if ${LIBGCC_MACHINE_ARCH} != "coldfire" && \ 71 1.33 mrg empty(LIBGCC_MACHINE_ARCH:Mearm*) && \ 72 1.36 christos empty(LIBGCC_MACHINE_ARCH:Maarch64*) && \ 73 1.33 mrg empty(LIBGCC_MACHINE_ARCH:Mmips64*) 74 1.20 matt 75 1.39 mrg EXTRA_FUNC_SIZES= sf df xf 76 1.39 mrg 77 1.40 mrg .if ${LIBGCC_MACHINE_ARCH} != "x86_64" && \ 78 1.40 mrg ${LIBGCC_MACHINE_ARCH} != "i386" && \ 79 1.41 mrg ${LIBGCC_MACHINE_ARCH} != "ia64" 80 1.39 mrg EXTRA_FUNC_SIZES+= tf 81 1.39 mrg .endif 82 1.39 mrg 83 1.5 mrg # non swfloat versions 84 1.5 mrg .for _p in _fix _fixuns 85 1.39 mrg . for _m in ${EXTRA_FUNC_SIZES} 86 1.7 mrg LIB2FUNCS_ALL+= ${_p}${_m}di 87 1.5 mrg . endfor 88 1.5 mrg .endfor 89 1.7 mrg 90 1.5 mrg .for _p in _float _floatun 91 1.39 mrg . for _m in ${EXTRA_FUNC_SIZES} 92 1.7 mrg LIB2FUNCS_ALL+= ${_p}di${_m} 93 1.5 mrg . endfor 94 1.5 mrg .endfor 95 1.1 mrg 96 1.5 mrg .for _m in sf df xf 97 1.7 mrg LIB2FUNCS_ALL+= _fixuns${_m}si 98 1.5 mrg .endfor 99 1.20 matt .endif 100 1.1 mrg 101 1.1 mrg LIB2FUNCS_SHORT:=${LIB2FUNCS_ALL} 102 1.1 mrg LIB2_DIVMOD_FUNCS:=${G_LIB2_DIVMOD_FUNCS} 103 1.1 mrg .for f in ${G_LIB1ASMFUNCS}; do 104 1.1 mrg LIB2FUNCS_SHORT:=${LIB2FUNCS_SHORT:N${f}} 105 1.1 mrg LIB2_DIVMOD_FUNCS:=${LIB2_DIVMOD_FUNCS:N${f}} 106 1.1 mrg .endfor 107 1.1 mrg 108 1.1 mrg LIB2FUNCS= ${LIB2FUNCS_SHORT:=.c} 109 1.1 mrg LIB2FUNCS_ST= ${G_LIB2FUNCS_ST:=.c} 110 1.1 mrg LIB2DIVMOD= ${LIB2_DIVMOD_FUNCS:=.c} 111 1.25 joerg .if ${HAVE_LIBGCC_EH} == "no" 112 1.27 joerg LIB2_EH= ${G_LIB2ADDEH:M*.c:T:Nunwind-dw2.c:Nunwind-dw2-fde-dip.c:Nunwind-sjlj.c:Nunwind-c.c:Nunwind-arm.c:Npr-support.c} 113 1.27 joerg LIB2_EHASM= ${G_LIB2ADDEH:M*.S:T:Nlibunwind.S} 114 1.25 joerg .else 115 1.1 mrg LIB2_EH= ${G_LIB2ADDEH:M*.c:T} 116 1.27 joerg LIB2_EHASM= ${G_LIB2ADDEH:M*.S:T} 117 1.25 joerg .endif 118 1.24 mrg 119 1.24 mrg # We have to weed out any existing func.S file that may exist 120 1.24 mrg # from the list of files we create. 121 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 122 1.24 mrg . for f in ${G_LIB1ASMFUNCS:=.S} 123 1.32 mrg . if !exists(${DIST}/libgcc/config/${MACHINE_CPU}/${f}) 124 1.24 mrg LIB1ASMFUNCS+= ${f} 125 1.24 mrg . endif 126 1.24 mrg . endfor 127 1.1 mrg .endif 128 1.1 mrg 129 1.23 mrg .if exists(${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}/defs.mk) 130 1.23 mrg DPSRCS+= ${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}/defs.mk 131 1.23 mrg .endif 132 1.1 mrg CLEANFILES+= ${LIB2FUNCS} ${LIB2FUNCS_ST} ${LIB2DIVMOD} cs-tconfig.h 133 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 134 1.1 mrg CLEANFILES+= ${LIB1ASMFUNCS} 135 1.1 mrg .endif 136 1.1 mrg 137 1.6 mrg .for file in ${G_LIB2ADD:M${GNUHOSTDIST}*:N*.c} 138 1.1 mrg BUILDSYMLINKS+= ${file} ${file:T:S/.asm$/.S/} 139 1.1 mrg .endfor 140 1.1 mrg 141 1.1 mrg # XXX 142 1.23 mrg .if (${LIBGCC_MACHINE_ARCH} == "m68000" || ${LIBGCC_MACHINE_ARCH} == "m68k" || \ 143 1.23 mrg ${LIBGCC_MACHINE_ARCH} == "coldfire") 144 1.1 mrg CPICFLAGS:= 145 1.23 mrg BUILDSYMLINKS+= ${DIST}/libgcc/config/m68k/fpgnulib.c fpgnulib.c 146 1.23 mrg BUILDSYMLINKS+= ${DIST}/libgcc/config/m68k/fpgnulib.c xfgnulib.c 147 1.23 mrg CPPFLAGS.xfgnulib.c+= -DEXTFLOAT=1 148 1.1 mrg .endif 149 1.1 mrg 150 1.19 matt .if ${LIBGCC_MACHINE_ARCH} == "powerpc64" 151 1.1 mrg COPTS+= -mlong-double-128 152 1.1 mrg .endif 153 1.1 mrg 154 1.1 mrg ${LIB2FUNCS} ${LIB2FUNCS_ST}: ${.CURDIR}/Makefile 155 1.1 mrg ${_MKTARGET_CREATE} 156 1.1 mrg printf '#define L${.PREFIX}\n#include <libgcc2.c>\n' >${.TARGET} 157 1.1 mrg 158 1.1 mrg ${LIB2DIVMOD}: ${.CURDIR}/Makefile 159 1.1 mrg ${_MKTARGET_CREATE} 160 1.1 mrg printf '#define L${.PREFIX}\n#include <libgcc2.c>\n' >${.TARGET} 161 1.1 mrg 162 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 163 1.1 mrg ${LIB1ASMFUNCS}: ${.CURDIR}/Makefile 164 1.1 mrg ${_MKTARGET_CREATE} 165 1.1 mrg printf '#define L${.PREFIX}\n#include <${G_LIB1ASMSRC}>\n' >${.TARGET} 166 1.1 mrg .endif 167 1.1 mrg 168 1.29 christos # Use dynamic sources to arrange for the C file to be the first dependency 169 1.29 christos # so ${.IMPSRC} will work. 170 1.29 christos 171 1.29 christos ${LIB2_EH:.c=.o}: $(.PREFIX).c 172 1.1 mrg ${_MKTARGET_COMPILE} 173 1.1 mrg ${COMPILE.c} -fexceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 174 1.1 mrg 175 1.29 christos ${LIB2_EH:.c=.pico}: $(.PREFIX).c 176 1.1 mrg ${_MKTARGET_COMPILE} 177 1.1 mrg ${COMPILE.c} ${CPICFLAGS} -fexceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 178 1.1 mrg 179 1.29 christos ${G_LIB2_DIVMOD_FUNCS:=.o}: $(.PREFIX).c 180 1.1 mrg ${_MKTARGET_COMPILE} 181 1.1 mrg ${COMPILE.c} -fexceptions -fnon-call-exceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 182 1.1 mrg 183 1.29 christos ${G_LIB2_DIVMOD_FUNCS:=.pico}: $(.PREFIX).c 184 1.1 mrg ${_MKTARGET_COMPILE} 185 1.1 mrg ${COMPILE.c} ${CPICFLAGS} -fexceptions -fnon-call-exceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 186 1.1 mrg 187 1.1 mrg dp-bit.c: ${.CURDIR}/Makefile 188 1.1 mrg ${_MKTARGET_CREATE} 189 1.1 mrg printf '#define FLOAT\n#include <fp-bit.c>\n' >${.TARGET} 190 1.1 mrg 191 1.1 mrg # 192 1.1 mrg # Common rules. 193 1.1 mrg # 194 1.1 mrg 195 1.1 mrg .PATH: ${DIST}/gcc ${DIST}/gcc/cp ${DIST}/gcc/cp/inc ${DIST}/gcc/config \ 196 1.32 mrg ${DIST}/libgcc/config ${DIST}/libgcc/config/${MACHINE_CPU} \ 197 1.23 mrg ${G_LIB2ADD:H:O:u} ${G_LIB2ADDEH:H:O:u} ${GCCARCHLIBGCC} 198 1.1 mrg 199 1.4 mrg .include "../Makefile.tconfigh" 200 1.1 mrg DPSRCS+= tconfig.h 201 1.1 mrg 202 1.38 mrg .include "../Makefile.gthr" 203 1.1 mrg 204 1.23 mrg EXTRA_FAKEHEADERS= options.h libgcc_tm.h 205 1.23 mrg .include "../../Makefile.hacks" 206 1.31 mrg 207 1.31 mrg # XXX insn-modes.h 208 1.31 mrg BINBACKENDOBJ!= cd ${.CURDIR}/../../../usr.bin/backend && ${PRINTOBJDIR} 209 1.31 mrg CPPFLAGS+= -I${BINBACKENDOBJ} 210