diff --git a/llvm/utils/gn/build/BUILD.gn b/llvm/utils/gn/build/BUILD.gn --- a/llvm/utils/gn/build/BUILD.gn +++ b/llvm/utils/gn/build/BUILD.gn @@ -377,6 +377,9 @@ "//llvm/include", "$root_gen_dir/llvm/include", ] + if (current_os != "win") { + cflags = [ "-fPIC" ] + } } config("lld_code") { diff --git a/llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn b/llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn --- a/llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn +++ b/llvm/utils/gn/secondary/clang/tools/libclang/BUILD.gn @@ -5,33 +5,24 @@ # This build file is just enough to get check-clang to pass, it's missing # several things from the CMake build: # - a build target copying the Python bindings -# - the GN linux build always builds without -fPIC (as if LLVM_ENABLE_PIC=OFF -# in the CMake build), so libclang is always a static library on linux # - the GN build doesn't have LIBCLANG_BUILD_STATIC -libclang_target_type = "shared_library" -if (host_os != "win" && host_os != "mac") { - # ELF targets need -fPIC to build shared libs but they aren't on by default. - # For now, make libclang a static lib there. - libclang_target_type = "static_library" -} else { - action("linker_script_to_exports") { - script = "linker-script-to-export-list.py" - inputs = [ "libclang.map" ] - outputs = [ "$target_gen_dir/libclang.exports" ] - args = [ - rebase_path(inputs[0], root_build_dir), - rebase_path(outputs[0], root_build_dir), - ] - } +action("linker_script_to_exports") { + script = "linker-script-to-export-list.py" + inputs = [ "libclang.map" ] + outputs = [ "$target_gen_dir/libclang.exports" ] + args = [ + rebase_path(inputs[0], root_build_dir), + rebase_path(outputs[0], root_build_dir), + ] +} - symbol_exports("exports") { - deps = [ ":linker_script_to_exports" ] - exports_file = "$target_gen_dir/libclang.exports" - } +symbol_exports("exports") { + deps = [ ":linker_script_to_exports" ] + exports_file = "$target_gen_dir/libclang.exports" } -target(libclang_target_type, "libclang") { +shared_library("libclang") { configs += [ "//llvm/utils/gn/build:clang_code" ] deps = [ "//clang/include/clang/Config", @@ -48,14 +39,17 @@ "//llvm/lib/Support", "//llvm/lib/Target:TargetsToBuild", ] + if (current_os == "win" || current_os == "mac") { + deps += [ ":exports" ] + } else { + inputs = [ "libclang.map" ] + ldflags = + [ "-Wl,--version-script," + rebase_path(inputs[0], root_build_dir) ] + } if (clang_enable_arcmt) { deps += [ "//clang/lib/ARCMigrate" ] } - if (libclang_target_type == "shared_library") { - deps += [ ":exports" ] - } - defines = [] if (host_os == "win") { diff --git a/llvm/utils/gn/secondary/llvm/tools/lto/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/lto/BUILD.gn --- a/llvm/utils/gn/secondary/llvm/tools/lto/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/tools/lto/BUILD.gn @@ -1,18 +1,11 @@ import("//llvm/utils/gn/build/symbol_exports.gni") import("//llvm/version.gni") -lto_target_type = "shared_library" -if (host_os != "mac" && host_os != "win") { - # ELF targets need -fPIC to build shared libs but they aren't on by default. - # For now, make libclang a static lib there. - lto_target_type = "static_library" -} - symbol_exports("exports") { exports_file = "lto.exports" } -target(lto_target_type, "lto") { +shared_library("lto") { output_name = "LTO" deps = [ "//llvm/lib/Bitcode/Reader", @@ -23,16 +16,13 @@ "//llvm/lib/Support", "//llvm/lib/Target", "//llvm/lib/Target:TargetsToBuild", + ":exports", ] sources = [ "LTODisassembler.cpp", "lto.cpp", ] - if (lto_target_type == "shared_library") { - deps += [ ":exports" ] - } - if (host_os == "mac") { ldflags = [ "-Wl,-compatibility_version,1",