1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00

gn build: Add a stage2 host toolchain and make the hwasan runtime buildable on x86_64 Linux.

Differential Revision: https://reviews.llvm.org/D56711

llvm-svn: 351258
This commit is contained in:
Peter Collingbourne 2019-01-15 22:02:12 +00:00
parent 6a91773c9e
commit c6dd831c47
5 changed files with 65 additions and 20 deletions

View File

@ -150,8 +150,10 @@ unix_toolchain("unix") {
} }
} }
if (android_ndk_path != "") { template("stage2_unix_toolchain") {
unix_toolchain("stage2_android_aarch64") { unix_toolchain(target_name) {
forward_variables_from(invoker, "*")
cc = "bin/clang" cc = "bin/clang"
cxx = "bin/clang++" cxx = "bin/clang++"
ld = cxx ld = cxx
@ -162,7 +164,19 @@ if (android_ndk_path != "") {
"//:lld($host_toolchain)", "//:lld($host_toolchain)",
"//:llvm-ar($host_toolchain)", "//:llvm-ar($host_toolchain)",
] ]
}
}
stage2_unix_toolchain("stage2_unix") {
toolchain_args = {
current_os = host_os
current_cpu = host_cpu
use_lld = host_os != "mac"
}
}
if (android_ndk_path != "") {
stage2_unix_toolchain("stage2_android_aarch64") {
toolchain_args = { toolchain_args = {
current_os = "android" current_os = "android"
current_cpu = "arm64" current_cpu = "arm64"

View File

@ -9,9 +9,9 @@ group("default") {
"//llvm/test", "//llvm/test",
] ]
# FIXME: This should be a dependency of a test target instead of being
# depended on from here.
if (android_ndk_path != "") { if (android_ndk_path != "") {
# FIXME: This should be a dependency of a test target instead of being
# depended on from here.
android_aarch64_toolchain = android_aarch64_toolchain =
"//llvm/utils/gn/build/toolchain:stage2_android_aarch64" "//llvm/utils/gn/build/toolchain:stage2_android_aarch64"
deps += [ deps += [
@ -19,6 +19,9 @@ group("default") {
"//llvm/tools/llvm-symbolizer($android_aarch64_toolchain)", "//llvm/tools/llvm-symbolizer($android_aarch64_toolchain)",
] ]
} }
if (host_cpu == "x64" && host_os == "linux") {
deps += [ "//compiler-rt/lib/hwasan:hwasan_shared(//llvm/utils/gn/build/toolchain:stage2_unix)" ]
}
testonly = true testonly = true
} }

View File

@ -1,10 +1,4 @@
import("//clang/resource_dir.gni") import("//compiler-rt/target.gni")
# FIXME: Make this support more platforms.
assert(current_os == "android")
runtime_output_dir = "$clang_resource_dir/lib/linux"
runtime_target = "aarch64-android"
action("version_script") { action("version_script") {
script = "//compiler-rt/lib/sanitizer_common/scripts/gen_dynamic_list.py" script = "//compiler-rt/lib/sanitizer_common/scripts/gen_dynamic_list.py"
@ -22,10 +16,11 @@ action("version_script") {
"--version-list", "--version-list",
"--extra", "--extra",
rebase_path(sources[0], root_build_dir), rebase_path(sources[0], root_build_dir),
rebase_path("$runtime_output_dir/libclang_rt.hwasan-$runtime_target.a", rebase_path("$crt_current_out_dir/libclang_rt.hwasan-$crt_current_target.a",
root_build_dir),
rebase_path("$runtime_output_dir/libclang_rt.hwasan_cxx-$runtime_target.a",
root_build_dir), root_build_dir),
rebase_path(
"$crt_current_out_dir/libclang_rt.hwasan_cxx-$crt_current_target.a",
root_build_dir),
"-o", "-o",
rebase_path(outputs[0], root_build_dir), rebase_path(outputs[0], root_build_dir),
] ]
@ -66,8 +61,8 @@ source_set("cxx_sources") {
} }
static_library("hwasan") { static_library("hwasan") {
output_dir = runtime_output_dir output_dir = crt_current_out_dir
output_name = "clang_rt.hwasan-$runtime_target" output_name = "clang_rt.hwasan-$crt_current_target"
complete_static_lib = true complete_static_lib = true
configs -= [ "//llvm/utils/gn/build:llvm_code" ] configs -= [ "//llvm/utils/gn/build:llvm_code" ]
configs += [ "//llvm/utils/gn/build:crt_code" ] configs += [ "//llvm/utils/gn/build:crt_code" ]
@ -77,8 +72,8 @@ static_library("hwasan") {
} }
static_library("hwasan_cxx") { static_library("hwasan_cxx") {
output_dir = runtime_output_dir output_dir = crt_current_out_dir
output_name = "clang_rt.hwasan_cxx-$runtime_target" output_name = "clang_rt.hwasan_cxx-$crt_current_target"
complete_static_lib = true complete_static_lib = true
configs -= [ "//llvm/utils/gn/build:llvm_code" ] configs -= [ "//llvm/utils/gn/build:llvm_code" ]
configs += [ "//llvm/utils/gn/build:crt_code" ] configs += [ "//llvm/utils/gn/build:crt_code" ]
@ -88,8 +83,8 @@ static_library("hwasan_cxx") {
} }
shared_library("hwasan_shared") { shared_library("hwasan_shared") {
output_dir = runtime_output_dir output_dir = crt_current_out_dir
output_name = "clang_rt.hwasan-$runtime_target" output_name = "clang_rt.hwasan-$crt_current_target"
configs -= [ "//llvm/utils/gn/build:llvm_code" ] configs -= [ "//llvm/utils/gn/build:llvm_code" ]
configs += [ "//llvm/utils/gn/build:crt_code" ] configs += [ "//llvm/utils/gn/build:crt_code" ]
deps = [ deps = [

View File

@ -1,6 +1,16 @@
source_set("sources") { source_set("sources") {
configs -= [ "//llvm/utils/gn/build:llvm_code" ] configs -= [ "//llvm/utils/gn/build:llvm_code" ]
configs += [ "//llvm/utils/gn/build:crt_code" ] configs += [ "//llvm/utils/gn/build:crt_code" ]
deps = [
"//llvm/utils/gn/build/libs/pthread",
]
libs = []
if (current_os == "linux" || current_os == "android") {
libs += [ "dl" ]
}
if (current_os == "linux") {
libs += [ "rt" ]
}
sources = [ sources = [
"sancov_flags.cc", "sancov_flags.cc",
"sanitizer_allocator.cc", "sanitizer_allocator.cc",
@ -67,4 +77,7 @@ source_set("sources") {
"sanitizer_unwind_win.cc", "sanitizer_unwind_win.cc",
"sanitizer_win.cc", "sanitizer_win.cc",
] ]
if (current_cpu == "x64") {
sources += [ "sanitizer_linux_x86_64.S" ]
}
} }

View File

@ -0,0 +1,20 @@
import("//clang/resource_dir.gni")
if (current_os == "linux" || current_os == "android") {
crt_current_out_dir = "$clang_resource_dir/lib/linux"
} else {
assert(false, "unimplemented current_os " + current_os)
}
if (current_cpu == "x64") {
crt_current_target_arch = "x86_64"
} else if (current_cpu == "arm64") {
crt_current_target_arch = "aarch64"
} else {
assert(false, "unimplemented current_cpu " + current_cpu)
}
crt_current_target = crt_current_target_arch
if (current_os == "android") {
crt_current_target += "-android"
}