Index: share/mk/bsd.cpu.mk =================================================================== --- share/mk/bsd.cpu.mk +++ share/mk/bsd.cpu.mk @@ -122,18 +122,18 @@ . elif ${MACHINE_ARCH} == "powerpc64" _CPUCFLAGS = -mcpu=${CPUTYPE} . elif ${MACHINE_CPUARCH} == "mips" -. if ${CPUTYPE} == "mips32" -_CPUCFLAGS = -march=mips32 -. elif ${CPUTYPE} == "mips32r2" -_CPUCFLAGS = -march=mips32r2 -. elif ${CPUTYPE} == "mips64" -_CPUCFLAGS = -march=mips64 -. elif ${CPUTYPE} == "mips64r2" -_CPUCFLAGS = -march=mips64r2 -. elif ${CPUTYPE} == "mips4kc" -_CPUCFLAGS = -march=4kc -. elif ${CPUTYPE} == "mips24kc" -_CPUCFLAGS = -march=24kc +# mips[1234], mips32, mips64, and all later releases need to have mips +# preserved (releases later than r2 require external toolchain) +. if ${CPUTYPE:Mmips32*} != "" || ${CPUTYPE:Mmips64*} != "" || \ + ${CPUTYPE:Mmips[1234]} != "" +_CPUCFLAGS = -march=${CPUTYPE} +. else +# Default -march to the CPUTYPE passed in, with mips stripped off so we +# accept either mips4kc or 4kc, mostly for historical reasons +# Typical values for cores: +# 4kc, 24kc, 34kc, 74kc, 1004kc, octeon, octeon+, octeon2, octeon3, +# sb1, xlp, xlr +_CPUCFLAGS = -march=${CPUTYPE:S/^mips//} . endif . elif ${MACHINE_ARCH} == "sparc64" . if ${CPUTYPE} == "v9" @@ -254,6 +254,9 @@ MACHINE_CPU = sse3 . endif MACHINE_CPU += amd64 sse2 sse mmx +########## Mips +. elif ${MACHINE_CPUARCH} == "mips" +MACHINE_CPU = mips ########## powerpc . elif ${MACHINE_ARCH} == "powerpc" . if ${CPUTYPE} == "e500" @@ -271,9 +274,34 @@ . endif .endif -.if ${MACHINE_CPUARCH} == "mips" -CFLAGS += -G0 -.endif +# All the special-case hacks for robust external toolchain support +. if ${MACHINE_CPUARCH} == "mips" +# always add -G0 +_ABI_CFLAGS += -G0 +# Get endian right in case the default isn't correct +. if ${MACHINE_ARCH:M*el} != "" +_ABI_CFLAGS += -EL +. else +_ABI_CFLAGS += -EB +. endif +# Get ABI right in case the default is wrong +. if ${MACHINE_ARCH} == "mips" || ${MACHINE_ARCH} == "mipsel" +_ABI_CFLAGS += -mabi=32 +. elif ${MACHINE_ARCH} == "mipsn32" +_ABI_CFLAGS += -mabi=n32 +. else +_ABI_CFLAGS += -mabi=64 +. endif +# Get the default ISA correct. Kinda trick to pull off, hope this hueristic +# works out: specify it when no CPUTYPE is specified +. if !defined(CPUTYPE) || empty(CPUTYPE) +. if ${MACHINE_ARCH:Mmips64*} || ${MACHINE_ARCH} == "mipsn32" +_ABI_CFLAGS += -march=mips64 +. else +_ABI_CFLAGS += -march=mips3 +. endif +. endif +. endif ########## arm .if ${MACHINE_CPUARCH} == "arm" @@ -288,10 +316,16 @@ . if ${MACHINE_ARCH:Marmv6*} == "" MACHINE_CPU += softfp . endif +# Get endian right for external toolchains +.if ${MACHINE_ARCH} == "armeb" +_ABI_CFLAGS += -mbig-endian +.else +_ABI_CFLAGS += -mlittle-endian +.endif .if ${MACHINE_ARCH} == "armv6" # Needs to be CFLAGS not _CPUCFLAGS because it's needed for the ABI # not a nice optimization. -CFLAGS += -mfloat-abi=softfp +_ABI_CFLAGS += -mfloat-abi=softfp .endif .endif @@ -300,6 +334,8 @@ .if !defined(NO_CPU_CFLAGS) CFLAGS += ${_CPUCFLAGS} .endif +CFLAGS += ${_ABI_CFLAGS} +ACFLAGS+= ${_ABI_CFLAGS} # # Prohibit the compiler from emitting SIMD instructions. Index: sys/conf/kern.pre.mk =================================================================== --- sys/conf/kern.pre.mk +++ sys/conf/kern.pre.mk @@ -60,6 +60,7 @@ .if !defined(NO_CPU_COPTFLAGS) COPTFLAGS+= ${_CPUCFLAGS} .endif +COPTFLAGS+= ${_ABI_CFLAGS} NOSTDINC= -nostdinc INCLUDES= ${NOSTDINC} ${INCLMAGIC} -I. -I$S