forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350454 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
3 changed files
with
104 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
49
utils/gn/secondary/llvm/unittests/Support/DynamicLibrary/BUILD.gn
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" ] | ||
} | ||
} |