Skip to content

Commit

Permalink
[gn build] Add build files for unittests that load shared libraries
Browse files Browse the repository at this point in the history
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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350454 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
nico committed Jan 5, 2019
1 parent 4d51285 commit 4490099
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 6 deletions.
8 changes: 2 additions & 6 deletions utils/gn/secondary/llvm/unittests/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
53 changes: 53 additions & 0 deletions utils/gn/secondary/llvm/unittests/Passes/BUILD.gn
Original file line number Diff line number Diff line change
@@ -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" ]
}
}
49 changes: 49 additions & 0 deletions utils/gn/secondary/llvm/unittests/Support/DynamicLibrary/BUILD.gn
Original file line number Diff line number Diff line change
@@ -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" ]
}
}

0 comments on commit 4490099

Please sign in to comment.