Page MenuHomeFreeBSD

D20261.id64096.diff
No OneTemporary

D20261.id64096.diff

Index: share/mk/bsd.compat.mk
===================================================================
--- share/mk/bsd.compat.mk
+++ share/mk/bsd.compat.mk
@@ -40,11 +40,62 @@
.else
LIB32CPUFLAGS= -mcpu=${COMPAT_CPUTYPE}
.endif
+
+
+# Determines linker used for 32-bit compatibility
+# Currently LLD support for PowerPC 32-bit is not complete,
+# so falling back to ld.bfd
+
+# native build
+_LIB32LD_NATIVE=/usr/bin/ld.bfd
+# cross
+_LIB32LD_CROSS=${WORLDTMP}/usr/bin/ld.bfd
+# cross with toolchain file
+_LIB32LD_CROSS_FILE=${LOCALBASE}/bin/${CROSS_BINUTILS_PREFIX}-ld.bfd
+
+.if ${_HOST_ARCH} == "powerpc64"
+LIB32LD= ${_LIB32LD_NATIVE}
+
+.elif defined(TARGET_ARCH) && "${LINKER_TYPE}" == "lld"
+.if ${TARGET_ARCH} == "powerpc64" && defined(CROSS_TOOLCHAIN)
+.if !defined(CROSS_BINUTILS_PREFIX)
+.error 32 bit binaries on PowerPC64 requires binutils linker ld.bfd. Please set CROSS_BINUTILS_PREFIX.
+.endif
+LIB32LD= ${_LIB32LD_CROSS_FILE}
+.else
+LIB32LD= ${_LIB32LD_CROSS}
+
+.endif
+.endif
+
+
+# for other unhandled cases just use the main linker
+
+# cross building
+.if defined(XLD)
+LIB32LD?=${XLD}
+.else
+LIB32LD?=${LD}
+.endif
+
+.if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \
+ (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc)
LIB32CPUFLAGS+= -m32
+.else
+LIB32CPUFLAGS+= -target powerpc-unknown-freebsd13.0
+
+.if ${LIB32LD} == "ld.bfd"
+LIB32CPUFLAGS+= -fuse-ld=bfd
+.else
+LIB32CPUFLAGS+= -fuse-ld=${LIB32LD}
+.endif
+
+.endif
+
LIB32_MACHINE= powerpc
LIB32_MACHINE_ARCH= powerpc
LIB32WMAKEFLAGS= \
- LD="${XLD} -m elf32ppc_fbsd"
+ LD="${LIB32LD} -m elf32ppc_fbsd"
.elif ${COMPAT_ARCH:Mmips64*} != ""
HAS_COMPAT=32
Index: stand/defs.mk
===================================================================
--- stand/defs.mk
+++ stand/defs.mk
@@ -34,6 +34,7 @@
UBOOTSRC= ${BOOTSRC}/uboot
ZFSSRC= ${SASRC}/zfs
LIBCSRC= ${SRCTOP}/lib/libc
+WORLDTMP= ${OBJTOP}/tmp
BOOTOBJ= ${OBJTOP}/stand
@@ -98,6 +99,10 @@
# or powerpc64.
.if ${MACHINE_ARCH} == "powerpc64"
CFLAGS+= -m32 -mcpu=powerpc
+# Use same linker used to link 32 bit binaries
+.if "${COMPILER_TYPE}" == "clang" && "${LINKER_TYPE}" == "lld"
+CFLAGS+= -fuse-ld=${LIB32LD}
+.endif
.endif
# For amd64, there's a bit of mixed bag. Some of the tree (i386, lib*32) is

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 17, 11:23 PM (2 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29858766
Default Alt Text
D20261.id64096.diff (2 KB)

Event Timeline