diff --git a/CMakeLists.txt b/CMakeLists.txt index 49c19153113018f1ef77f3c744741d799122491d..2183ecbfea1178bdbf682754cc4bc8587a917399 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -433,9 +433,17 @@ endif() # # ZZIP # + +option(ENABLE_BUNDLED_ZZIP "Enable building of the bundled zzip" + ${BUILD_STATIC_WITH_BUNDLED_LIBS}) if(EMBED_LUAZIP) - set(ZZIP_FIND_REQUIRED ON) - find_package(ZZIP) + if(ENABLE_BUNDLED_ZZIP) + include(BuildZZIP) + add_dependencies(build_bundled_libs bundled-zzip) + else() + set(ZZIP_FIND_REQUIRED ON) + find_package(ZZIP) + endif() endif() # diff --git a/cmake/BuildZZIP.cmake b/cmake/BuildZZIP.cmake new file mode 100644 index 0000000000000000000000000000000000000000..4a9005f8b61aa0d261a3397361ed6f251423fbef --- /dev/null +++ b/cmake/BuildZZIP.cmake @@ -0,0 +1,54 @@ +set(ZZIP_VERSION v0.13.71) +set(ZZIP_HASH 1aa094186cf2222e4cda1b91b8fb8f60) +set(ZZIP_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/zzip) +set(ZZIP_INCLUDE_DIR ${ZZIP_INSTALL_DIR}/include) +set(ZZIP_LIBRARY ${ZZIP_INSTALL_DIR}/lib/libzzip-0.a) +set(ZZIP_CFLAGS "${DEPENDENCY_CFLAGS} -O2") + +if(APPLE) + set(ZZIP_CFLAGS "${ZZIP_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}") +endif() + +set(ZZIP_CMAKE_FLAGS + "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}" + "-DCMAKE_C_FLAGS=${ZZIP_CFLAGS}" + "-DCMAKE_INSTALL_PREFIX=${ZZIP_INSTALL_DIR}" + "-DCMAKE_BUILD_TYPE=Release" + "-DBUILD_STATIC_LIBS=TRUE" + "-DBUILD_SHARED_LIBS=FALSE" + "-DZZIPDOCS=FALSE" + "-DZZIPBINS=FALSE" + "-DZZIPWRAP=FALSE" + "-DZZIPTEST=FALSE" + "-DZZIPSDL=FALSE" +) + +if(ENABLED_BUNDLED_ZLIB) + list(APPEND ZZIP_CMAKE_FLAGS + "-DCMAKE_PREFIX_PATH=${ZLIB_INSTALL_DIR}" + "-DCMAKE_FIND_USE_CMAKE_SYSTEM_PATH=FALSE" + ) +endif() + +ExternalProject_Add(bundled-zzip-project + PREFIX ${ZZIP_INSTALL_DIR} + URL https://github.com/gdraheim/zziplib/archive/${ZZIP_VERSION}.tar.gz + URL_MD5 ${ZZIP_HASH} + CMAKE_ARGS ${ZZIP_CMAKE_FLAGS} + BUILD_BYPRODUCTS ${ZZIP_LIBRARY} +) + +if(ENABLE_BUNDLED_ZLIB) + add_dependencies(bundled-zzip-project bundled-zlib) +endif() + +add_library(bundled-zzip STATIC IMPORTED GLOBAL) +set_target_properties(bundled-zzip PROPERTIES IMPORTED_LOCATION + ${ZZIP_LIBRARY}) +add_dependencies(bundled-zzip bundled-zzip-project) + +set(ZZIP_FOUND TRUE) +set(ZZIP_LIBRARIES ${ZZIP_LIBRARY}) +set(ZZIP_INCLUDE_DIRS ${ZZIP_INCLUDE_DIR}) + +message(STATUS "Using bundled zzip")