forked from OSchip/llvm-project
[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
This commit is contained in:
parent
46c7fc22cf
commit
68a3a3b281
|
@ -1,6 +1,6 @@
|
|||
# This file sets up a CMakeCache for the second stage of a Fuchsia toolchain build.
|
||||
|
||||
set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64 CACHE STRING "")
|
||||
set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64;RISCV CACHE STRING "")
|
||||
|
||||
set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
|
||||
|
||||
|
@ -106,13 +106,14 @@ endforeach()
|
|||
if(FUCHSIA_SDK)
|
||||
set(FUCHSIA_aarch64_NAME arm64)
|
||||
set(FUCHSIA_x86_64_NAME x64)
|
||||
foreach(target x86_64;aarch64)
|
||||
set(FUCHSIA_riscv64_NAME riscv64)
|
||||
foreach(target x86_64;aarch64;riscv64)
|
||||
set(FUCHSIA_${target}_COMPILER_FLAGS "-I${FUCHSIA_SDK}/pkg/fdio/include")
|
||||
set(FUCHSIA_${target}_LINKER_FLAGS "-L${FUCHSIA_SDK}/arch/${FUCHSIA_${target}_NAME}/lib")
|
||||
set(FUCHSIA_${target}_SYSROOT "${FUCHSIA_SDK}/arch/${FUCHSIA_${target}_NAME}/sysroot")
|
||||
endforeach()
|
||||
|
||||
foreach(target x86_64;aarch64)
|
||||
foreach(target x86_64;aarch64;riscv64)
|
||||
# Set the per-target builtins options.
|
||||
list(APPEND BUILTIN_TARGETS "${target}-unknown-fuchsia")
|
||||
set(BUILTINS_${target}-unknown-fuchsia_CMAKE_SYSTEM_NAME Fuchsia CACHE STRING "")
|
||||
|
@ -124,7 +125,9 @@ if(FUCHSIA_SDK)
|
|||
set(BUILTINS_${target}-unknown-fuchsia_CMAKE_MODULE_LINKER_FLAGS ${FUCHSIA_${target}_LINKER_FLAGS} CACHE STRING "")
|
||||
set(BUILTINS_${target}-unknown-fuchsia_CMAKE_EXE_LINKER_FLAGS ${FUCHSIA_${target}_LINKER_FLAGS} CACHE STRING "")
|
||||
set(BUILTINS_${target}-unknown-fuchsia_CMAKE_SYSROOT ${FUCHSIA_${target}_SYSROOT} CACHE PATH "")
|
||||
endforeach()
|
||||
|
||||
foreach(target x86_64;aarch64)
|
||||
# Set the per-target runtimes options.
|
||||
list(APPEND RUNTIME_TARGETS "${target}-unknown-fuchsia")
|
||||
set(RUNTIMES_${target}-unknown-fuchsia_CMAKE_SYSTEM_NAME Fuchsia CACHE STRING "")
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# This file sets up a CMakeCache for a Fuchsia toolchain build.
|
||||
|
||||
set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64 CACHE STRING "")
|
||||
set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64;RISCV CACHE STRING "")
|
||||
|
||||
set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
|
||||
|
||||
|
|
|
@ -383,6 +383,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
|
|||
switch (os) {
|
||||
case llvm::Triple::FreeBSD:
|
||||
return new FreeBSDTargetInfo<RISCV64TargetInfo>(Triple, Opts);
|
||||
case llvm::Triple::Fuchsia:
|
||||
return new FuchsiaTargetInfo<RISCV64TargetInfo>(Triple, Opts);
|
||||
case llvm::Triple::Linux:
|
||||
return new LinuxTargetInfo<RISCV64TargetInfo>(Triple, Opts);
|
||||
default:
|
||||
|
|
|
@ -224,7 +224,7 @@ Fuchsia::Fuchsia(const Driver &D, const llvm::Triple &Triple,
|
|||
std::string Fuchsia::ComputeEffectiveClangTriple(const ArgList &Args,
|
||||
types::ID InputType) const {
|
||||
llvm::Triple Triple(ComputeLLVMTriple(Args, InputType));
|
||||
return (Triple.getArchName() + "-" + Triple.getOSName()).str();
|
||||
return Triple.str();
|
||||
}
|
||||
|
||||
Tool *Fuchsia::buildLinker() const {
|
||||
|
@ -344,9 +344,17 @@ SanitizerMask Fuchsia::getSupportedSanitizers() const {
|
|||
|
||||
SanitizerMask Fuchsia::getDefaultSanitizers() const {
|
||||
SanitizerMask Res;
|
||||
if (getTriple().getArch() == llvm::Triple::aarch64)
|
||||
switch (getTriple().getArch()) {
|
||||
case llvm::Triple::aarch64:
|
||||
Res |= SanitizerKind::ShadowCallStack;
|
||||
else
|
||||
break;
|
||||
case llvm::Triple::x86_64:
|
||||
Res |= SanitizerKind::SafeStack;
|
||||
break;
|
||||
case llvm::Triple::riscv64:
|
||||
break;
|
||||
default:
|
||||
llvm_unreachable("invalid architecture");
|
||||
}
|
||||
return Res;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,14 @@
|
|||
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
|
||||
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
|
||||
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-AARCH64 %s
|
||||
// RUN: %clang %s -### -no-canonical-prefixes --target=riscv64-fuchsia \
|
||||
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
|
||||
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
|
||||
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-RISCV64 %s
|
||||
// CHECK: {{.*}}clang{{.*}}" "-cc1"
|
||||
// CHECK-X86_64: "-triple" "x86_64-unknown-fuchsia"
|
||||
// CHECK-AARCH64: "-triple" "aarch64-unknown-fuchsia"
|
||||
// CHECK-RISCV64: "-triple" "riscv64-unknown-fuchsia"
|
||||
// CHECK: "--mrelax-relocations"
|
||||
// CHECK: "-munwind-tables"
|
||||
// CHECK: "-fuse-init-array"
|
||||
|
@ -29,6 +36,7 @@
|
|||
// CHECK: "-L[[SYSROOT]]{{/|\\\\}}lib"
|
||||
// CHECK-X86_64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}x86_64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
|
||||
// CHECK-AARCH64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}aarch64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
|
||||
// CHECK-RISCV64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}riscv64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
|
||||
// CHECK: "-lc"
|
||||
// CHECK-NOT: crtend.o
|
||||
// CHECK-NOT: crtn.o
|
||||
|
|
|
@ -1,9 +1,22 @@
|
|||
// RUN: %clangxx %s -### -no-canonical-prefixes --target=x86_64-fuchsia \
|
||||
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
|
||||
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
|
||||
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 | FileCheck %s
|
||||
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
|
||||
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-X86_64 %s
|
||||
// RUN: %clangxx %s -### -no-canonical-prefixes --target=aarch64-fuchsia \
|
||||
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
|
||||
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
|
||||
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
|
||||
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-AARCH64 %s
|
||||
// RUN: %clangxx %s -### -no-canonical-prefixes --target=riscv64-fuchsia \
|
||||
// RUN: -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
|
||||
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
|
||||
// RUN: --sysroot=%S/platform -fuse-ld=lld 2>&1 \
|
||||
// RUN: | FileCheck -check-prefixes=CHECK,CHECK-RISCV64 %s
|
||||
// CHECK: {{.*}}clang{{.*}}" "-cc1"
|
||||
// CHECK: "-triple" "x86_64-fuchsia"
|
||||
// CHECK-X86_64: "-triple" "x86_64-unknown-fuchsia"
|
||||
// CHECK-AARCH64: "-triple" "aarch64-unknown-fuchsia"
|
||||
// CHECK-RISCV64: "-triple" "riscv64-unknown-fuchsia"
|
||||
// CHECK: "-fuse-init-array"
|
||||
// CHECK: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
|
||||
// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
|
||||
|
@ -23,7 +36,9 @@
|
|||
// CHECK: "-lc++"
|
||||
// CHECK: "-lm"
|
||||
// CHECK: "--pop-state"
|
||||
// CHECK: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}x86_64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
|
||||
// CHECK-X86_64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}x86_64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
|
||||
// CHECK-AARCH64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}aarch64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
|
||||
// CHECK-RISCV64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}riscv64-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
|
||||
// CHECK: "-lc"
|
||||
// CHECK-NOT: crtend.o
|
||||
// CHECK-NOT: crtn.o
|
||||
|
|
Loading…
Reference in New Issue