Skip to content

Commit

Permalink
A few CMake improvements (see below)
Browse files Browse the repository at this point in the history
- Set the SONAME on the library to generate correct symlinks
- Set visibility of inline functions to hidden (didn't use CMake since
this library is linux only)
- Use the built-in LTO detection mechanism instead of rolling my own

Signed-off-by: Marco Magdy <mmagdy@gmail.com>
  • Loading branch information
marcomagdy committed Dec 3, 2019
1 parent 25b1920 commit a9e34da
Showing 1 changed file with 25 additions and 13 deletions.
38 changes: 25 additions & 13 deletions CMakeLists.txt
@@ -1,14 +1,12 @@
cmake_minimum_required(VERSION 3.5)
cmake_minimum_required(VERSION 3.9)
set(CMAKE_CXX_STANDARD 11)
project(aws-lambda-runtime
VERSION 0.2.4
LANGUAGES CXX)

option(ENABLE_TESTS "Enables building the test project, requires AWS C++ SDK." OFF)

include(CheckCXXCompilerFlag)

check_cxx_compiler_flag("-Wl,-flto" LTO_CAPABLE)
include(CheckIPOSupported)

add_library(${PROJECT_NAME}
"src/logging.cpp"
Expand All @@ -17,12 +15,21 @@ add_library(${PROJECT_NAME}
"${CMAKE_CURRENT_BINARY_DIR}/version.cpp"
)

set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
set_target_properties(${PROJECT_NAME} PROPERTIES
SOVERSION 0
VERSION ${PROJECT_VERSION})

target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)

check_ipo_supported(RESULT has_lto OUTPUT lto_check_output)
if(has_lto)
set_property(TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
else()
message(WARNING "Link-time optimization (LTO) is not supported: ${lto_check_output}")
endif()

find_package(CURL REQUIRED)
if (CMAKE_VERSION VERSION_LESS 3.12)
target_link_libraries(${PROJECT_NAME} PRIVATE ${CURL_LIBRARIES})
Expand All @@ -36,6 +43,7 @@ target_compile_options(${PROJECT_NAME} PRIVATE
"-fno-exceptions"
"-fno-rtti"
"-fvisibility=hidden"
"-fvisibility-inlines-hidden"
"-Wall"
"-Wextra"
"-Werror"
Expand Down Expand Up @@ -64,11 +72,6 @@ else ()
target_compile_definitions(${PROJECT_NAME} PRIVATE "AWS_LAMBDA_LOG=0")
endif()

if ((BUILD_SHARED_LIBS) AND (LTO_CAPABLE))
target_compile_options(${PROJECT_NAME} PRIVATE "-flto")
target_link_libraries(${PROJECT_NAME} PRIVATE "-flto")
endif()

#tests
if (ENABLE_TESTS)
enable_testing()
Expand All @@ -81,6 +84,12 @@ configure_file(
"${CMAKE_CURRENT_BINARY_DIR}/version.cpp"
NEWLINE_STYLE LF)

include (CMakePackageConfigHelpers)

write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion)

# installation
install(FILES "include/aws/http/response.h"
DESTINATION "include/aws/http")
Expand All @@ -94,11 +103,13 @@ install(FILES
install(FILES "include/aws/logging/logging.h"
DESTINATION "include/aws/logging")

include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}-targets
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

configure_file("${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
Expand All @@ -111,6 +122,7 @@ install(EXPORT "${PROJECT_NAME}-targets"
NAMESPACE AWS::)

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
DESTINATION "lib/${PROJECT_NAME}/cmake/")

install(PROGRAMS "${CMAKE_SOURCE_DIR}/packaging/packager"
Expand Down

0 comments on commit a9e34da

Please sign in to comment.