Skip to content

Commit a9e34da

Browse files
committed
A few CMake improvements (see below)
- 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 <[email protected]>
1 parent 25b1920 commit a9e34da

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

CMakeLists.txt

+25-13
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,6 +84,12 @@ 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")
@@ -94,11 +103,13 @@ install(FILES
94103
install(FILES "include/aws/logging/logging.h"
95104
DESTINATION "include/aws/logging")
96105

106+
include(GNUInstallDirs)
97107
install(TARGETS ${PROJECT_NAME}
98108
EXPORT ${PROJECT_NAME}-targets
99-
ARCHIVE DESTINATION lib
100-
LIBRARY DESTINATION lib
101-
RUNTIME DESTINATION bin)
109+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
110+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
111+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
112+
)
102113

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

113124
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
125+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
114126
DESTINATION "lib/${PROJECT_NAME}/cmake/")
115127

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

0 commit comments

Comments
 (0)