diff --git a/CMakeLists.txt b/CMakeLists.txt index 5da23ca2..6079ee91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,26 @@ foreach (_variableName ${_variableNames}) endif() endforeach() +# a possible list of libraries that have "optimized" and "debug" between them +# returns the library that matches the requested build profile +function(etl_find_lib_path list _out) + if(DEBUG_BUILD) + set(_what "debug") + else() + set(_what "optimized") + endif() + + list(FIND ${list} "${_what}" _find_index) + if ("${_find_index}" EQUAL "-1") + set(${_out} ${list} PARENT_SCOPE) + return() + endif() + + math(EXPR _find_index "${_find_index}+1") + list(GET ${list} ${_find_index} _found_item) + set(${_out} ${_found_item} PARENT_SCOPE) +endfunction() + if(UNIX) if(CROSS_COMPILE32) @@ -87,6 +107,8 @@ if(FEATURE_SSL AND BUNDLED_WOLFSSL AND (BUILD_CLIENT OR BUILD_SERVER)) set(WOLFSSL_FLAGS "${CMAKE_C_FLAGS} -DOPENSSL_ALL=1 -DWOLFSSL_DES_ECB=1 -DHAVE_OCSP=1 -DHAVE_CRL=1") endif() + etl_find_lib_path(WOLFSSL_BUNDLED_LIBRARY _WOLFSSL_OUTPUT) + ExternalProject_Add(bundled_wolfssl DOWNLOAD_DIR ${LIBS_DOWNLOAD_DIR} URL https://github.com/wolfSSL/wolfssl/archive/v5.0.0-stable.tar.gz @@ -94,7 +116,7 @@ if(FEATURE_SSL AND BUNDLED_WOLFSSL AND (BUILD_CLIENT OR BUILD_SERVER)) SOURCE_DIR "${LIBS_DOWNLOAD_SRC_DIR}/wolfssl" PATCH_COMMAND ${WOLFSSL_PATCH_COMMAND} BINARY_DIR ${LIBS_BINARY_DIR}/wolfssl - BUILD_BYPRODUCTS ${WOLFSSL_BUNDLED_LIBRARY} + BUILD_BYPRODUCTS ${_WOLFSSL_OUTPUT} PREFIX ${LIBS_BINARY_DIR}/wolfssl CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} @@ -276,6 +298,8 @@ if(BUNDLED_CURL AND (BUILD_CLIENT OR BUILD_SERVER)) list(APPEND CURL_CMAKE_ARGS -DCMAKE_USE_OPENSSL=OFF) endif() + etl_find_lib_path(CURL_BUNDLED_LIBRARY _CURL_OUTPUT) + # -DHTTP_ONLY=ON ExternalProject_Add(bundled_curl DEPENDS bundled_wolfssl bundled_openssl @@ -286,7 +310,7 @@ if(BUNDLED_CURL AND (BUILD_CLIENT OR BUILD_SERVER)) # SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/curl PREFIX ${LIBS_BINARY_DIR}/curl BINARY_DIR ${binary_dir} - BUILD_BYPRODUCTS ${CURL_BUNDLED_LIBRARY} + BUILD_BYPRODUCTS ${_CURL_OUTPUT} CMAKE_ARGS ${CURL_CMAKE_ARGS} ) @@ -384,10 +408,12 @@ if(BUNDLED_OPENAL AND BUILD_CLIENT) set(OPENAL_BUNDLED_LIBRARIES "${binary_dir}/libOpenAL32${CMAKE_STATIC_LIBRARY_SUFFIX}") endif() + etl_find_lib_path(OPENAL_BUNDLED_LIBRARIES _OPENAL_OUTPUT) + ExternalProject_Add(bundled_openal SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/openal BINARY_DIR ${binary_dir} - BUILD_BYPRODUCTS ${OPENAL_BUNDLED_LIBRARIES} + BUILD_BYPRODUCTS ${_OPENAL_OUTPUT} CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/openal @@ -434,7 +460,7 @@ if(BUNDLED_OGG_VORBIS AND BUILD_CLIENT) add_library(bundled_ogg_full INTERFACE) if (APPLE) - set(OGG_BUNDLED_LIBRARIES "${LIBS_BINARY_DIR}/ogg/libogg${CMAKE_STATIC_LIBRARY_SUFFIX}" INTERNAL) + set(OGG_BUNDLED_LIBRARIES "${LIBS_BINARY_DIR}/ogg/libogg${CMAKE_STATIC_LIBRARY_SUFFIX}") ExternalProject_Add(bundled_ogg SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/ogg BINARY_DIR ${LIBS_BINARY_DIR}/ogg @@ -446,14 +472,14 @@ if(BUNDLED_OGG_VORBIS AND BUILD_CLIENT) -DCMAKE_INSTALL_PREFIX=${LIBS_BINARY_DIR}/ogg ) - set(OGG_BUNDLED_LIBRARIES "${LIBS_BINARY_DIR}/ogg/lib/libogg.a" INTERNAL) - set(OGG_BUNDLED_INCLUDE_DIR "${LIBS_BINARY_DIR}/ogg/include" INTERNAL) + set(OGG_BUNDLED_LIBRARIES "${LIBS_BINARY_DIR}/ogg/lib/libogg.a") + set(OGG_BUNDLED_INCLUDE_DIR "${LIBS_BINARY_DIR}/ogg/include") add_dependencies(bundled_ogg_full bundled_ogg) target_include_directories(bundled_ogg_full INTERFACE "${LIBS_BINARY_DIR}/ogg/include") target_link_libraries(bundled_ogg_full INTERFACE "${LIBS_BINARY_DIR}/ogg/lib/libogg.a") - set(VORBIS_BUNDLED_LIBRARIES "${LIBS_BINARY_DIR}/vorbis/libogg${CMAKE_STATIC_LIBRARY_SUFFIX}" INTERNAL) + set(VORBIS_BUNDLED_LIBRARIES "${LIBS_BINARY_DIR}/vorbis/libogg${CMAKE_STATIC_LIBRARY_SUFFIX}") ExternalProject_Add(bundled_ogg_vorbis DEPENDS bundled_ogg SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/vorbis @@ -713,14 +739,14 @@ if(BUNDLED_SDL AND BUILD_CLIENT) add_library(bundled_sdl_int INTERFACE) if(CMAKE_SYSTEM MATCHES "Darwin" OR WIN32) - set(SDL32_BUNDLED_LIBRARIES optimized "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2main${CMAKE_STATIC_LIBRARY_SUFFIX}" debug "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2maind${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(SDL2_BUNDLED_LIBRARIES optimized "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2main${CMAKE_STATIC_LIBRARY_SUFFIX}" debug "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2maind${CMAKE_STATIC_LIBRARY_SUFFIX}") if(MSVC) - set(SDL32_BUNDLED_LIBRARIES ${SDL32_BUNDLED_LIBRARIES} optimized "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2-static${CMAKE_STATIC_LIBRARY_SUFFIX}" debug "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2-staticd${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(SDL2_BUNDLED_LIBRARIES ${SDL2_BUNDLED_LIBRARIES} optimized "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2-static${CMAKE_STATIC_LIBRARY_SUFFIX}" debug "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2-staticd${CMAKE_STATIC_LIBRARY_SUFFIX}") else() - set(SDL32_BUNDLED_LIBRARIES ${SDL32_BUNDLED_LIBRARIES} optimized "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2${CMAKE_STATIC_LIBRARY_SUFFIX}" debug "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2d${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(SDL2_BUNDLED_LIBRARIES ${SDL2_BUNDLED_LIBRARIES} optimized "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2${CMAKE_STATIC_LIBRARY_SUFFIX}" debug "${LIBS_BINARY_DIR}/sdl2/lib/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2d${CMAKE_STATIC_LIBRARY_SUFFIX}") endif() else() - set(SDL32_BUNDLED_LIBRARIES optimized "${LIBS_BINARY_DIR}/sdl2/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2${CMAKE_STATIC_LIBRARY_SUFFIX}" debug "${LIBS_BINARY_DIR}/sdl2/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2d${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(SDL2_BUNDLED_LIBRARIES optimized "${LIBS_BINARY_DIR}/sdl2/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2${CMAKE_STATIC_LIBRARY_SUFFIX}" debug "${LIBS_BINARY_DIR}/sdl2/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2d${CMAKE_STATIC_LIBRARY_SUFFIX}") endif() set(SDL_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} @@ -744,6 +770,8 @@ if(BUNDLED_SDL AND BUILD_CLIENT) set(SDL_CMAKE_ARGS ${SDL_CMAKE_ARGS} -DSDL_VIDEO_OPENGLES=${FEATURE_RENDERER_GLES} -DSDL_FORCE_STATIC_VCRT=ON) endif() + etl_find_lib_path(SDL2_BUNDLED_LIBRARIES _SDL_OUTPUT) + ExternalProject_Add(bundled_sdl # SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/sdl2 DOWNLOAD_DIR ${LIBS_DOWNLOAD_DIR} @@ -751,14 +779,14 @@ if(BUNDLED_SDL AND BUILD_CLIENT) URL https://github.com/libsdl-org/SDL/archive/release-2.24.1.tar.gz URL_HASH MD5=7c8999f150237df50b9d5ca158a40c56 BINARY_DIR ${LIBS_BINARY_DIR}/sdl2 - BUILD_BYPRODUCTS ${SDL32_BUNDLED_LIBRARIES} + BUILD_BYPRODUCTS ${_SDL_OUTPUT} CMAKE_ARGS ${SDL_CMAKE_ARGS} PREFIX ${LIBS_BINARY_DIR}/sdl2 ) set_target_properties(bundled_sdl PROPERTIES FOLDER ${BUNDLED_TARGETS_FOLDER}) add_dependencies(bundled_sdl_int bundled_sdl) - target_link_libraries(bundled_sdl_int INTERFACE ${SDL32_BUNDLED_LIBRARIES}) + target_link_libraries(bundled_sdl_int INTERFACE ${SDL2_BUNDLED_LIBRARIES}) target_include_directories(bundled_sdl_int INTERFACE "${LIBS_BINARY_DIR}/sdl2/include") endif() @@ -872,10 +900,12 @@ if(BUNDLED_JPEG AND BUILD_CLIENT) configure_file(${JPEG_LIB}/jconfig.h.cmake ${JPEG_LIB}/jconfig.h) configure_file(${JPEG_LIB}/jconfigint.h.cmake ${JPEG_LIB}/jconfigint.h) + etl_find_lib_path(JPEG_BUNDLED_LIBRARIES _JPEG_OUTPUT) + ExternalProject_Add(bundled_jpeg SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/jpegturbo BINARY_DIR ${LIBS_BINARY_DIR}/jpegturbo - BUILD_BYPRODUCTS ${JPEG_BUNDLED_LIBRARIES} + BUILD_BYPRODUCTS ${_JPEG_OUTPUT} CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DENABLE_SHARED=OFF -DENABLE_STATIC=ON -DREQUIRE_SIMD=OFF -DWITH_12BIT=OFF @@ -917,15 +947,17 @@ if(BUNDLED_PNG AND BUILD_CLIENT) set(PNG_OPTIMIZATION OFF) endif() + etl_find_lib_path(PNG_BUNDLED_LIBRARIES _PNG_OUTPUT) + ExternalProject_Add(bundled_png SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/libpng BINARY_DIR ${LIBS_BINARY_DIR}/libpng - BUILD_BYPRODUCTS ${PNG_BUNDLED_LIBRARIES} + BUILD_BYPRODUCTS ${_PNG_OUTPUT} CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DPNG_SHARED=OFF -DPNG_STATIC=ON -DPNG_BUILD_ZLIB=ON -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} -DPNG_TESTS=OFF -DPNG_FRAMEWORK=OFF -DPNG_DEBUG=OFF -DPNG_HARDWARE_OPTIMIZATIONS=${PNG_OPTIMIZATION} - -DCMAKE_OSX_DEPLOYMENT_TARGET="${CMAKE_OSX_DEPLOYMENT_TARGET}" -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_} + -DCMAKE_OSX_DEPLOYMENT_TARGET="${CMAKE_OSX_DEPLOYMENT_TARGET}" -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_} INSTALL_COMMAND "" ) set_target_properties(bundled_png PROPERTIES FOLDER ${BUNDLED_TARGETS_FOLDER}) @@ -950,10 +982,12 @@ if(BUNDLED_FREETYPE AND BUILD_CLIENT) set(BUNDLED_FREETYPE_LIBRARIES "${binary_dir}/libfreetype${CMAKE_STATIC_LIBRARY_SUFFIX}") endif() + etl_find_lib_path(BUNDLED_FREETYPE_LIBRARIES _FREETYPE_OUTPUT) + ExternalProject_Add(bundled_freetype SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/freetype BINARY_DIR ${binary_dir} - BUILD_BYPRODUCTS ${BUNDLED_FREETYPE_LIBRARIES} + BUILD_BYPRODUCTS ${_FREETYPE_OUTPUT} CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_OSX_DEPLOYMENT_TARGET="${CMAKE_OSX_DEPLOYMENT_TARGET}"