Skip to content

Commit b81d490

Browse files
committed
A few CMake improvements (#68)
- 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
1 parent 4e820f9 commit b81d490

File tree

1 file changed

+32
-15
lines changed

1 file changed

+32
-15
lines changed

CMakeLists.txt

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
cmake_minimum_required(VERSION 3.5)
1+
cmake_minimum_required(VERSION 3.9)
22
set(CMAKE_CXX_STANDARD 11)
33
project(aws-lambda-runtime
44
VERSION 0.2.4
55
LANGUAGES CXX)
66

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

9-
include(CheckCXXCompilerFlag)
10-
11-
check_cxx_compiler_flag("-Wl,-flto" LTO_CAPABLE)
9+
include(CheckIPOSupported)
1210

1311
add_library(${PROJECT_NAME}
1412
"src/logging.cpp"
@@ -17,12 +15,21 @@ add_library(${PROJECT_NAME}
1715
"${CMAKE_CURRENT_BINARY_DIR}/version.cpp"
1816
)
1917

20-
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
18+
set_target_properties(${PROJECT_NAME} PROPERTIES
19+
SOVERSION 0
20+
VERSION ${PROJECT_VERSION})
2121

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

26+
check_ipo_supported(RESULT has_lto OUTPUT lto_check_output)
27+
if(has_lto)
28+
set_property(TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
29+
else()
30+
message(WARNING "Link-time optimization (LTO) is not supported: ${lto_check_output}")
31+
endif()
32+
2633
find_package(CURL REQUIRED)
2734
if (CMAKE_VERSION VERSION_LESS 3.12)
2835
target_link_libraries(${PROJECT_NAME} PRIVATE ${CURL_LIBRARIES})
@@ -36,6 +43,7 @@ target_compile_options(${PROJECT_NAME} PRIVATE
3643
"-fno-exceptions"
3744
"-fno-rtti"
3845
"-fvisibility=hidden"
46+
"-fvisibility-inlines-hidden"
3947
"-Wall"
4048
"-Wextra"
4149
"-Werror"
@@ -64,11 +72,6 @@ else ()
6472
target_compile_definitions(${PROJECT_NAME} PRIVATE "AWS_LAMBDA_LOG=0")
6573
endif()
6674

67-
if ((BUILD_SHARED_LIBS) AND (LTO_CAPABLE))
68-
target_compile_options(${PROJECT_NAME} PRIVATE "-flto")
69-
target_link_libraries(${PROJECT_NAME} PRIVATE "-flto")
70-
endif()
71-
7275
#tests
7376
if (ENABLE_TESTS)
7477
enable_testing()
@@ -81,24 +84,37 @@ configure_file(
8184
"${CMAKE_CURRENT_BINARY_DIR}/version.cpp"
8285
NEWLINE_STYLE LF)
8386

87+
include (CMakePackageConfigHelpers)
88+
89+
write_basic_package_version_file("${PROJECT_NAME}-config-version.cmake"
90+
VERSION ${PROJECT_VERSION}
91+
COMPATIBILITY SameMajorVersion)
92+
8493
# installation
8594
install(FILES "include/aws/http/response.h"
8695
DESTINATION "include/aws/http")
8796

88-
install(FILES
97+
install(FILES
8998
"include/aws/lambda-runtime/runtime.h"
9099
"include/aws/lambda-runtime/version.h"
91100
"include/aws/lambda-runtime/outcome.h"
92-
DESTINATION "include/aws/lambda-runtime")
101+
DESTINATION "include/aws/lambda-runtime"
102+
COMPONENT ${PROJECT_NAME}-Development)
93103

94104
install(FILES "include/aws/logging/logging.h"
95105
DESTINATION "include/aws/logging")
96106

107+
include(GNUInstallDirs)
97108
install(TARGETS ${PROJECT_NAME}
98109
EXPORT ${PROJECT_NAME}-targets
99-
ARCHIVE DESTINATION lib
100-
LIBRARY DESTINATION lib
101-
RUNTIME DESTINATION bin)
110+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
111+
COMPONENT ${PROJECT_NAME}-Development
112+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
113+
COMPONENT ${PROJECT_NAME}-Runtime
114+
NAMELINK_COMPONENT ${PROJECT_NAME}-Developemnt
115+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
116+
COMPONENT ${PROJECT_NAME}-Runtime
117+
)
102118

103119
configure_file("${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake"
104120
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
@@ -111,6 +127,7 @@ install(EXPORT "${PROJECT_NAME}-targets"
111127
NAMESPACE AWS::)
112128

113129
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
130+
${PROJECT_NAME}-config-version.cmake
114131
DESTINATION "lib/${PROJECT_NAME}/cmake/")
115132

116133
install(PROGRAMS "${CMAKE_SOURCE_DIR}/packaging/packager"

0 commit comments

Comments
 (0)