From d0bc1feadee9b6fad78617c85f48cf7383357d5c Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 2 Jan 2019 17:38:22 +0000 Subject: [PATCH] [gn build] Add build files for bugpoint-passes and LLVMHello plugins These two plugins are loaded into a host process that contains all LLVM symbols, so they don't link against anything. This required minor readjustments to the tablegen() setup of IR. Needed for check-llvm. Differential Revision: https://reviews.llvm.org/D56204 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350234 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/gn/secondary/BUILD.gn | 9 ++++++++ .../secondary/llvm/include/llvm/IR/BUILD.gn | 18 +++++++++++++-- utils/gn/secondary/llvm/lib/IR/BUILD.gn | 7 +----- .../llvm/lib/Transforms/Hello/BUILD.gn | 22 +++++++++++++++++++ .../llvm/tools/bugpoint-passes/BUILD.gn | 22 +++++++++++++++++++ 5 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn create mode 100644 utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn diff --git a/utils/gn/secondary/BUILD.gn b/utils/gn/secondary/BUILD.gn index a40f43b4261..369e03fec2b 100644 --- a/utils/gn/secondary/BUILD.gn +++ b/utils/gn/secondary/BUILD.gn @@ -48,6 +48,15 @@ group("default") { "//clang/tools/clang-func-mapping", ] } + if (host_os != "win") { + # loadable_modules don't work on Windows. + # FIXME: In the CMake build, ENABLE_SHARED makes them work somehow + # (but they're off by default there too). + deps += [ + "//llvm/lib/Transforms/Hello", + "//llvm/tools/bugpoint-passes", + ] + } testonly = true } diff --git a/utils/gn/secondary/llvm/include/llvm/IR/BUILD.gn b/utils/gn/secondary/llvm/include/llvm/IR/BUILD.gn index cc73446a582..c9165c38a79 100644 --- a/utils/gn/secondary/llvm/include/llvm/IR/BUILD.gn +++ b/utils/gn/secondary/llvm/include/llvm/IR/BUILD.gn @@ -1,7 +1,7 @@ import("//llvm/utils/TableGen/tablegen.gni") tablegen("IntrinsicEnums") { - visibility = [ "//llvm/lib/IR" ] + visibility = [ ":public_tablegen" ] args = [ "-gen-intrinsic-enums" ] td_file = "Intrinsics.td" } @@ -13,6 +13,20 @@ tablegen("IntrinsicImpl") { } tablegen("Attributes") { - visibility = [ "//llvm/lib/IR" ] + visibility = [ ":public_tablegen" ] args = [ "-gen-attrs" ] } + +# Groups all tablegen() calls that create .inc files that are included in +# IR's public headers. //llvm/lib/Target has this as a public_dep, so targets +# dependign on //llvm/lib/IR don't need to depend on this. This exists +# solely for targets that use IR's public headers but don't link against IR. +group("public_tablegen") { + public_deps = [ + # IR's public headers include Attributes.inc. + ":Attributes", + + # IR's public headers include IntrinsicEnums.inc. + ":IntrinsicEnums", + ] +} diff --git a/utils/gn/secondary/llvm/lib/IR/BUILD.gn b/utils/gn/secondary/llvm/lib/IR/BUILD.gn index 35e3db91c93..6d4945f1e15 100644 --- a/utils/gn/secondary/llvm/lib/IR/BUILD.gn +++ b/utils/gn/secondary/llvm/lib/IR/BUILD.gn @@ -10,12 +10,7 @@ static_library("IR") { public_deps = [ # Must be public_dep because IR's public headers include llvm-config.h. "//llvm/include/llvm/Config:llvm-config", - - # Must be public_dep because IR's public headers include Attributes.inc. - "//llvm/include/llvm/IR:Attributes", - - # Must be public_dep because IR's public headers include IntrinsicEnums.inc. - "//llvm/include/llvm/IR:IntrinsicEnums", + "//llvm/include/llvm/IR:public_tablegen", ] deps = [ ":AttributesCompatFunc", diff --git a/utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn b/utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn new file mode 100644 index 00000000000..9240193cd67 --- /dev/null +++ b/utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn @@ -0,0 +1,22 @@ +assert(host_os != "win", "loadable modules not supported on win") + +loadable_module("Hello") { + output_name = "LLVMHello" + deps = [ + # LLVMHello doesn't want to link in any LLVM code, it just + # needs its headers. + "//llvm/include/llvm/IR:public_tablegen", + ] + sources = [ + "Hello.cpp", + ] + + if (host_os == "linux") { + # The GN build currently doesn't globally pass -fPIC, but that's + # needed for building .so files on Linux. Just pass it manually + # for loadable_modules for now. + cflags = [ "-fPIC" ] + } + + # FIXME: Use Hello.exports to remove all exports. +} diff --git a/utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn b/utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn new file mode 100644 index 00000000000..385c4694c0a --- /dev/null +++ b/utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn @@ -0,0 +1,22 @@ +assert(host_os != "win", "loadable modules not supported on win") + +loadable_module("bugpoint-passes") { + output_name = "BugpointPasses" + deps = [ + # BugpointPasses doesn't want to link in any LLVM code, it just + # needs its headers. + "//llvm/include/llvm/IR:public_tablegen", + ] + sources = [ + "TestPasses.cpp", + ] + + if (host_os == "linux") { + # The GN build currently doesn't globally pass -fPIC, but that's + # needed for building .so files on Linux. Just pass it manually + # for loadable_modules for now. + cflags = [ "-fPIC" ] + } + + # FIXME: Use bugpoint.exports to remove all exports. +} -- 2.50.1