diff options
author | Tuomas Virtanen <katajakasa@gmail.com> | 2020-05-02 00:02:51 +0300 |
---|---|---|
committer | Tuomas Virtanen <katajakasa@gmail.com> | 2020-05-02 00:02:51 +0300 |
commit | afeb991b5b2198ad85e2fe2f9b41cf89ebc70638 (patch) | |
tree | 52e8968a75d35f42a2e5effdc7a73b873ab74bf8 | |
parent | a629818ab609d9615f76fd0b2976b951cc13d8b6 (diff) |
Allow switching shared and static builds
-rw-r--r-- | CMakeLists.txt | 100 | ||||
-rw-r--r-- | README.md | 2 |
2 files changed, 77 insertions, 25 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index f048ee9..87a2efc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,24 @@ set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -Os -DNDEBUG") option(BUILD_EXAMPLES "Build examples" OFF) option(USE_DYNAMIC_LIBASS "Use dynamically loaded libass" OFF) option(USE_ASAN "Use AddressSanitizer" OFF) +option(BUILD_SHARED "Build shared library" ON) +option(BUILD_STATIC "Build static library" ON) + +if(NOT BUILD_SHARED AND NOT BUILD_STATIC) + message(FATAL_ERROR "Nothing to build, set BUILD_SHARED and/or BUILD_STATIC.") +endif() + +if(BUILD_SHARED) + message(STATUS "Building shared libraries") +else() + message(STATUS "NOT building shared libraries") +endif() + +if(BUILD_STATIC) + message(STATUS "Building static libraries") +else() + message(STATUS "NOT building static libraries") +endif() find_package(SDL2 REQUIRED) find_package(ffmpeg COMPONENTS avcodec avformat avutil swscale swresample) @@ -53,32 +71,48 @@ endif() FILE(GLOB_RECURSE SOURCES "src/*.c") FILE(GLOB INSTALL_HEADERS "include/kitchensink/*.h") -add_library(SDL_kitchensink SHARED ${SOURCES}) -add_library(SDL_kitchensink_static STATIC ${SOURCES}) +include_directories(${INCLUDES}) -set_target_properties(SDL_kitchensink PROPERTIES VERSION ${KIT_VERSION}) -set_target_properties(SDL_kitchensink PROPERTIES SOVERSION ${KIT_VERSION_MAJOR}) +if(USE_ASAN) + set(LIBRARIES asan ${LIBRARIES}) + message(STATUS "DEVELOPMENT: AddressSanitizer enabled!") +endif() -set_target_properties(SDL_kitchensink PROPERTIES DEBUG_POSTFIX "d") -set_target_properties(SDL_kitchensink_static PROPERTIES DEBUG_POSTFIX "d") +set(INSTALL_TARGETS "") -target_compile_definitions(SDL_kitchensink PRIVATE "KIT_DLL;KIT_DLL_EXPORTS") -target_compile_options(SDL_kitchensink PRIVATE "-fvisibility=hidden") +if(BUILD_SHARED) + add_library(SDL_kitchensink SHARED ${SOURCES}) + target_link_libraries(SDL_kitchensink ${LIBRARIES}) -set_property(TARGET SDL_kitchensink PROPERTY C_STANDARD 99) -set_property(TARGET SDL_kitchensink_static PROPERTY C_STANDARD 99) + set_target_properties(SDL_kitchensink PROPERTIES VERSION ${KIT_VERSION}) + set_target_properties(SDL_kitchensink PROPERTIES SOVERSION ${KIT_VERSION_MAJOR}) + set_target_properties(SDL_kitchensink PROPERTIES DEBUG_POSTFIX "d") -if(USE_ASAN) - set(LIBRARIES asan ${LIBRARIES}) - target_compile_options(SDL_kitchensink PRIVATE "-fsanitize=address") - message(STATUS "DEVELOPMENT: AddressSanitizer enabled!") + target_compile_definitions(SDL_kitchensink PRIVATE "KIT_DLL;KIT_DLL_EXPORTS") + target_compile_options(SDL_kitchensink PRIVATE "-fvisibility=hidden") + + set_property(TARGET SDL_kitchensink PROPERTY C_STANDARD 99) + + if(USE_ASAN) + target_compile_options(SDL_kitchensink PRIVATE "-fsanitize=address") + endif() + + set(INSTALL_TARGETS SDL_kitchensink ${INSTALL_TARGETS}) endif() -include_directories(${INCLUDES}) -target_link_libraries(SDL_kitchensink ${LIBRARIES}) +if(BUILD_STATIC) + add_library(SDL_kitchensink_static STATIC ${SOURCES}) + set_target_properties(SDL_kitchensink_static PROPERTIES DEBUG_POSTFIX "d") + set_property(TARGET SDL_kitchensink_static PROPERTY C_STANDARD 99) -set(PKG_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/SDL_kitchensink.pc") + if(USE_ASAN) + target_compile_options(SDL_kitchensink_static PRIVATE "-fsanitize=address") + endif() + set(INSTALL_TARGETS SDL_kitchensink_static ${INSTALL_TARGETS}) +endif() + +set(PKG_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/SDL_kitchensink.pc") configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/pkg-config.pc.in" ${PKG_CONFIG_FILE} @@ -106,20 +140,36 @@ if(BUILD_EXAMPLES) set_property(TARGET custom PROPERTY C_STANDARD 99) set_property(TARGET rwops PROPERTY C_STANDARD 99) - target_link_libraries(audio SDL_kitchensink_static ${LIBRARIES}) - target_link_libraries(complex SDL_kitchensink_static ${LIBRARIES}) - target_link_libraries(simple SDL_kitchensink_static ${LIBRARIES}) - target_link_libraries(custom SDL_kitchensink_static ${LIBRARIES}) - target_link_libraries(rwops SDL_kitchensink_static ${LIBRARIES}) + if(BUILD_STATIC) + target_link_libraries(audio SDL_kitchensink_static ${LIBRARIES}) + target_link_libraries(complex SDL_kitchensink_static ${LIBRARIES}) + target_link_libraries(simple SDL_kitchensink_static ${LIBRARIES}) + target_link_libraries(custom SDL_kitchensink_static ${LIBRARIES}) + target_link_libraries(rwops SDL_kitchensink_static ${LIBRARIES}) + else() + target_link_libraries(audio SDL_kitchensink ${SDL2_LIBRARIES}) + target_link_libraries(complex SDL_kitchensink ${SDL2_LIBRARIES}) + target_link_libraries(simple SDL_kitchensink ${SDL2_LIBRARIES}) + target_link_libraries(custom SDL_kitchensink ${SDL2_LIBRARIES}) + target_link_libraries(rwops SDL_kitchensink ${SDL2_LIBRARIES}) + endif() + + if(USE_ASAN) + target_compile_options(audio PRIVATE "-fsanitize=address") + target_compile_options(complex PRIVATE "-fsanitize=address") + target_compile_options(simple PRIVATE "-fsanitize=address") + target_compile_options(custom PRIVATE "-fsanitize=address") + target_compile_options(rwops PRIVATE "-fsanitize=address") + endif() endif() # documentation target add_custom_target(docs COMMAND doxygen WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) # Installation -install(FILES ${PKG_CONFIG_FILE} DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) -install(FILES ${INSTALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/kitchensink) -INSTALL(TARGETS SDL_kitchensink SDL_kitchensink_static +INSTALL(FILES ${PKG_CONFIG_FILE} DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +INSTALL(FILES ${INSTALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/kitchensink) +INSTALL(TARGETS ${INSTALL_TARGETS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -52,6 +52,8 @@ pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-ffmpeg mingw-w64-x86_64-libass ## 2. Compiling By default, both static and dynamic libraries are built. +* Set BUILD_STATIC off if you don't want to build static library +* Set BUILD_SHARED off if you don't want to build shared library * Dynamic library is called libSDL_kitchensink.dll or .so * Static library is called libSDL_kitchensink_static.a * If you build in debug mode (```-DCMAKE_BUILD_TYPE=Debug```), libraries will be postfixed with 'd'. |