From e12bc108405dc02bdb035de9a99af8fd2fda98a1 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Tue, 23 Oct 2018 03:53:54 +0200 Subject: [PATCH] cmake: add an option to build libsuperderpy as a static library Might be useful when packaging games for distribution repositories. --- cmake/libsuperderpy.cmake | 12 +++++++++--- src/CMakeLists.txt | 7 ++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/cmake/libsuperderpy.cmake b/cmake/libsuperderpy.cmake index 00122f7..4dc0bba 100644 --- a/cmake/libsuperderpy.cmake +++ b/cmake/libsuperderpy.cmake @@ -26,6 +26,8 @@ if (NOT LIBSUPERDERPY_CONFIG_INCLUDED) endif() endif() + set(LIBSUPERDERPY_STATIC "no" CACHE STRING "Compile and link libsuperderpy as a static library." ) + set(LIBSUPERDERPY_STATIC_DEPS "no" CACHE STRING "Link dependencies (e.g. Allegro) statically." ) if(LIBSUPERDERPY_STATIC_DEPS) SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a) @@ -141,10 +143,14 @@ endif() set_target_properties("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" PROPERTIES PREFIX "") if (NOT EMSCRIPTEN) - target_link_libraries("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" ${ALLEGRO5_LIBRARIES} ${ALLEGRO5_FONT_LIBRARIES} ${ALLEGRO5_TTF_LIBRARIES} ${ALLEGRO5_PRIMITIVES_LIBRARIES} ${ALLEGRO5_AUDIO_LIBRARIES} ${ALLEGRO5_ACODEC_LIBRARIES} ${ALLEGRO5_VIDEO_LIBRARIES} ${ALLEGRO5_IMAGE_LIBRARIES} ${ALLEGRO5_COLOR_LIBRARIES} m libsuperderpy) + target_link_libraries("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" ${ALLEGRO5_LIBRARIES} ${ALLEGRO5_FONT_LIBRARIES} ${ALLEGRO5_TTF_LIBRARIES} ${ALLEGRO5_PRIMITIVES_LIBRARIES} ${ALLEGRO5_AUDIO_LIBRARIES} ${ALLEGRO5_ACODEC_LIBRARIES} ${ALLEGRO5_VIDEO_LIBRARIES} ${ALLEGRO5_IMAGE_LIBRARIES} ${ALLEGRO5_COLOR_LIBRARIES} m) if (TARGET libsuperderpy-${LIBSUPERDERPY_GAMENAME}) target_link_libraries("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" libsuperderpy-${LIBSUPERDERPY_GAMENAME}) + else (TARGET libsuperderpy-${LIBSUPERDERPY_GAMENAME}) + if (NOT LIBSUPERDERPY_STATIC) + target_link_libraries("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" libsuperderpy) + endif (NOT LIBSUPERDERPY_STATIC) endif(TARGET libsuperderpy-${LIBSUPERDERPY_GAMENAME}) endif (NOT EMSCRIPTEN) @@ -166,9 +172,9 @@ endif() MACRO(libsuperderpy_copy EXECUTABLE) - if (NOT APPLE AND NOT ANDROID) + if (NOT APPLE AND NOT ANDROID AND NOT LIBSUPERDERPY_STATIC) add_custom_command(TARGET "${EXECUTABLE}" PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "../libsuperderpy/src/libsuperderpy${CMAKE_SHARED_LIBRARY_SUFFIX}" $) - endif (NOT APPLE AND NOT ANDROID) + endif (NOT APPLE AND NOT ANDROID AND NOT LIBSUPERDERPY_STATIC) ENDMACRO() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2f306b4..b6a2694 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -15,7 +15,12 @@ if (EMSCRIPTEN) list(APPEND SRC_LIST emscripten-audio-stream.c) endif() -add_library("libsuperderpy" SHARED ${SRC_LIST}) +if (LIBSUPERDERPY_STATIC) + add_library("libsuperderpy" STATIC ${SRC_LIST}) + set_property(TARGET libsuperderpy PROPERTY POSITION_INDEPENDENT_CODE ON) +else (LIBSUPERDERPY_STATIC) + add_library("libsuperderpy" SHARED ${SRC_LIST}) +endif (LIBSUPERDERPY_STATIC) SET_TARGET_PROPERTIES("libsuperderpy" PROPERTIES PREFIX "")