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()