Index: llvm/trunk/utils/gn/secondary/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/BUILD.gn +++ llvm/trunk/utils/gn/secondary/BUILD.gn @@ -48,6 +48,15 @@ "//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: llvm/trunk/utils/gn/secondary/llvm/include/llvm/IR/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/llvm/include/llvm/IR/BUILD.gn +++ llvm/trunk/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("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: llvm/trunk/utils/gn/secondary/llvm/lib/IR/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/llvm/lib/IR/BUILD.gn +++ llvm/trunk/utils/gn/secondary/llvm/lib/IR/BUILD.gn @@ -10,12 +10,7 @@ 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", Index: llvm/trunk/utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/llvm/lib/Transforms/Hello/BUILD.gn +++ llvm/trunk/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. +} Index: llvm/trunk/utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/llvm/tools/bugpoint-passes/BUILD.gn +++ llvm/trunk/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. +}