Skip to content

Commit 68a3a3b

Browse files
committed
[Clang] Enable RISC-V support for Fuchsia
We don't have a full sysroot yet, so for now we only include compiler support and compiler-rt builtins, the rest of the runtimes will get enabled later. Differential Revision: https://reviews.llvm.org/D70477
1 parent 46c7fc2 commit 68a3a3b

File tree

7 files changed

+46
-10
lines changed

7 files changed

+46
-10
lines changed

clang/cmake/caches/Fuchsia-stage2.cmake

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This file sets up a CMakeCache for the second stage of a Fuchsia toolchain build.
22

3-
set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64 CACHE STRING "")
3+
set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64;RISCV CACHE STRING "")
44

55
set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
66

@@ -106,13 +106,14 @@ endforeach()
106106
if(FUCHSIA_SDK)
107107
set(FUCHSIA_aarch64_NAME arm64)
108108
set(FUCHSIA_x86_64_NAME x64)
109-
foreach(target x86_64;aarch64)
109+
set(FUCHSIA_riscv64_NAME riscv64)
110+
foreach(target x86_64;aarch64;riscv64)
110111
set(FUCHSIA_${target}_COMPILER_FLAGS "-I${FUCHSIA_SDK}/pkg/fdio/include")
111112
set(FUCHSIA_${target}_LINKER_FLAGS "-L${FUCHSIA_SDK}/arch/${FUCHSIA_${target}_NAME}/lib")
112113
set(FUCHSIA_${target}_SYSROOT "${FUCHSIA_SDK}/arch/${FUCHSIA_${target}_NAME}/sysroot")
113114
endforeach()
114115

115-
foreach(target x86_64;aarch64)
116+
foreach(target x86_64;aarch64;riscv64)
116117
# Set the per-target builtins options.
117118
list(APPEND BUILTIN_TARGETS "${target}-unknown-fuchsia")
118119
set(BUILTINS_${target}-unknown-fuchsia_CMAKE_SYSTEM_NAME Fuchsia CACHE STRING "")
@@ -124,7 +125,9 @@ if(FUCHSIA_SDK)
124125
set(BUILTINS_${target}-unknown-fuchsia_CMAKE_MODULE_LINKER_FLAGS ${FUCHSIA_${target}_LINKER_FLAGS} CACHE STRING "")
125126
set(BUILTINS_${target}-unknown-fuchsia_CMAKE_EXE_LINKER_FLAGS ${FUCHSIA_${target}_LINKER_FLAGS} CACHE STRING "")
126127
set(BUILTINS_${target}-unknown-fuchsia_CMAKE_SYSROOT ${FUCHSIA_${target}_SYSROOT} CACHE PATH "")
128+
endforeach()
127129

130+
foreach(target x86_64;aarch64)
128131
# Set the per-target runtimes options.
129132
list(APPEND RUNTIME_TARGETS "${target}-unknown-fuchsia")
130133
set(RUNTIMES_${target}-unknown-fuchsia_CMAKE_SYSTEM_NAME Fuchsia CACHE STRING "")

clang/cmake/caches/Fuchsia.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This file sets up a CMakeCache for a Fuchsia toolchain build.
22

3-
set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64 CACHE STRING "")
3+
set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64;RISCV CACHE STRING "")
44

55
set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
66

