set(LIBRARYNAME BlinkGCPlugin)
set(plugin_sources
BlinkGCPlugin.cpp
BlinkGCPluginConsumer.cpp
CheckDispatchVisitor.cpp
CheckFieldsVisitor.cpp
CheckFinalizerVisitor.cpp
CheckGCRootsVisitor.cpp
CheckTraceVisitor.cpp
CollectVisitor.cpp
Config.cpp
DiagnosticsReporter.cpp
Edge.cpp
RecordInfo.cpp)
if(WIN32)
# Clang doesn't support loadable modules on Windows. Unfortunately, building
# the plugin as a static library and linking clang against it doesn't work.
# Since clang doesn't reference any symbols in our static library, the linker
# strips it out completely.
# Instead, we rely on the fact that the SOURCES property of a target is no
# read-only after CMake 3.1 and use it to compile the plugin directly into
# clang...
cmake_minimum_required(VERSION 3.1)
# Paths must be absolute, since we're modifying a target in another directory.
set(absolute_sources "")
foreach(source ${plugin_sources})
list(APPEND absolute_sources ${CMAKE_CURRENT_SOURCE_DIR}/${source})
endforeach()
set_property(TARGET clang APPEND PROPERTY SOURCES ${absolute_sources})
cr_add_test(blink_gc_plugin_test
python tests/test.py
${CMAKE_BINARY_DIR}/bin/clang
)
else()
add_llvm_loadable_module("lib${LIBRARYNAME}" ${plugin_sources})
add_dependencies("lib${LIBRARYNAME}" clang)
cr_install(TARGETS "lib${LIBRARYNAME}" LIBRARY DESTINATION lib)
cr_add_test(blink_gc_plugin_test
python tests/test.py
${CMAKE_BINARY_DIR}/bin/clang
$<TARGET_FILE:lib${LIBRARYNAME}>
)
endif()