diff options
author | Nico Weber <nicolasweber@gmx.de> | 2019-01-05 01:39:18 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2019-01-05 01:39:18 +0000 |
commit | 8400becec5df4023f6f18d28a53d75620425698b (patch) | |
tree | b4130d820ca4821976fd7f7c5d99d14e6589703c | |
parent | b215d0731a54325f5fd8e0dae41415a6446ec6ff (diff) | |
download | bcm5719-llvm-8400becec5df4023f6f18d28a53d75620425698b.tar.gz bcm5719-llvm-8400becec5df4023f6f18d28a53d75620425698b.zip |
[gn build] Add build files for unittests that load shared libraries
This is slightly ugly for three reasons:
- The shlib needs to go next to the binary to be found on all platforms, so the
build files refer to target_out_dir
- The explicit -fPIC flag needed on the shared lib side, and the -rdynamic flag
needed on the host side, on Linux
- Plugins that refer to LLVM code and assume that the host will resolve them
don't work on Windows -- PluginsTests won't test anything on Windows (but
DynamicLibraryTests will, since the dll here doesn't call LLVM code)
If we get lots more of these plugin / plugin host targets it might make sense
to add a template for them. But for now, these are the last ones we need.
(We're at 6 plugin hosts, 2 of them tests, and at 6 shared libraries, 2 of them
tests as well. clang is a plugin host by default in the CMake build but not
(yet?) in the GN build.)
Differential Revision: https://reviews.llvm.org/D56330
llvm-svn: 350454
3 files changed, 104 insertions, 6 deletions
diff --git a/llvm/utils/gn/secondary/llvm/unittests/BUILD.gn b/llvm/utils/gn/secondary/llvm/unittests/BUILD.gn index abdcbd37b91..4f0450bcacc 100644 --- a/llvm/utils/gn/secondary/llvm/unittests/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/unittests/BUILD.gn @@ -33,14 +33,10 @@ group("unittests") { "ObjectYAML:ObjectYAMLTests", "OptRemarks:OptRemarksTests", "Option:OptionTests", - - # FIXME: Add. - #"Passes:PluginsTests", + "Passes:PluginsTests", "ProfileData:ProfileDataTests", "Support:SupportTests", - - # FIXME: Add. - #"Support/DynamicLibrary:DynamicLibraryTests", + "Support/DynamicLibrary:DynamicLibraryTests", "TextAPI:TextAPITests", "Transforms/IPO:IPOTests", "Transforms/Scalar:ScalarTests", diff --git a/llvm/utils/gn/secondary/llvm/unittests/Passes/BUILD.gn b/llvm/utils/gn/secondary/llvm/unittests/Passes/BUILD.gn new file mode 100644 index 00000000000..6bf6e7044c2 --- /dev/null +++ b/llvm/utils/gn/secondary/llvm/unittests/Passes/BUILD.gn @@ -0,0 +1,53 @@ +import("//llvm/utils/unittest/unittest.gni") + +# Keyed off LLVM_ENABLE_PLUGINS in the CMake build, which is usually false +# on Windows and true elsewhere. +if (host_os != "win") { + loadable_module("TestPlugin") { + # Put plugin next to the unit test executable. + output_dir = target_out_dir + + sources = [ + "TestPlugin.cpp", + ] + + deps = [ + # TestPlugin doesn't want to link in any LLVM code, it just needs its + # headers. + "//llvm/include/llvm/IR:public_tablegen", + ] + + 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" ] + } + } +} + +unittest("PluginsTests") { + deps = [ + "//llvm/include/llvm/Config:config", + "//llvm/lib/IR", + "//llvm/lib/Passes", + "//llvm/lib/Support", + "//llvm/lib/Testing/Support", + ] + sources = [ + "PluginsTest.cpp", + ] + + # If plugins are disabled, this test will disable itself at runtime. + # Otherwise, reconfiguring with plugins disabled will leave behind a stale + # executable. + if (host_os != "win") { + deps += [ ":TestPlugin" ] + defines = [ "LLVM_ENABLE_PLUGINS" ] + } + + if (host_os == "linux") { + # Corresponds to export_executable_symbols() in cmake. + ldflags = [ "-rdynamic" ] + } +} diff --git a/llvm/utils/gn/secondary/llvm/unittests/Support/DynamicLibrary/BUILD.gn b/llvm/utils/gn/secondary/llvm/unittests/Support/DynamicLibrary/BUILD.gn new file mode 100644 index 00000000000..a04559e74c6 --- /dev/null +++ b/llvm/utils/gn/secondary/llvm/unittests/Support/DynamicLibrary/BUILD.gn @@ -0,0 +1,49 @@ +import("//llvm/utils/unittest/unittest.gni") + +# FIXME: If we add -Wl,-z,nodelete to the global ldflags, we need to remove +# it again for these tests (cf CMake). + +template("dynlib_add_module") { + not_needed(invoker, "*") + + loadable_module(target_name) { + # Put plugin next to the unit test executable. + # This assumes that unittest() puts tests in target_out_dir. + output_dir = target_out_dir + + sources = [ + "PipSqueak.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" ] + } + } +} + +dynlib_add_module("PipSqueak") { +} + +dynlib_add_module("SecondLib") { +} + +unittest("DynamicLibraryTests") { + deps = [ + ":PipSqueak", + ":SecondLib", + "//llvm/include/llvm/Config:config", + "//llvm/lib/Support", + ] + sources = [ + "DynamicLibraryTest.cpp", + "ExportedFuncs.cpp", + ] + + if (host_os == "linux") { + # Corresponds to export_executable_symbols() in cmake. + ldflags = [ "-rdynamic" ] + } +} |