summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTuomas Virtanen <katajakasa@gmail.com>2020-05-02 00:59:31 +0300
committerGitHub <noreply@github.com>2020-05-02 00:59:31 +0300
commit243140385848145c53b5b2c209f715be864bcecb (patch)
tree8521d7e3e396cb8c987fac2249873af004a6dfc5
parenta629818ab609d9615f76fd0b2976b951cc13d8b6 (diff)
parent098615519dd7b4e318aef19fa78ddbc3f68ffd55 (diff)
Merge pull request #61 from katajakasa/allow-selecting-build-types
Allow switching shared and static builds
-rw-r--r--CMakeLists.txt105
-rw-r--r--README.md4
2 files changed, 83 insertions, 26 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f048ee9..9775d4d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,6 +22,28 @@ 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()
+
+if(USE_ASAN)
+ message(STATUS "DEVELOPMENT: AddressSanitizer enabled!")
+endif()
find_package(SDL2 REQUIRED)
find_package(ffmpeg COMPONENTS avcodec avformat avutil swscale swresample)
@@ -53,32 +75,46 @@ 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})
+set(INSTALL_TARGETS "")
-set_target_properties(SDL_kitchensink PROPERTIES DEBUG_POSTFIX "d")
-set_target_properties(SDL_kitchensink_static PROPERTIES DEBUG_POSTFIX "d")
+if(BUILD_SHARED)
+ add_library(SDL_kitchensink SHARED ${SOURCES})
-target_compile_definitions(SDL_kitchensink PRIVATE "KIT_DLL;KIT_DLL_EXPORTS")
-target_compile_options(SDL_kitchensink PRIVATE "-fvisibility=hidden")
+ if(USE_ASAN)
+ target_compile_options(SDL_kitchensink PRIVATE "-fsanitize=address")
+ target_link_libraries(SDL_kitchensink asan)
+ endif()
-set_property(TARGET SDL_kitchensink PROPERTY C_STANDARD 99)
-set_property(TARGET SDL_kitchensink_static PROPERTY C_STANDARD 99)
+ target_link_libraries(SDL_kitchensink ${LIBRARIES})
-if(USE_ASAN)
- set(LIBRARIES asan ${LIBRARIES})
- target_compile_options(SDL_kitchensink PRIVATE "-fsanitize=address")
- message(STATUS "DEVELOPMENT: AddressSanitizer enabled!")
+ 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")
+
+ 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)
+
+ 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(PKG_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/SDL_kitchensink.pc")
+ if(USE_ASAN)
+ target_compile_options(SDL_kitchensink_static PRIVATE "-fsanitize=address")
+ endif()
+ set_target_properties(SDL_kitchensink_static PROPERTIES DEBUG_POSTFIX "d")
+ set_property(TARGET SDL_kitchensink_static PROPERTY C_STANDARD 99)
+
+ 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 +142,39 @@ 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 we are building static, just link all libraries (ffmpeg, sdl, etc.)
+ # If building shared, link shared kitchensink + SDL2 (ffmpeg gets pulled by kitchensink)
+ if(BUILD_STATIC)
+ set(EXAMPLE_LIBRARIES SDL_kitchensink_static ${LIBRARIES})
+ else()
+ set(EXAMPLE_LIBRARIES SDL_kitchensink ${SDL2_LIBRARIES})
+ endif()
+ if(USE_ASAN)
+ set(EXAMPLE_LIBRARIES asan ${EXAMPLE_LIBRARIES})
+ endif()
+
+ target_link_libraries(audio ${EXAMPLE_LIBRARIES})
+ target_link_libraries(complex ${EXAMPLE_LIBRARIES})
+ target_link_libraries(simple ${EXAMPLE_LIBRARIES})
+ target_link_libraries(custom ${EXAMPLE_LIBRARIES})
+ target_link_libraries(rwops ${EXAMPLE_LIBRARIES})
+
+ 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}
diff --git a/README.md b/README.md
index d2745ce..744bad7 100644
--- a/README.md
+++ b/README.md
@@ -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'.
@@ -88,7 +90,7 @@ supported on all OSes (eg. windows).
After building, you can run with the following (make sure to set correct llvm-symbolizer path):
```
-ASAN_OPTIONS=symbolize=1 ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer ./examplevideo <my videofile>
+ASAN_OPTIONS=symbolize=1 ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer ./complex <my videofile>
```
## 3. Why the name SDL_kitchensink