Files
CMake/Tests/RunCMake/DependencyGraph/OptimizeCommon.cmake
Kyle Edwards 2e42651dff Add option to optimize link dependencies for static libraries
Add an `OPTIMIZE_DEPENDENCIES` target property and supporting
`CMAKE_OPTIMIZE_DEPENDENCIES` variable to optionally enable pruning and
flattening of outgoing dependencies from static libraries.  Since they
do not actually link, they only depend on side effects of their
dependencies.  Therefore we can drop dependencies that contribute no
side effects.
2020-08-12 11:31:07 -04:00

41 lines
1.3 KiB
CMake

enable_language(C)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY out)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY out)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY out)
add_library(SharedTop SHARED mylib.c)
add_library(StaticTop STATIC mylib.c)
add_library(StaticMiddle STATIC mylib.c)
add_library(StaticNone STATIC mylib.c)
add_library(StaticPreBuild STATIC mylib.c)
add_library(StaticPreLink STATIC mylib.c)
add_library(StaticPostBuild STATIC mylib.c)
add_library(StaticCc STATIC mylibcc.c)
add_custom_command(TARGET StaticPreBuild PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E true)
add_custom_command(TARGET StaticPreLink PRE_LINK
COMMAND ${CMAKE_COMMAND} -E true)
add_custom_command(TARGET StaticPostBuild POST_BUILD
COMMAND ${CMAKE_COMMAND} -E true)
add_custom_command(OUTPUT mylibcc.c
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/mylib.c ${CMAKE_BINARY_DIR}/mylibcc.c)
target_link_libraries(SharedTop PRIVATE StaticMiddle)
target_link_libraries(StaticTop PRIVATE StaticMiddle)
target_link_libraries(StaticMiddle PRIVATE StaticNone StaticPreBuild StaticPreLink StaticPostBuild StaticCc)
if(OPTIMIZE_TOP)
set_target_properties(SharedTop StaticTop PROPERTIES
OPTIMIZE_DEPENDENCIES TRUE)
endif()
if(OPTIMIZE_MIDDLE)
set_target_properties(StaticMiddle PROPERTIES
OPTIMIZE_DEPENDENCIES TRUE)
endif()
include(WriteTargets.cmake)
write_targets()