xref: /llvm-project/llvm/unittests/Support/DynamicLibrary/CMakeLists.txt (revision 53d60398efb06df683f1189a554f547873331c81)
1# Needed by LLVM's CMake checks because this file defines multiple targets.
2set(LLVM_OPTIONAL_SOURCES ExportedFuncs.cpp PipSqueak.cpp)
3
4set(LLVM_LINK_COMPONENTS Support)
5
6add_library(DynamicLibraryLib STATIC
7  ExportedFuncs.cpp
8  )
9set_target_properties(DynamicLibraryLib PROPERTIES FOLDER "LLVM/Tests/Support")
10
11# extract_symbols.py relies on all its library arguments being in the same
12# directory, so we must set the output directory in the same way as if
13# add_llvm_library was used.
14set_output_directory(DynamicLibraryLib
15  LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}
16  )
17
18# FIXME: Find out why AIX fails with new DynamicLibrary symbols behavior.
19if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
20  add_llvm_unittest(DynamicLibraryTests
21    DynamicLibraryTest.cpp
22    )
23else()
24  add_llvm_unittest(DynamicLibraryTests
25    DynamicLibraryTest.cpp
26
27    EXPORT_SYMBOLS
28    )
29endif()
30target_link_libraries(DynamicLibraryTests PRIVATE DynamicLibraryLib)
31if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
32  export_executable_symbols(DynamicLibraryTests)
33endif()
34
35function(dynlib_add_module NAME)
36  add_library(${NAME} MODULE
37    PipSqueak.cpp
38    )
39  set_target_properties(${NAME} PROPERTIES FOLDER "LLVM/Tests/Support")
40
41  set_output_directory(${NAME}
42    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
43    LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
44    )
45
46  set_target_properties(${NAME}
47    PROPERTIES PREFIX ""
48    SUFFIX ${LLVM_PLUGIN_EXT}
49    )
50
51  add_dependencies(DynamicLibraryTests ${NAME})
52
53  if(LLVM_INTEGRATED_CRT_ALLOC)
54    # We need to link in the Support lib for the Memory allocator override,
55    # otherwise the DynamicLibrary.Shutdown test will fail, because it would
56    # allocate memory with the CRT allocator, and release it with our custom
57    # allocator (see llvm/lib/Support/Windows/Memory.inc).
58    # /INCLUDE:malloc is there to force searching into LLVMSupport before libucrt
59    llvm_map_components_to_libnames(llvm_libs Support)
60    target_link_libraries(${NAME} ${llvm_libs} "-INCLUDE:malloc")
61  endif()
62
63endfunction(dynlib_add_module)
64
65# Revert -Wl,-z,nodelete on this test since it relies on the file
66# being unloaded.
67if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
68  string(REPLACE "-Wl,-z,nodelete" "" CMAKE_MODULE_LINKER_FLAGS
69    ${CMAKE_MODULE_LINKER_FLAGS})
70endif()
71
72dynlib_add_module(PipSqueak)
73dynlib_add_module(SecondLib)
74