Support WINDOWS_EXPORT_ALL_SYMBOLS with .def files

The `WINDOWS_EXPORT_ALL_SYMBOLS` target property exports all symbols
found in object files explicitly given to the linker.  However, the
linker may also find additional symbols in dependencies and copy them
into the linked binary (e.g. from `msvcrt.lib`).  Provide a way to
export an explicit list of such symbols by adding a `.def` file as a
source file.

Fixes: #16473
This commit is contained in:
Brad King
2017-03-13 11:54:30 -04:00
parent 21c4ec4ffe
commit 075f645409
15 changed files with 138 additions and 59 deletions

View File

@@ -4,6 +4,8 @@ project(ModuleDefinition C)
# Test .def file source recognition for DLLs.
add_library(example_dll SHARED example_dll.c example_dll.def)
add_library(split_dll SHARED split_dll.c split_dll_1.def split_dll_2.def)
# Test generated .def file.
add_custom_command(OUTPUT example_dll_gen.def
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/example_dll_gen.def.in
@@ -24,7 +26,12 @@ endif()
# Test .def file source recognition for EXEs.
add_executable(example_exe example_exe.c example_exe.def)
set_property(TARGET example_exe PROPERTY ENABLE_EXPORTS 1)
target_link_libraries(example_exe example_dll example_dll_gen ${example_dll_2})
target_link_libraries(example_exe
example_dll
example_dll_gen
${example_dll_2}
split_dll
)
# Test linking to the executable.
add_library(example_mod_1 MODULE example_mod_1.c)

View File

@@ -3,15 +3,19 @@ extern int __declspec(dllimport) example_dll_gen_function(void);
#ifdef EXAMPLE_DLL_2
extern int __declspec(dllimport) example_dll_2_function(void);
#endif
extern int __declspec(dllimport) split_dll_1(void);
extern int __declspec(dllimport) split_dll_2(void);
int example_exe_function(void)
{
return 0;
}
int main(void)
{
return example_dll_function() + example_dll_gen_function() +
#ifdef EXAMPLE_DLL_2
example_dll_2_function() +
#endif
example_exe_function();
split_dll_1() + split_dll_2() + example_exe_function();
}

View File

@@ -0,0 +1,9 @@
int split_dll_1(void)
{
return 0;
}
int split_dll_2(void)
{
return 0;
}

View File

@@ -0,0 +1,2 @@
EXPORTS
split_dll_1

View File

@@ -0,0 +1,2 @@
EXPORTS
split_dll_2