[gn build] Add build files for bugpoint-passes and LLVMHello plugins
authorNico Weber <nicolasweber@gmx.de>
Wed, 2 Jan 2019 17:38:22 +0000 (17:38 +0000)
committerNico Weber <nicolasweber@gmx.de>
Wed, 2 Jan 2019 17:38:22 +0000 (17:38 +0000)
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

llvm-svn: 350234

llvm/utils/gn/secondary/BUILD.gn
llvm/utils/gn/secondary/llvm/include/llvm/IR/BUILD.gn
llvm/utils/gn/secondary/llvm/lib/IR/BUILD.gn
llvm/utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn [new file with mode: 0644]
llvm/utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn [new file with mode: 0644]

index a40f43b..369e03f 100644 (file)
@@ -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
 }
 
index cc73446..c9165c3 100644 (file)
@@ -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",
+  ]
+}
index 35e3db9..6d4945f 100644 (file)
@@ -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/llvm/utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn
new file mode 100644 (file)
index 0000000..9240193
--- /dev/null
@@ -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/llvm/utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn
new file mode 100644 (file)
index 0000000..385c469
--- /dev/null
@@ -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.
+}