clang/lib/Basic/Targets.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
383383
switch (os) {
384384
case llvm::Triple::FreeBSD:
385385
return new FreeBSDTargetInfo<RISCV64TargetInfo>(Triple, Opts);
386+
case llvm::Triple::Fuchsia:
387+
return new FuchsiaTargetInfo<RISCV64TargetInfo>(Triple, Opts);
386388
case llvm::Triple::Linux:
387389
return new LinuxTargetInfo<RISCV64TargetInfo>(Triple, Opts);
388390
default:

clang/lib/Driver/ToolChains/Fuchsia.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ Fuchsia::Fuchsia(const Driver &D, const llvm::Triple &Triple,
224224
std::string Fuchsia::ComputeEffectiveClangTriple(const ArgList &Args,
225225
types::ID InputType) const {
226226
llvm::Triple Triple(ComputeLLVMTriple(Args, InputType));
227-
return (Triple.getArchName() + "-" + Triple.getOSName()).str();
227+
return Triple.str();
228228
}
229229

230230
Tool *Fuchsia::buildLinker() const {
@@ -344,9 +344,17 @@ SanitizerMask Fuchsia::getSupportedSanitizers() const {
344344

345345
SanitizerMask Fuchsia::getDefaultSanitizers() const {
346346
SanitizerMask Res;
347-
if (getTriple().getArch() == llvm::Triple::aarch64)
347+
switch (getTriple().getArch()) {
348+
case llvm::Triple::aarch64:
348349
Res |= SanitizerKind::ShadowCallStack;
349-
else
350+
break;
351+
case llvm::Triple::x86_64:
350352
Res |= SanitizerKind::SafeStack;
353+
break;
354+
case llvm::Triple::riscv64:
355+
break;
356+
default:
357+
llvm_unreachable("invalid architecture");
358+
}
351359
return Res;
352360
}

clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/riscv64-fuchsia/libclang_rt.builtins.a

Whitespace-only changes.

clang/test/Driver/fuchsia.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@
66
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
77
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
88
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-AARCH64 %s
9+
// RUN: %clang %s -### -no-canonical-prefixes --target=riscv64-fuchsia \
10+
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
11+
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
12+
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-RISCV64 %s
913
// CHECK: {{.*}}clang{{.*}}" "-cc1"
14+
// CHECK-X86_64: "-triple" "x86_64-unknown-fuchsia"
15+
// CHECK-AARCH64: "-triple" "aarch64-unknown-fuchsia"
16+
// CHECK-RISCV64: "-triple" "riscv64-unknown-fuchsia"
1017
// CHECK: "--mrelax-relocations"
1118
// CHECK: "-munwind-tables"
1219
// CHECK: "-fuse-init-array"
@@ -29,6 +36,7 @@
2936
// CHECK: "-L[[SYSROOT]]{{/|\\\\}}lib"
3037
// CHECK-X86_64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}x86_64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
3138
// CHECK-AARCH64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}aarch64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
39+
// CHECK-RISCV64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}riscv64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
3240
// CHECK: "-lc"
3341
// CHECK-NOT: crtend.o
3442
// CHECK-NOT: crtn.o

clang/test/Driver/fuchsia.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
11
// RUN: %clangxx %s -### -no-canonical-prefixes --target=x86_64-fuchsia \
22
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
33
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
4-
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 | FileCheck %s
4+
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
5+
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-X86_64 %s
6+
// RUN: %clangxx %s -### -no-canonical-prefixes --target=aarch64-fuchsia \
7+
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
8+
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
9+
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
10+
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-AARCH64 %s
11+
// RUN: %clangxx %s -### -no-canonical-prefixes --target=riscv64-fuchsia \
12+
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
13+
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
14+
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
15+
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-RISCV64 %s
516
// CHECK: {{.*}}clang{{.*}}" "-cc1"
6-
// CHECK: "-triple" "x86_64-fuchsia"
17+
// CHECK-X86_64: "-triple" "x86_64-unknown-fuchsia"
18+
// CHECK-AARCH64: "-triple" "aarch64-unknown-fuchsia"
19+
// CHECK-RISCV64: "-triple" "riscv64-unknown-fuchsia"
720
// CHECK: "-fuse-init-array"
821
// CHECK: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
922
// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
@@ -23,7 +36,9 @@
2336
// CHECK: "-lc++"
2437
// CHECK: "-lm"
2538
// CHECK: "--pop-state"
26-
// CHECK: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}x86_64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
39+
// CHECK-X86_64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}x86_64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
40+
// CHECK-AARCH64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}aarch64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
41+
// CHECK-RISCV64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}riscv64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
2742
// CHECK: "-lc"
2843
// CHECK-NOT: crtend.o
2944
// CHECK-NOT: crtn.o

0 commit comments

Comments
 (0)