1 1.35 martin # $NetBSD: Makefile.inc,v 1.35 2017/07/23 09:50:54 martin Exp $ 2 1.1 joerg 3 1.1 joerg COMPILER_RT_SRCDIR= ${NETBSDSRCDIR}/sys/external/bsd/compiler_rt/dist 4 1.1 joerg 5 1.25 joerg .if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64" 6 1.15 joerg COMPILER_RT_CPU_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/ppc 7 1.15 joerg COMPILER_RT_ARCH_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/ppc 8 1.1 joerg .else 9 1.24 matt COMPILER_RT_CPU_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/${LIBC_MACHINE_CPU} 10 1.16 matt COMPILER_RT_ARCH_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/${LIBC_MACHINE_ARCH} 11 1.1 joerg .endif 12 1.1 joerg 13 1.1 joerg .PATH: ${COMPILER_RT_CPU_DIR} 14 1.1 joerg .PATH: ${COMPILER_RT_ARCH_DIR} 15 1.15 joerg .PATH: ${COMPILER_RT_SRCDIR}/lib/builtins 16 1.4 joerg .PATH: ${COMPILER_RT_SRCDIR}/lib/profile 17 1.1 joerg 18 1.1 joerg # Complex support needs parts of libm 19 1.1 joerg #GENERIC_SRCS+= 20 1.1 joerg # mulxc3.c \ 21 1.1 joerg # mulsc3.c \ 22 1.1 joerg # divxc3.c \ 23 1.1 joerg # divdc3.c \ 24 1.1 joerg # divsc3.c 25 1.1 joerg 26 1.21 joerg # Implemented on top of our atomic interface. 27 1.21 joerg #GENERIC_SRCS+= atomic.c 28 1.2 joerg 29 1.10 joerg .if ${HAVE_LIBGCC_EH} == "no" 30 1.2 joerg GENERIC_SRCS+= \ 31 1.2 joerg gcc_personality_v0.c 32 1.6 joerg .endif 33 1.2 joerg 34 1.35 martin GENERIC_SRCS+= \ 35 1.35 martin absvsi2.c \ 36 1.35 martin absvti2.c \ 37 1.35 martin addvsi3.c \ 38 1.35 martin addvti3.c \ 39 1.35 martin ashlti3.c \ 40 1.35 martin ashrti3.c \ 41 1.35 martin clzti2.c \ 42 1.35 martin cmpti2.c \ 43 1.35 martin ctzti2.c \ 44 1.35 martin divti3.c \ 45 1.35 martin ffsti2.c \ 46 1.35 martin fixsfdi.c \ 47 1.35 martin fixdfdi.c \ 48 1.35 martin fixunsdfdi.c \ 49 1.35 martin fixunsdfsi.c \ 50 1.35 martin fixunssfdi.c \ 51 1.35 martin fixunssfsi.c \ 52 1.35 martin fixunsxfdi.c \ 53 1.35 martin fixunsxfsi.c \ 54 1.35 martin int_util.c \ 55 1.35 martin lshrti3.c \ 56 1.35 martin modti3.c \ 57 1.35 martin muldc3.c \ 58 1.35 martin mulosi4.c \ 59 1.35 martin muloti4.c \ 60 1.35 martin multi3.c \ 61 1.35 martin mulvsi3.c \ 62 1.35 martin mulvti3.c \ 63 1.35 martin negti2.c \ 64 1.35 martin negvsi2.c \ 65 1.35 martin negvti2.c \ 66 1.35 martin paritysi2.c \ 67 1.35 martin parityti2.c \ 68 1.35 martin popcountsi2.c \ 69 1.35 martin popcountti2.c \ 70 1.35 martin subvsi3.c \ 71 1.35 martin subvti3.c \ 72 1.35 martin ucmpti2.c \ 73 1.35 martin udivmodti4.c \ 74 1.35 martin udivti3.c \ 75 1.35 martin umodti3.c 76 1.35 martin 77 1.35 martin # only used for machines using IEEE 754 floating point formats 78 1.35 martin .if ${MACHINE_ARCH} != "vax" 79 1.35 martin 80 1.8 joerg .if 0 81 1.2 joerg # Conflicts with soft-float 82 1.2 joerg GENERIC_SRCS+= \ 83 1.2 joerg comparedf2.c \ 84 1.3 joerg comparesf2.c \ 85 1.3 joerg adddf3.c \ 86 1.3 joerg addsf3.c \ 87 1.23 joerg addtf3.c \ 88 1.3 joerg divdf3.c \ 89 1.3 joerg divsf3.c \ 90 1.23 joerg divtf3.c \ 91 1.3 joerg extendsfdf2.c \ 92 1.23 joerg extendsftf2.c \ 93 1.23 joerg extenddftf2.c \ 94 1.11 joerg fixdfsi.c \ 95 1.3 joerg fixdfti.c \ 96 1.3 joerg fixsfsi.c \ 97 1.3 joerg fixsfti.c \ 98 1.3 joerg floatsidf.c \ 99 1.3 joerg floatsisf.c \ 100 1.7 joerg floatunsidf.c \ 101 1.7 joerg floatunsisf.c \ 102 1.3 joerg muldf3.c \ 103 1.3 joerg mulsf3.c \ 104 1.23 joerg multf3.c \ 105 1.3 joerg subdf3.c \ 106 1.3 joerg subsf3.c \ 107 1.23 joerg subtf3.c \ 108 1.23 joerg truncdfsf2.c \ 109 1.23 joerg trunctfdf2.c \ 110 1.23 joerg trunctfsf2.c 111 1.2 joerg .endif 112 1.2 joerg 113 1.35 martin GENERIC_SRCS+= \ 114 1.1 joerg floatdidf.c \ 115 1.1 joerg floatdisf.c \ 116 1.1 joerg floatdixf.c \ 117 1.1 joerg floatundidf.c \ 118 1.1 joerg floatundisf.c \ 119 1.1 joerg floatundixf.c \ 120 1.1 joerg negdf2.c \ 121 1.1 joerg negsf2.c \ 122 1.1 joerg powidf2.c \ 123 1.1 joerg powisf2.c \ 124 1.1 joerg powitf2.c \ 125 1.35 martin powixf2.c 126 1.35 martin 127 1.35 martin .endif # IEEE 754 only machines 128 1.1 joerg 129 1.31 martin .if ${MACHINE_ARCH} != "m68k" 130 1.31 martin GENERIC_SRCS+= \ 131 1.31 martin fixxfdi.c 132 1.31 martin .endif 133 1.31 martin 134 1.31 martin 135 1.22 matt .if ${MACHINE_ARCH} != "aarch64" 136 1.22 matt GENERIC_SRCS+= \ 137 1.22 matt fixunsdfti.c \ 138 1.22 matt fixunssfti.c \ 139 1.22 matt fixunsxfti.c \ 140 1.22 matt fixxfti.c \ 141 1.22 matt floattidf.c \ 142 1.22 matt floattisf.c \ 143 1.22 matt floattixf.c \ 144 1.22 matt floatuntidf.c \ 145 1.22 matt floatuntisf.c \ 146 1.22 matt floatuntixf.c 147 1.22 matt .endif 148 1.22 matt 149 1.22 matt # These have h/w instructions which are always used. 150 1.27 matt .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "aarch64" \ 151 1.27 matt && ${LIBC_MACHINE_CPU} != "powerpc" && ${LIBC_MACHINE_CPU} != "or1k" 152 1.26 matt GENERIC_SRCS+= \ 153 1.26 matt clzsi2.c 154 1.26 matt .endif 155 1.26 matt 156 1.26 matt # These have h/w instructions which are always used. 157 1.27 matt .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_ARCH} != "vax" \ 158 1.27 matt && ${LIBC_MACHINE_CPU} != "aarch64" && ${LIBC_MACHINE_CPU} != "powerpc" \ 159 1.27 matt && ${LIBC_MACHINE_CPU} != "or1k" 160 1.27 matt GENERIC_SRCS+= \ 161 1.27 matt ctzsi2.c 162 1.27 matt .endif 163 1.27 matt 164 1.27 matt # These have h/w instructions which are always used. 165 1.26 matt .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "powerpc" \ 166 1.24 matt && ${LIBC_MACHINE_CPU} != "aarch64" && ${LIBC_MACHINE_ARCH} != "vax" 167 1.22 matt GENERIC_SRCS+= \ 168 1.22 matt divmodsi4.c \ 169 1.22 matt divsi3.c \ 170 1.22 matt modsi3.c \ 171 1.22 matt udivmodsi4.c \ 172 1.22 matt umodsi3.c 173 1.22 matt 174 1.24 matt . if ${LIBC_MACHINE_CPU} != "sh3" 175 1.17 uwe # On sh3 __udivsi3 is gcc "millicode" with special calling convention 176 1.17 uwe # (less registers clobbered than usual). Each DSO that needs it gets 177 1.17 uwe # its own hidden copy from libgcc.a. 178 1.17 uwe GENERIC_SRCS+= \ 179 1.17 uwe udivsi3.c 180 1.22 matt . endif 181 1.17 uwe .endif 182 1.17 uwe 183 1.22 matt 184 1.4 joerg GENERIC_SRCS+= \ 185 1.5 matt absvdi2.c \ 186 1.5 matt addvdi3.c \ 187 1.5 matt mulodi4.c \ 188 1.5 matt mulvdi3.c \ 189 1.5 matt negvdi2.c \ 190 1.5 matt paritydi2.c \ 191 1.5 matt popcountdi2.c \ 192 1.5 matt subvdi3.c 193 1.5 matt 194 1.22 matt # These have h/w instructions which are always used. 195 1.24 matt .if ${LIBC_MACHINE_ARCH} != "alpha" && ${LIBC_MACHINE_CPU} != "powerpc64" \ 196 1.27 matt && ${LIBC_MACHINE_ARCH} != "aarch64" && ${LIBC_MACHINE_CPU} != "or1k" 197 1.22 matt GENERIC_SRCS+= \ 198 1.22 matt clzdi2.c \ 199 1.22 matt ctzdi2.c \ 200 1.22 matt ffsdi2.c 201 1.22 matt .endif 202 1.22 matt 203 1.22 matt # Don't need these on 64-bit machines. 204 1.12 joerg .if empty(LIBC_MACHINE_ARCH:M*64*) && ${LIBC_MACHINE_ARCH} != "alpha" 205 1.5 matt GENERIC_SRCS+= \ 206 1.5 matt cmpdi2.c \ 207 1.5 matt ashldi3.c \ 208 1.5 matt ashrdi3.c \ 209 1.5 matt divdi3.c \ 210 1.5 matt divmoddi4.c \ 211 1.5 matt lshrdi3.c \ 212 1.5 matt moddi3.c \ 213 1.5 matt muldi3.c \ 214 1.5 matt negdi2.c \ 215 1.5 matt ucmpdi2.c \ 216 1.5 matt udivdi3.c \ 217 1.5 matt udivmoddi4.c \ 218 1.5 matt umoddi3.c 219 1.5 matt .endif 220 1.5 matt 221 1.5 matt GENERIC_SRCS+= \ 222 1.4 joerg GCDAProfiling.c \ 223 1.18 joerg InstrProfiling.c \ 224 1.18 joerg InstrProfilingBuffer.c \ 225 1.18 joerg InstrProfilingFile.c \ 226 1.28 joerg InstrProfilingPlatformLinux.c \ 227 1.28 joerg InstrProfilingUtil.c \ 228 1.28 joerg InstrProfilingValue.c \ 229 1.28 joerg InstrProfilingWriter.c 230 1.28 joerg 231 1.29 adam .if ${MKPROFILE} != "no" 232 1.28 joerg POBJS+= InstrProfilingRuntime.po 233 1.29 adam .endif 234 1.4 joerg 235 1.25 joerg .if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64" 236 1.1 joerg GENERIC_SRCS+= \ 237 1.1 joerg fixtfdi.c \ 238 1.1 joerg fixunstfdi.c \ 239 1.1 joerg floatditf.c \ 240 1.1 joerg floatunditf.c \ 241 1.1 joerg gcc_qadd.c \ 242 1.1 joerg gcc_qdiv.c \ 243 1.1 joerg gcc_qmul.c \ 244 1.1 joerg gcc_qsub.c 245 1.1 joerg .endif 246 1.1 joerg 247 1.24 matt .if ${LIBC_MACHINE_CPU} == "aarch64" 248 1.22 matt GENERIC_SRCS+= \ 249 1.22 matt clear_cache.c 250 1.22 matt .endif 251 1.22 matt 252 1.34 joerg .if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64" 253 1.34 joerg GENERIC_SRCS+= \ 254 1.34 joerg clear_cache.c 255 1.34 joerg .endif 256 1.34 joerg 257 1.33 joerg .if ${LIBC_MACHINE_ARCH} == "sparc" || ${LIBC_MACHINE_ARCH} == "sparc64" 258 1.32 joerg GENERIC_SRCS+= \ 259 1.32 joerg clear_cache.c 260 1.32 joerg .endif 261 1.32 joerg 262 1.24 matt .if ${LIBC_MACHINE_CPU} == "arm" 263 1.2 joerg .if !empty(LIBC_MACHINE_ARCH:Mearm*) 264 1.2 joerg GENERIC_SRCS+= \ 265 1.2 joerg aeabi_idivmod.S \ 266 1.2 joerg aeabi_ldivmod.S \ 267 1.2 joerg aeabi_uidivmod.S \ 268 1.2 joerg aeabi_uldivmod.S 269 1.2 joerg .endif 270 1.13 joerg GENERIC_SRCS+= \ 271 1.13 joerg clear_cache.c 272 1.9 joerg # Not yet, overlaps with softfloat 273 1.9 joerg # aeabi_dcmp.S \ 274 1.9 joerg # aeabi_fcmp.S 275 1.3 joerg # Not yet, requires ARMv6 276 1.3 joerg #GENERIC_SRCS+= \ 277 1.3 joerg # bswapdi2.S \ 278 1.3 joerg # bswapsi2.S 279 1.2 joerg .endif 280 1.2 joerg 281 1.1 joerg .for src in ${GENERIC_SRCS} 282 1.1 joerg . if exists(${COMPILER_RT_CPU_DIR}/${src:R}.S) || \ 283 1.1 joerg exists(${COMPILER_RT_ARCH_DIR}/${src:R}.S) 284 1.1 joerg SRCS+= ${src:R}.S 285 1.1 joerg . else 286 1.1 joerg SRCS+= ${src} 287 1.19 joerg . if ${src:E} != "cc" 288 1.2 joerg COPTS.${src}+= -Wno-missing-prototypes \ 289 1.2 joerg -Wno-old-style-definition \ 290 1.2 joerg -Wno-strict-prototypes \ 291 1.20 joerg -Wno-uninitialized \ 292 1.20 joerg -Wno-cast-qual 293 1.19 joerg . endif 294 1.1 joerg . endif 295 1.30 martin .if ${MKSOFTFLOAT:Uno} != "no" 296 1.30 martin COPTS.${src}+= -D__SOFT_FP__ 297 1.30 martin .endif 298 1.1 joerg .endfor 299