Skip to content

Commit

Permalink
devel/llvm16: change clang to allow -m32 on arm64
Browse files Browse the repository at this point in the history
This is a backport from upstream and will be merged to FreeBSD head
soon.  See D40943 for more info.

Sponsored by:	DARPA
  • Loading branch information
brooksdavis committed Jul 11, 2023
1 parent 2eae095 commit 3509504
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
2 changes: 1 addition & 1 deletion devel/llvm16/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
PORTNAME= llvm
DISTVERSION= 16.0.6
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= devel lang
MASTER_SITES= https://github.com/llvm/llvm-project/releases/download/llvmorg-${DISTVERSION:S/rc/-rc/}/ \
https://${PRE_}releases.llvm.org/${LLVM_RELEASE}${RCDIR}/
Expand Down
33 changes: 33 additions & 0 deletions devel/llvm16/files/patch-backport-3450272fc2
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
commit 3450272fc281979388bb845a9fffb59b42cc2e7e
Author: Jessica Clarke <jrtc27@jrtc27.com>
Date: Mon Jul 10 01:40:58 2023 +0100

[Driver][FreeBSD] Generalise lib32 handling to support arm

The current code maintains its own list of 32-bit architectures for
which there is a 64-bit FreeBSD architecture that supports it for lib32.
This is unnecessary (if it's not supported, the directory just won't
exist), and means that, when FreeBSD gains lib32 support for a new
architecture, you need an updated toolchain that knows about it.
Instead we can check for any 32-bit architecture and have forwards
compatibility.

This is motivated by FreeBSD adding support for building arm lib32
libraries on aarch64.

Co-authored-by: Mike Karels <karels@FreeBSD.org>

diff --git clang/lib/Driver/ToolChains/FreeBSD.cpp clang/lib/Driver/ToolChains/FreeBSD.cpp
index ac336598a78c..84e257741702 100644
--- clang/lib/Driver/ToolChains/FreeBSD.cpp
+++ clang/lib/Driver/ToolChains/FreeBSD.cpp
@@ -376,8 +376,7 @@ FreeBSD::FreeBSD(const Driver &D, const llvm::Triple &Triple,

// When targeting 32-bit platforms, look for '/usr/lib32/crt1.o' and fall
// back to '/usr/lib' if it doesn't exist.
- if ((Triple.getArch() == llvm::Triple::x86 || Triple.isMIPS32() ||
- Triple.isPPC32()) &&
+ if (Triple.isArch32Bit() &&
D.getVFS().exists(concat(getDriver().SysRoot, "/usr/lib32/crt1.o")))
getFilePaths().push_back(concat(getDriver().SysRoot, "/usr/lib32"));
else

0 comments on commit 3509504

Please sign in to comment.