Skip to content

Commit 7cfe32d

Browse files
authored
[Driver] Hook up Haiku ARM support (#67222)
1 parent 7cc1bfa commit 7cfe32d

File tree

6 files changed

+17
-2
lines changed

6 files changed

+17
-2
lines changed

clang/lib/Basic/Targets.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
219219
return std::make_unique<OpenBSDTargetInfo<ARMleTargetInfo>>(Triple, Opts);
220220
case llvm::Triple::RTEMS:
221221
return std::make_unique<RTEMSTargetInfo<ARMleTargetInfo>>(Triple, Opts);
222+
case llvm::Triple::Haiku:
223+
return std::make_unique<HaikuTargetInfo<ARMleTargetInfo>>(Triple, Opts);
222224
case llvm::Triple::NaCl:
223225
return std::make_unique<NaClTargetInfo<ARMleTargetInfo>>(Triple, Opts);
224226
case llvm::Triple::Win32:

clang/lib/Basic/Targets/ARM.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ ARMTargetInfo::ARMTargetInfo(const llvm::Triple &Triple,
257257
bool IsFreeBSD = Triple.isOSFreeBSD();
258258
bool IsOpenBSD = Triple.isOSOpenBSD();
259259
bool IsNetBSD = Triple.isOSNetBSD();
260+
bool IsHaiku = Triple.isOSHaiku();
260261

261262
// FIXME: the isOSBinFormatMachO is a workaround for identifying a Darwin-like
262263
// environment where size_t is `unsigned long` rather than `unsigned int`
@@ -323,7 +324,7 @@ ARMTargetInfo::ARMTargetInfo(const llvm::Triple &Triple,
323324
default:
324325
if (IsNetBSD)
325326
setABI("apcs-gnu");
326-
else if (IsFreeBSD || IsOpenBSD)
327+
else if (IsFreeBSD || IsOpenBSD || IsHaiku)
327328
setABI("aapcs-linux");
328329
else
329330
setABI("aapcs");

clang/lib/Driver/ToolChains/Arch/ARM.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ arm::FloatABI arm::getDefaultFloatABI(const llvm::Triple &Triple) {
404404
}
405405
break;
406406

407+
case llvm::Triple::Haiku:
407408
case llvm::Triple::OpenBSD:
408409
return FloatABI::SoftFP;
409410

clang/test/Driver/arm-abi.c

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
// RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s
3434
// RUN: %clang -target arm--openbsd- %s -### -o %t.o 2>&1 \
3535
// RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s
36+
// RUN: %clang -target arm--haiku- %s -### -o %t.o 2>&1 \
37+
// RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s
3638

3739
// Otherwise, ABI is selected based on environment
3840
// RUN: %clang -target arm---android %s -### -o %t.o 2>&1 \

clang/test/Driver/haiku.c

+5
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,8 @@
6565
// CHECK-X86_64-SHARED-SAME: "-isysroot" "[[SYSROOT:[^"]+]]"
6666
// CHECK-X86_64-SHARED: "{{.*}}ld{{(.exe)?}}"
6767
// CHECK-X86_64-SHARED-NOT: "[[SYSROOT]]/boot/system/develop/lib/start_dyn.o"
68+
69+
// Check default ARM CPU, ARMv6
70+
// RUN: %clang -### %s 2>&1 --target=arm-unknown-haiku \
71+
// RUN: | FileCheck --check-prefix=CHECK-ARM-CPU %s
72+
// CHECK-ARM-CPU: "-target-cpu" "arm1176jzf-s"

llvm/lib/TargetParser/ARMTargetParser.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,8 @@ StringRef ARM::computeDefaultTargetABI(const Triple &TT, StringRef CPU) {
526526
default:
527527
if (TT.isOSNetBSD())
528528
return "apcs-gnu";
529-
if (TT.isOSFreeBSD() || TT.isOSOpenBSD() || TT.isOHOSFamily())
529+
if (TT.isOSFreeBSD() || TT.isOSOpenBSD() || TT.isOSHaiku() ||
530+
TT.isOHOSFamily())
530531
return "aapcs-linux";
531532
return "aapcs";
532533
}
@@ -542,6 +543,7 @@ StringRef ARM::getARMCPUForArch(const llvm::Triple &Triple, StringRef MArch) {
542543
case llvm::Triple::FreeBSD:
543544
case llvm::Triple::NetBSD:
544545
case llvm::Triple::OpenBSD:
546+
case llvm::Triple::Haiku:
545547
if (!MArch.empty() && MArch == "v6")
546548
return "arm1176jzf-s";
547549
if (!MArch.empty() && MArch == "v7")
@@ -574,6 +576,8 @@ StringRef ARM::getARMCPUForArch(const llvm::Triple &Triple, StringRef MArch) {
574576
// If no specific architecture version is requested, return the minimum CPU
575577
// required by the OS and environment.
576578
switch (Triple.getOS()) {
579+
case llvm::Triple::Haiku:
580+
return "arm1176jzf-s";
577581
case llvm::Triple::NetBSD:
578582
switch (Triple.getEnvironment()) {
579583
case llvm::Triple::EABI:

0 commit comments

Comments
 (0)