cmake/utilities.cmake (129 lines of code) (raw):
macro(generate_pkgconfig_link_flags LIBS_LIST OUTPUT_VAR)
set(${OUTPUT_VAR} "")
foreach(LIB IN LISTS ${LIBS_LIST})
if(${OUTPUT_VAR})
set(${OUTPUT_VAR} "${${OUTPUT_VAR}} -l${LIB}")
else()
set(${OUTPUT_VAR} "-l${LIB}")
endif()
endforeach()
endmacro()
# this function is based on the unity build function described at: https://cheind.wordpress.com/2009/12/10/reducing-compilation-time-unity-builds/
function(enable_unity_build UNITY_SUFFIX SOURCE_FILES)
set(MAX_TRANSLATION_UNITS_PER_UNITY_UNIT 500)
set(files ${${SOURCE_FILES}})
list(LENGTH files length)
set(UNITY_FILE_COUNT "")
if (length GREATER ${MAX_TRANSLATION_UNITS_PER_UNITY_UNIT})
set(UNITY_FILE_COUNT 1)
endif()
set(SOURCE_FILE_COUNT 0)
# Generate a unique filename for the unity build translation unit
set(unity_build_file ${CMAKE_CURRENT_BINARY_DIR}/ub${UNITY_FILE_COUNT}_${UNITY_SUFFIX}.cpp)
# Exclude all translation units from compilation
set_source_files_properties(${files} PROPERTIES HEADER_FILE_ONLY true)
# Open the ub file
if (length GREATER ${MAX_TRANSLATION_UNITS_PER_UNITY_UNIT})
FILE(WRITE ${unity_build_file} "// Unity Build Volume ${UNITY_FILE_COUNT} generated by CMake\n")
else()
FILE(WRITE ${unity_build_file} "// Unity Build generated by CMake\n")
endif()
# Complement list of translation units with the name of ub
list(APPEND ${SOURCE_FILES} "${unity_build_file}")
set(${SOURCE_FILES} ${${SOURCE_FILES}} PARENT_SCOPE)
set(CLIENT_UB_VOLUME 0)
set(CLIENT_FILE_LIST "")
foreach(source_file ${files} )
if ("${source_file}" MATCHES ".*source\/.*Client([0-9]+)?.cpp$")
list(APPEND CLIENT_FILE_LIST "${source_file}")
else ()
if (SOURCE_FILE_COUNT EQUAL ${MAX_TRANSLATION_UNITS_PER_UNITY_UNIT})
MATH(EXPR UNITY_FILE_COUNT "${UNITY_FILE_COUNT}+1")
set(SOURCE_FILE_COUNT 0)
set(unity_build_file ${CMAKE_CURRENT_BINARY_DIR}/ub${UNITY_FILE_COUNT}_${UNITY_SUFFIX}.cpp)
# Open the ub file
FILE(WRITE ${unity_build_file} "// Unity Build Volume ${UNITY_FILE_COUNT} generated by CMake\n")
# Complement list of translation units with the name of ub
list(APPEND ${SOURCE_FILES} "${unity_build_file}")
set(${SOURCE_FILES} ${${SOURCE_FILES}} PARENT_SCOPE)
endif()
# Add include statement for each translation unit
FILE( APPEND ${unity_build_file} "#include <${source_file}>\n")
MATH(EXPR SOURCE_FILE_COUNT "${SOURCE_FILE_COUNT}+1")
endif ()
endforeach(source_file)
set(CLIENT_UB_COUNT 1)
foreach(client_file ${CLIENT_FILE_LIST})
if (CLIENT_UB_COUNT GREATER UNITY_FILE_COUNT)
set(CLIENT_UB_COUNT 1)
endif ()
if (UNITY_FILE_COUNT STREQUAL "")
set(client_build_file ${CMAKE_CURRENT_BINARY_DIR}/ub_${UNITY_SUFFIX}.cpp)
else ()
set(client_build_file ${CMAKE_CURRENT_BINARY_DIR}/ub${CLIENT_UB_COUNT}_${UNITY_SUFFIX}.cpp)
endif ()
FILE(APPEND ${client_build_file} "#include <${client_file}>\n")
MATH(EXPR CLIENT_UB_COUNT "${CLIENT_UB_COUNT}+1")
endforeach(client_file)
endfunction(enable_unity_build)
macro(setup_install)
if(SIMPLE_INSTALL)
configure_file("${AWS_NATIVE_SDK_ROOT}/toolchains/pkg-config.pc.in" "${PROJECT_NAME}.pc" @ONLY)
install( TARGETS ${PROJECT_NAME}
EXPORT "${PROJECT_NAME}-targets"
ARCHIVE DESTINATION ${ARCHIVE_DIRECTORY}
LIBRARY DESTINATION ${LIBRARY_DIRECTORY}
RUNTIME DESTINATION ${BINARY_DIRECTORY} )
if (BUILD_SHARED_LIBS)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
DESTINATION ${LIBRARY_DIRECTORY}/pkgconfig)
endif()
else()
if(PLATFORM_CUSTOM)
install_custom_library(${PROJECT_NAME})
else()
install (TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION ${ARCHIVE_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME}
LIBRARY DESTINATION ${LIBRARY_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME}
RUNTIME DESTINATION ${BINARY_DIRECTORY}/${SDK_INSTALL_BINARY_PREFIX}/${PLATFORM_INSTALL_QUALIFIER}/\${CMAKE_INSTALL_CONFIG_NAME})
endif()
endif()
endmacro()
macro(do_packaging)
if(SIMPLE_INSTALL)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)
# TODO: Re-enable export after Aws Common Runtime exports their libraries.
# export(EXPORT "${PROJECT_NAME}-targets"
# FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake"
# )
if(${PROJECT_NAME} STREQUAL "aws-cpp-sdk-core")
configure_file(
"${AWS_NATIVE_SDK_ROOT}/toolchains/core-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
@ONLY)
else()
configure_file(
"${AWS_NATIVE_SDK_ROOT}/toolchains/cmakeProjectConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
@ONLY)
endif()
set(ConfigPackageLocation "${LIBRARY_DIRECTORY}/cmake/${PROJECT_NAME}")
install(EXPORT "${PROJECT_NAME}-targets"
FILE "${PROJECT_NAME}-targets.cmake"
DESTINATION ${ConfigPackageLocation}
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
DESTINATION
${ConfigPackageLocation}
COMPONENT
Devel)
endif()
endmacro()