--- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,8 @@ # it prominent in the GUI. option(BUILD_SHARED_LIBS "Build shared libraries(DLLs)." OFF) +option(BUILD_STATIC_LIBS "Build static libraries." ON) + option(SNAPPY_BUILD_TESTS "Build Snappy's own tests." ON) option(SNAPPY_FUZZING_BUILD "Build Snappy for fuzzing." OFF) @@ -51,6 +53,10 @@ option(SNAPPY_INSTALL "Install Snappy's header and library" ON) +if(NOT BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) + set(BUILD_STATIC_LIBS OFF) +endif () + include(TestBigEndian) test_big_endian(SNAPPY_IS_BIG_ENDIAN) @@ -166,19 +172,28 @@ "snappy-stubs-public.h.in" "${PROJECT_BINARY_DIR}/snappy-stubs-public.h") +# When BUILD_SHARED_LIBS is: +# ON it will generate a SHARED library +# OFF it will generate a STATIC library add_library(snappy "") -target_sources(snappy - PRIVATE + +# Used to generate both lib types +if (BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) + add_library(snappy_static STATIC "") + set_target_properties(snappy_static PROPERTIES OUTPUT_NAME snappy) + install(TARGETS snappy_static DESTINATION ${CMAKE_INSTALL_LIBDIR}) +endif () + +set(SNAPPY_SOURCE_PRIVATE "snappy-internal.h" "snappy-stubs-internal.h" "snappy-c.cc" "snappy-sinksource.cc" "snappy-stubs-internal.cc" "snappy.cc" - "${PROJECT_BINARY_DIR}/config.h" + "${PROJECT_BINARY_DIR}/config.h") - # Only CMake 3.3+ supports PUBLIC sources in targets exported by "install". - $<$:PUBLIC> +set(SNAPPY_SOURCE_PUBLIC $ $ $ @@ -186,18 +201,32 @@ $ $ $ - $ -) -target_include_directories(snappy - PUBLIC + $) + +set(SNAPPY_INCLUDE_DIRS $ $ - $ -) + $) + +# Only CMake 3.3+ supports PUBLIC sources in targets exported by "install". +target_sources(snappy PRIVATE ${SNAPPY_SOURCE_PRIVATE} + $<$:PUBLIC> ${SNAPPY_SOURCE_PUBLIC}) + +target_include_directories(snappy PUBLIC ${SNAPPY_INCLUDE_DIRS}) + +target_compile_definitions(snappy PRIVATE -DHAVE_CONFIG_H) + +# Only CMake 3.3+ supports PUBLIC sources in targets exported by "install". +target_sources(snappy_static PRIVATE ${SNAPPY_SOURCE_PRIVATE} + $<$:PUBLIC> ${SNAPPY_SOURCE_PUBLIC}) + +target_include_directories(snappy_static PUBLIC ${SNAPPY_INCLUDE_DIRS}) + +target_compile_definitions(snappy_static PRIVATE -DHAVE_CONFIG_H) + set_target_properties(snappy PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) -target_compile_definitions(snappy PRIVATE -DHAVE_CONFIG_H) if(BUILD_SHARED_LIBS) set_target_properties(snappy PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) endif(BUILD_SHARED_LIBS)