From 4e955731d3a6ac344a593ee9d9c5d00982846adf Mon Sep 17 00:00:00 2001 From: Daan De Meyer <daan.j.demeyer@gmail.com> Date: Fri, 14 Jun 2019 22:08:13 +0200 Subject: [PATCH] CMake improvements. - Allow specifying shared or static with BUILD_SHARED_LIBS. - Add include directories as PUBLIC to library targets. This enables using ngtcp2 with CMake `add_subdirectory`. --- CMakeLists.txt | 4 ++++ lib/CMakeLists.txt | 19 ++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c654418..134fdebb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,10 @@ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. cmake_minimum_required(VERSION 3.1) + +# Allow setting VISIBILITY_PRESET on static library targets without warning. +cmake_policy(SET CMP0063 NEW) + # XXX using 0.1.90 instead of 0.1.0-DEV project(ngtcp2 VERSION 0.1.90) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1a07432c..b84aeff5 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -24,11 +24,6 @@ add_subdirectory(includes) -include_directories( - "${CMAKE_CURRENT_SOURCE_DIR}/includes" - "${CMAKE_CURRENT_BINARY_DIR}/includes" -) - add_definitions(-DBUILDING_NGTCP2) set(ngtcp2_SOURCES @@ -61,22 +56,32 @@ set(ngtcp2_SOURCES ngtcp2_pv.c ) +set(ngtcp2_INCLUDE_DIRS + "${CMAKE_CURRENT_SOURCE_DIR}/includes" + "${CMAKE_CURRENT_BINARY_DIR}/includes" +) + # Public shared library -add_library(ngtcp2 SHARED ${ngtcp2_SOURCES}) +add_library(ngtcp2 ${ngtcp2_SOURCES}) set_target_properties(ngtcp2 PROPERTIES COMPILE_FLAGS "${WARNCFLAGS}" VERSION ${LT_VERSION} SOVERSION ${LT_SOVERSION} C_VISIBILITY_PRESET hidden ) +target_include_directories(ngtcp2 PUBLIC ${ngtcp2_INCLUDE_DIRS}) +if(NOT BUILD_SHARED_LIBS) + target_compile_definitions(ngtcp2 PUBLIC "-DNGTCP2_STATICLIB") +endif() + if(HAVE_CUNIT) # Static library (for unittests because of symbol visibility) add_library(ngtcp2_static STATIC ${ngtcp2_SOURCES}) set_target_properties(ngtcp2_static PROPERTIES COMPILE_FLAGS "${WARNCFLAGS}" VERSION ${LT_VERSION} SOVERSION ${LT_SOVERSION} - ARCHIVE_OUTPUT_NAME ngtcp2 ) + target_include_directories(ngtcp2_static PUBLIC ${ngtcp2_INCLUDE_DIRS}) target_compile_definitions(ngtcp2_static PUBLIC "-DNGTCP2_STATICLIB") endif() -- GitLab