1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

[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
This commit is contained in:
Nico Weber 2019-01-05 01:39:18 +00:00
parent 6595d0b629
commit aa255842e3
3 changed files with 104 additions and 6 deletions

View File

@ -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",

View File

@ -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" ]
}
}

View File

@ -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" ]
}
}