1 1.56 mrg # $NetBSD: Makefile.inc,v 1.56 2025/09/17 19:08:49 mrg Exp $ 2 1.23 mrg 3 1.23 mrg LIBGCC_MACHINE_ARCH?=${MACHINE_ARCH:S/earmv5/earm/} 4 1.42 mrg GCC_MACHINE_SUBDIR=${MACHINE_CPU:C/powerpc.*/rs6000/:C/x86_64/i386/} 5 1.1 mrg 6 1.1 mrg .if ${MKGCC} != "no" 7 1.23 mrg .if exists(${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}/defs.mk) 8 1.23 mrg .include "${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}/defs.mk" 9 1.1 mrg .endif 10 1.1 mrg .endif 11 1.1 mrg 12 1.55 nat # Override libgcc_s included sources (m68k) to make it possibile to build 13 1.55 nat # all three(3) variants (hardfloat / libgcc_s softfloat / libc softfloat ). 14 1.55 nat .if ${LIBGCC_MACHINE_ARCH} == "m68k" && ${MKSOFTFLOAT} != "no" && \ 15 1.55 nat ${MKLIBCSOFTFLOAT} != "no" 16 1.55 nat EXCLUDE_FUNCS= _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 _floatex _float 17 1.55 nat EXCLUDE_FUNCS+= _double _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 _eqsf2 18 1.55 nat EXCLUDE_FUNCS+= _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2 19 1.55 nat NG_LIB1ASMFUNCS:= ${G_LIB1ASMFUNCS:${EXCLUDE_FUNCS:@f@S,$f,,@:ts:}} 20 1.55 nat 21 1.55 nat NG_LIB1ASMSRC:= ${G_LIB1ASMSRC:S,m68k/lb1sf68.S,,} 22 1.55 nat 23 1.55 nat EXCLUDE_FUNCS= _divdi3 _moddi3 _divmoddi4 _udivdi3 _umoddi3 _udivmoddi4 24 1.55 nat EXCLUDE_FUNCS+= _udiv_w_sdiv 25 1.55 nat NG_LIB2_DIVMOD_FUNCS:= ${G_LIB2_DIVMOD_FUNCS:${EXCLUDE_FUNCS:@f@S,$f,,@:ts:}} 26 1.55 nat 27 1.55 nat G_LIB1ASMFUNCS= 28 1.55 nat G_LIB1ASMSRC= 29 1.55 nat G_LIB2_DIVMOD_FUNCS= 30 1.55 nat 31 1.55 nat G_LIB1ASMFUNCS:= ${NG_LIB1ASMFUNCS} 32 1.55 nat G_LIB1ASMSRC:= ${NG_LIB1ASMSRC} 33 1.55 nat G_LIB2_DIVMOD_FUNCS:= ${NG_LIB2_DIVMOD_FUNCS} 34 1.55 nat .endif 35 1.55 nat 36 1.1 mrg UNSUPPORTED_COMPILER.clang= # defined 37 1.1 mrg 38 1.28 mrg DIST= ${GCCDIST} 39 1.1 mrg GNUHOSTDIST= ${DIST} 40 1.28 mrg GCCARCH= ${GCC_SUBDIR}/usr.bin/gcc/arch/${LIBGCC_MACHINE_ARCH} 41 1.28 mrg GCCARCHLIBGCC= ${GCC_SUBDIR}/lib/libgcc/arch/${LIBGCC_MACHINE_ARCH} 42 1.28 mrg GCCARCHXX= ${GCC_SUBDIR}/lib/libstdc++-v3/arch/${LIBGCC_MACHINE_ARCH} 43 1.1 mrg 44 1.1 mrg GCPPFLAGS= ${G_LIBGCC2_CFLAGS} ${G_USE_COLLECT2} ${G_INCLUDES} 45 1.1 mrg CPPFLAGS+= -I${.CURDIR} -I${GCCARCHLIBGCC} 46 1.1 mrg CPPFLAGS+= -I${GCCARCH} ${GCPPFLAGS:M-D*} ${GCPPFLAGS:M-I*:N-I.*} 47 1.12 mrg CPPFLAGS+= ${GCPPFLAGS:M-m*} ${GCPPFLAGS:M-f*} 48 1.3 mrg CPPFLAGS+= ${G_EXTRA_HEADERS:M/*:H:u:S/^/-I/g} 49 1.23 mrg CPPFLAGS+= -I${DIST}/libgcc -I${DIST}/libgcc/config 50 1.42 mrg CPPFLAGS+= -I${DIST}/libgcc/config/${GCC_MACHINE_SUBDIR} 51 1.23 mrg CPPFLAGS+= -I${DIST}/gcc -I${DIST}/include -I. 52 1.37 mrg CPPFLAGS+= ${G_INTERNAL_CFLAGS:M-DHAVE_CC_TLS} 53 1.1 mrg 54 1.19 matt .if ${LIBGCC_MACHINE_ARCH} == "powerpc" || \ 55 1.19 matt ${LIBGCC_MACHINE_ARCH} == "sh3el" || \ 56 1.19 matt ${LIBGCC_MACHINE_ARCH} == "sh3eb" || \ 57 1.48 mrg ${LIBGCC_MACHINE_ARCH} == "m68000" || \ 58 1.48 mrg ${LIBGCC_MACHINE_ARCH} == "aarch64" || \ 59 1.48 mrg ${LIBGCC_MACHINE_ARCH} == "aarch64eb" 60 1.1 mrg _TRADITIONAL_CPP= 61 1.48 mrg COMPILE.S= ${CC} ${AFLAGS} ${CPPFLAGS} ${CPPFLAGS.${.IMPSRC:T}} -c 62 1.1 mrg .endif 63 1.1 mrg 64 1.23 mrg .if ${LIBGCC_MACHINE_ARCH} == "powerpc" 65 1.23 mrg CPPFLAGS+= -I${DIST}/gcc/config/rs6000 66 1.23 mrg .endif 67 1.23 mrg 68 1.1 mrg # 69 1.1 mrg # Old style libgcc build procedure. 70 1.1 mrg # 71 1.1 mrg 72 1.26 martin # This is copied from dist/libgcc/Makefile.in:$lib2funcs 73 1.5 mrg LIB2FUNCS_ALL= \ 74 1.5 mrg _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2 \ 75 1.23 mrg _clear_cache _trampoline __main \ 76 1.23 mrg _absvsi2 _absvdi2 _addvsi3 _addvdi3 \ 77 1.23 mrg _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 \ 78 1.23 mrg _negvsi2 _negvdi2 \ 79 1.23 mrg _ctors \ 80 1.23 mrg _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 \ 81 1.23 mrg _popcount_tab _popcountsi2 _popcountdi2 _paritysi2 _paritydi2 \ 82 1.23 mrg _powisf2 _powidf2 _powixf2 _powitf2 \ 83 1.23 mrg _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3 _divtc3 \ 84 1.26 martin _bswapsi2 _bswapdi2 _clrsbsi2 _clrsbdi2 85 1.5 mrg 86 1.21 matt .if ${LIBGCC_MACHINE_ARCH} != "coldfire" && empty(LIBGCC_MACHINE_ARCH:Mearm*) 87 1.21 matt 88 1.21 matt LIB2FUNCS_ALL+= \ 89 1.21 matt _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 90 1.21 matt 91 1.21 matt .endif 92 1.21 matt 93 1.33 mrg .if ${LIBGCC_MACHINE_ARCH} != "coldfire" && \ 94 1.33 mrg empty(LIBGCC_MACHINE_ARCH:Mearm*) && \ 95 1.36 christos empty(LIBGCC_MACHINE_ARCH:Maarch64*) && \ 96 1.51 christos empty(LIBGCC_MACHINE_ARCH:Mmips64*) && \ 97 1.51 christos empty(LIBGCC_MACHINE_ARCH:Mmipsn64*) 98 1.20 matt 99 1.39 mrg EXTRA_FUNC_SIZES= sf df xf 100 1.39 mrg 101 1.40 mrg .if ${LIBGCC_MACHINE_ARCH} != "x86_64" && \ 102 1.40 mrg ${LIBGCC_MACHINE_ARCH} != "i386" && \ 103 1.41 mrg ${LIBGCC_MACHINE_ARCH} != "ia64" 104 1.39 mrg EXTRA_FUNC_SIZES+= tf 105 1.39 mrg .endif 106 1.39 mrg 107 1.5 mrg # non swfloat versions 108 1.5 mrg .for _p in _fix _fixuns 109 1.39 mrg . for _m in ${EXTRA_FUNC_SIZES} 110 1.7 mrg LIB2FUNCS_ALL+= ${_p}${_m}di 111 1.5 mrg . endfor 112 1.5 mrg .endfor 113 1.7 mrg 114 1.5 mrg .for _p in _float _floatun 115 1.39 mrg . for _m in ${EXTRA_FUNC_SIZES} 116 1.7 mrg LIB2FUNCS_ALL+= ${_p}di${_m} 117 1.5 mrg . endfor 118 1.5 mrg .endfor 119 1.1 mrg 120 1.5 mrg .for _m in sf df xf 121 1.7 mrg LIB2FUNCS_ALL+= _fixuns${_m}si 122 1.5 mrg .endfor 123 1.20 matt .endif 124 1.1 mrg 125 1.1 mrg LIB2FUNCS_SHORT:=${LIB2FUNCS_ALL} 126 1.1 mrg LIB2_DIVMOD_FUNCS:=${G_LIB2_DIVMOD_FUNCS} 127 1.1 mrg .for f in ${G_LIB1ASMFUNCS}; do 128 1.1 mrg LIB2FUNCS_SHORT:=${LIB2FUNCS_SHORT:N${f}} 129 1.1 mrg LIB2_DIVMOD_FUNCS:=${LIB2_DIVMOD_FUNCS:N${f}} 130 1.1 mrg .endfor 131 1.1 mrg 132 1.1 mrg LIB2FUNCS= ${LIB2FUNCS_SHORT:=.c} 133 1.45 mrg _LIB2FUNCS= ${G_LIB2FUNCS_ST} 134 1.45 mrg .for _f in ${LIB2FUNCS_EXCLUDE} 135 1.45 mrg _LIB2FUNCS= ${_LIB2FUNCS:N${_f}} 136 1.46 mrg .endfor 137 1.45 mrg LIB2FUNCS_ST= ${_LIB2FUNCS:=.c} 138 1.1 mrg LIB2DIVMOD= ${LIB2_DIVMOD_FUNCS:=.c} 139 1.25 joerg .if ${HAVE_LIBGCC_EH} == "no" 140 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} 141 1.27 joerg LIB2_EHASM= ${G_LIB2ADDEH:M*.S:T:Nlibunwind.S} 142 1.25 joerg .else 143 1.1 mrg LIB2_EH= ${G_LIB2ADDEH:M*.c:T} 144 1.27 joerg LIB2_EHASM= ${G_LIB2ADDEH:M*.S:T} 145 1.44 mgorny 146 1.44 mgorny INCSDIR= /usr/include 147 1.44 mgorny # originally copied from unwind-*.h 148 1.44 mgorny INCS+= unwind.h 149 1.25 joerg .endif 150 1.24 mrg 151 1.24 mrg # We have to weed out any existing func.S file that may exist 152 1.24 mrg # from the list of files we create. 153 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 154 1.24 mrg . for f in ${G_LIB1ASMFUNCS:=.S} 155 1.42 mrg . if !exists(${DIST}/libgcc/config/${GCC_MACHINE_SUBDIR}/${f}) 156 1.24 mrg LIB1ASMFUNCS+= ${f} 157 1.24 mrg . endif 158 1.24 mrg . endfor 159 1.1 mrg .endif 160 1.1 mrg 161 1.23 mrg .if exists(${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}/defs.mk) 162 1.23 mrg DPSRCS+= ${.CURDIR}/../arch/${LIBGCC_MACHINE_ARCH}/defs.mk 163 1.23 mrg .endif 164 1.1 mrg CLEANFILES+= ${LIB2FUNCS} ${LIB2FUNCS_ST} ${LIB2DIVMOD} cs-tconfig.h 165 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 166 1.1 mrg CLEANFILES+= ${LIB1ASMFUNCS} 167 1.1 mrg .endif 168 1.1 mrg 169 1.6 mrg .for file in ${G_LIB2ADD:M${GNUHOSTDIST}*:N*.c} 170 1.1 mrg BUILDSYMLINKS+= ${file} ${file:T:S/.asm$/.S/} 171 1.1 mrg .endfor 172 1.1 mrg 173 1.1 mrg # XXX 174 1.23 mrg .if (${LIBGCC_MACHINE_ARCH} == "m68000" || ${LIBGCC_MACHINE_ARCH} == "m68k" || \ 175 1.23 mrg ${LIBGCC_MACHINE_ARCH} == "coldfire") 176 1.1 mrg CPICFLAGS:= 177 1.23 mrg BUILDSYMLINKS+= ${DIST}/libgcc/config/m68k/fpgnulib.c fpgnulib.c 178 1.23 mrg BUILDSYMLINKS+= ${DIST}/libgcc/config/m68k/fpgnulib.c xfgnulib.c 179 1.23 mrg CPPFLAGS.xfgnulib.c+= -DEXTFLOAT=1 180 1.54 nat . if ${MKLIBCSOFTFLOAT} != "no" 181 1.54 nat CPPFLAGS.fpgnulib.c+=-DLIBCSOFTFLOAT=1 182 1.54 nat CPPFLAGS.xfgnulib.c+=-DLIBCSOFTFLOAT=1 183 1.54 nat . endif 184 1.1 mrg .endif 185 1.1 mrg 186 1.1 mrg ${LIB2FUNCS} ${LIB2FUNCS_ST}: ${.CURDIR}/Makefile 187 1.1 mrg ${_MKTARGET_CREATE} 188 1.1 mrg printf '#define L${.PREFIX}\n#include <libgcc2.c>\n' >${.TARGET} 189 1.1 mrg 190 1.1 mrg ${LIB2DIVMOD}: ${.CURDIR}/Makefile 191 1.1 mrg ${_MKTARGET_CREATE} 192 1.1 mrg printf '#define L${.PREFIX}\n#include <libgcc2.c>\n' >${.TARGET} 193 1.1 mrg 194 1.1 mrg .if !empty(G_LIB1ASMFUNCS) 195 1.1 mrg ${LIB1ASMFUNCS}: ${.CURDIR}/Makefile 196 1.1 mrg ${_MKTARGET_CREATE} 197 1.1 mrg printf '#define L${.PREFIX}\n#include <${G_LIB1ASMSRC}>\n' >${.TARGET} 198 1.1 mrg .endif 199 1.1 mrg 200 1.48 mrg .if ${LIB} == "gcc" && \ 201 1.48 mrg (${LIBGCC_MACHINE_ARCH} == "aarch64" || \ 202 1.49 mrg ${LIBGCC_MACHINE_ARCH} == "aarch64eb") # { 203 1.48 mrg # XXX lse.S objects are placed directly into "libgcc-objects" for GCC, and 204 1.48 mrg # are not pulled out by mknative-gcc easily. 205 1.48 mrg . for s in 1 2 4 8 16 206 1.52 mrg . for m in 1 2 3 4 5 207 1.48 mrg . for n in cas 208 1.48 mrg LSE_NAMES+= ${n}_${s}_${m} 209 1.48 mrg CPPFLAGS.${n}_${s}_${m}+= -DL_${n} -DSIZE=${s} -DMODEL=${m} 210 1.48 mrg . endfor 211 1.48 mrg . endfor 212 1.48 mrg . endfor 213 1.48 mrg 214 1.48 mrg . for s in 1 2 4 8 215 1.52 mrg . for m in 1 2 3 4 5 216 1.48 mrg . for n in swp ldadd ldclr ldeor ldset 217 1.48 mrg LSE_NAMES+= ${n}_${s}_${m} 218 1.48 mrg CPPFLAGS.${n}_${s}_${m}+= -DL_${n} -DSIZE=${s} -DMODEL=${m} 219 1.48 mrg . endfor 220 1.48 mrg . endfor 221 1.48 mrg . endfor 222 1.48 mrg 223 1.48 mrg LSE_SRC= ${GNUHOSTDIST}/libgcc/config/aarch64/lse.S 224 1.48 mrg 225 1.48 mrg ${LSE_NAMES:=.o}: ${LSE_SRC} Makefile 226 1.48 mrg ${_MKTARGET_COMPILE} 227 1.48 mrg ${COMPILE.S} ${CPPFLAGS.${.TARGET:T:.o=}} -o ${.TARGET} ${LSE_SRC} 228 1.48 mrg 229 1.50 rin ${LSE_NAMES:=.go}: ${LSE_SRC} Makefile 230 1.50 rin ${_MKTARGET_COMPILE} 231 1.50 rin ${COMPILE.S} ${DEBUGFLAGS} ${CPPFLAGS.${.TARGET:T:.go=}} -o ${.TARGET} \ 232 1.50 rin ${LSE_SRC} 233 1.50 rin 234 1.48 mrg # lse-init.c currently compiles to nothing for us 235 1.48 mrg G_LIB2ADD+= ${GNUHOSTDIST}/libgcc/config/aarch64/lse-init.c 236 1.48 mrg 237 1.48 mrg .endif # } arm64 238 1.48 mrg 239 1.53 mrg .if (${LIBGCC_MACHINE_ARCH} == "x86_64" || \ 240 1.53 mrg ${LIBGCC_MACHINE_ARCH} == "i386") # { 241 1.53 mrg 242 1.53 mrg .if ${LIBGCC_MACHINE_ARCH} == "x86_64" 243 1.53 mrg MSSE_FILES= fixhfti.c fixunshfti.c floattihf.c floatunstihf.c 244 1.53 mrg .endif 245 1.53 mrg 246 1.56 mrg .if ${LIBGCC_MACHINE_ARCH} == "i386" # { 247 1.56 mrg MSSE_FILES= \ 248 1.56 mrg extendhfsf2.c \ 249 1.56 mrg extendhfdf2.c \ 250 1.56 mrg extendhftf2.c \ 251 1.56 mrg extendhfxf2.c \ 252 1.56 mrg extendbfsf2.c \ 253 1.56 mrg truncsfhf2.c \ 254 1.56 mrg truncdfhf2.c \ 255 1.56 mrg truncxfhf2.c \ 256 1.56 mrg trunctfhf2.c \ 257 1.56 mrg truncsfbf2.c \ 258 1.56 mrg truncdfbf2.c \ 259 1.56 mrg truncxfbf2.c \ 260 1.56 mrg trunctfbf2.c \ 261 1.56 mrg trunchfbf2.c \ 262 1.56 mrg floatbitintbf.c \ 263 1.56 mrg floatbitinthf.c \ 264 1.56 mrg eqhf2.c \ 265 1.56 mrg _divhc3.c \ 266 1.56 mrg _mulhc3.c \ 267 1.56 mrg _hf_to_sd.c\ 268 1.56 mrg _hf_to_dd.c \ 269 1.56 mrg _hf_to_td.c \ 270 1.56 mrg _sd_to_hf.c \ 271 1.56 mrg _dd_to_hf.c \ 272 1.56 mrg _td_to_hf.c 273 1.53 mrg .endif # } i386 274 1.53 mrg 275 1.53 mrg .for _f in ${MSSE_FILES} 276 1.53 mrg COPTS.${_f}+= -msse2 277 1.53 mrg .endfor 278 1.53 mrg 279 1.53 mrg .endif # } x86 280 1.53 mrg 281 1.29 christos # Use dynamic sources to arrange for the C file to be the first dependency 282 1.29 christos # so ${.IMPSRC} will work. 283 1.29 christos 284 1.29 christos ${LIB2_EH:.c=.o}: $(.PREFIX).c 285 1.1 mrg ${_MKTARGET_COMPILE} 286 1.1 mrg ${COMPILE.c} -fexceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 287 1.1 mrg 288 1.29 christos ${LIB2_EH:.c=.pico}: $(.PREFIX).c 289 1.1 mrg ${_MKTARGET_COMPILE} 290 1.1 mrg ${COMPILE.c} ${CPICFLAGS} -fexceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 291 1.1 mrg 292 1.29 christos ${G_LIB2_DIVMOD_FUNCS:=.o}: $(.PREFIX).c 293 1.1 mrg ${_MKTARGET_COMPILE} 294 1.1 mrg ${COMPILE.c} -fexceptions -fnon-call-exceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 295 1.1 mrg 296 1.29 christos ${G_LIB2_DIVMOD_FUNCS:=.pico}: $(.PREFIX).c 297 1.1 mrg ${_MKTARGET_COMPILE} 298 1.1 mrg ${COMPILE.c} ${CPICFLAGS} -fexceptions -fnon-call-exceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} 299 1.1 mrg 300 1.42 mrg CPPFLAGS.fp-bit.c+= -DFLOAT=1 301 1.1 mrg dp-bit.c: ${.CURDIR}/Makefile 302 1.1 mrg ${_MKTARGET_CREATE} 303 1.42 mrg printf '#include <fp-bit.c>\n' >${.TARGET} 304 1.1 mrg 305 1.1 mrg # 306 1.1 mrg # Common rules. 307 1.1 mrg # 308 1.1 mrg 309 1.1 mrg .PATH: ${DIST}/gcc ${DIST}/gcc/cp ${DIST}/gcc/cp/inc ${DIST}/gcc/config \ 310 1.42 mrg ${DIST}/libgcc/config ${DIST}/libgcc/config/${GCC_MACHINE_SUBDIR} \ 311 1.23 mrg ${G_LIB2ADD:H:O:u} ${G_LIB2ADDEH:H:O:u} ${GCCARCHLIBGCC} 312 1.1 mrg 313 1.4 mrg .include "../Makefile.tconfigh" 314 1.1 mrg DPSRCS+= tconfig.h 315 1.1 mrg 316 1.38 mrg .include "../Makefile.gthr" 317 1.1 mrg 318 1.23 mrg EXTRA_FAKEHEADERS= options.h libgcc_tm.h 319 1.23 mrg .include "../../Makefile.hacks" 320 1.31 mrg 321 1.31 mrg # XXX insn-modes.h 322 1.31 mrg BINBACKENDOBJ!= cd ${.CURDIR}/../../../usr.bin/backend && ${PRINTOBJDIR} 323 1.31 mrg CPPFLAGS+= -I${BINBACKENDOBJ} 324 1.47 mrg 325 1.47 mrg #.if !empty(LIBGCC_MACHINE_ARCH:Mearm*) 326 1.47 mrg COPTS.unwind-dw2.c+= -Wno-discarded-qualifiers 327 1.47 mrg #.endif 328