set(lz4_INCLUDE_DIR "${EXTERNAL_BINARY_DIR}/usr/local/include") set(lz4_LIBRARY_DIR "${EXTERNAL_BINARY_DIR}/usr/local/lib/") file(MAKE_DIRECTORY ${lz4_INCLUDE_DIR}) file(MAKE_DIRECTORY ${lz4_LIBRARY_DIR}) if(MSVC) set(LZ4_LIB_NAME lz4.lib) else() set(LZ4_LIB_NAME liblz4.a) endif() include(ExternalProject) set(_lz4_env "") if(ANDROID) string(REGEX REPLACE "^android-([0-9]+)$" "\\1" ANDROID_API_LEVEL "${ANDROID_PLATFORM}") if(ANDROID_ABI STREQUAL "arm64-v8a") set(TARGET_TRIPLE "aarch64-linux-android") elseif(ANDROID_ABI STREQUAL "armeabi-v7a") set(TARGET_TRIPLE "armv7a-linux-androideabi") elseif(ANDROID_ABI STREQUAL "x86") set(TARGET_TRIPLE "i686-linux-android") elseif(ANDROID_ABI STREQUAL "x86_64") set(TARGET_TRIPLE "x86_64-linux-android") else() message(FATAL_ERROR "Unsupported ANDROID_ABI: ${ANDROID_ABI}") endif() set(SYSROOT "${ANDROID_NDK}/toolchains/llvm/prebuilt/${ANDROID_HOST_TAG}/sysroot") set(COMMON_FLAGS "--sysroot=${SYSROOT}" "-target ${TARGET_TRIPLE}${ANDROID_API_LEVEL}" "-fPIC" "-D__ANDROID_API__=${ANDROID_API_LEVEL}" ) list(APPEND COMMON_FLAGS ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}) string(JOIN " " _lz4_cflags ${COMMON_FLAGS}) list(APPEND _lz4_env "CC=${CMAKE_C_COMPILER}" "AR=${CMAKE_AR}" "RANLIB=${CMAKE_RANLIB}" "STRIP=${ANDROID_NDK}/toolchains/llvm/prebuilt/${ANDROID_HOST_TAG}/bin/llvm-strip" "CFLAGS=${_lz4_cflags}" ) elseif(IOS) # iOS cross-compilation set(_ios_arch ${CMAKE_OSX_ARCHITECTURES}) if(NOT _ios_arch) set(_ios_arch "arm64") endif() set(_ios_min_version ${CMAKE_OSX_DEPLOYMENT_TARGET}) if(NOT _ios_min_version) set(_ios_min_version "13.0") endif() # Get iOS SDK path - detect from CMAKE_OSX_SYSROOT or IOS_PLATFORM string(TOLOWER "${CMAKE_OSX_SYSROOT}" _sysroot_lower) if(IOS_PLATFORM STREQUAL "OS" OR _sysroot_lower MATCHES "iphoneos") set(_ios_sdk "iphoneos") set(_ios_target_flag "-miphoneos-version-min=${_ios_min_version}") else() set(_ios_sdk "iphonesimulator") set(_ios_target_flag "-mios-simulator-version-min=${_ios_min_version}") endif() execute_process( COMMAND xcrun --sdk ${_ios_sdk} --show-sdk-path OUTPUT_VARIABLE _ios_sysroot OUTPUT_STRIP_TRAILING_WHITESPACE ) set(_lz4_cflags "-arch ${_ios_arch} -isysroot ${_ios_sysroot} ${_ios_target_flag} -fPIC") list(APPEND _lz4_env "CC=${CMAKE_C_COMPILER}" "AR=${CMAKE_AR}" "RANLIB=${CMAKE_RANLIB}" "CFLAGS=${_lz4_cflags}" ) else() # `make` can't auto detect the sdk root on Apple platforms if (APPLE) list(APPEND _lz4_env "SDKROOT=${CMAKE_OSX_SYSROOT}") endif () list(APPEND _lz4_env "CC=${CMAKE_C_COMPILER}" "CFLAGS=-fPIC" ) endif() if(MSVC) ExternalProject_Add( Lz4.BUILD PREFIX lz4 URL "${CMAKE_CURRENT_SOURCE_DIR}/lz4-1.9.4" SOURCE_SUBDIR build/cmake CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BINARY_DIR}/usr/local -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DLZ4_BUILD_CLI=OFF -DLZ4_BUILD_LEGACY_LZ4C=OFF -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DCMAKE_POLICY_DEFAULT_CMP0141=NEW -DCMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded BUILD_COMMAND "${CMAKE_COMMAND}" --build . --config $ -j INSTALL_COMMAND "${CMAKE_COMMAND}" --install . --config $ BUILD_IN_SOURCE OFF LOG_DOWNLOAD ON LOG_CONFIGURE ON LOG_BUILD ON LOG_INSTALL ON BUILD_BYPRODUCTS ${lz4_LIBRARY_DIR}/${LZ4_LIB_NAME} ) else() ExternalProject_Add( Lz4.BUILD PREFIX lz4 URL "${CMAKE_CURRENT_SOURCE_DIR}/lz4-1.9.4" CONFIGURE_COMMAND "" BUILD_COMMAND env ${_lz4_env} BUILD_SHARED=no make -j INSTALL_COMMAND make DESTDIR=${EXTERNAL_BINARY_DIR} BUILD_SHARED=no install BUILD_IN_SOURCE ON LOG_DOWNLOAD ON LOG_CONFIGURE ON LOG_BUILD ON LOG_INSTALL ON BUILD_BYPRODUCTS ${lz4_LIBRARY_DIR}/liblz4.a ) endif() add_library(lz4 STATIC IMPORTED GLOBAL) set_target_properties( lz4 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${lz4_INCLUDE_DIR}" INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${lz4_INCLUDE_DIR}" IMPORTED_LOCATION "${lz4_LIBRARY_DIR}/${LZ4_LIB_NAME}" ) add_dependencies(lz4 Lz4.BUILD) set(lz4_FOUND TRUE PARENT_SCOPE) set(lz4_LIBRARY ${lz4_LIBRARY_DIR}/${LZ4_LIB_NAME} PARENT_SCOPE) set(lz4_LIBRARIES ${lz4_LIBRARY_DIR}/${LZ4_LIB_NAME} PARENT_SCOPE) set(lz4_INCLUDE_DIR "${EXTERNAL_BINARY_DIR}/usr/local/include" PARENT_SCOPE) set(lz4_INCLUDE_DIRS "${EXTERNAL_BINARY_DIR}/usr/local/include" PARENT_SCOPE) set(lz4_VERSION 1.9.4 PARENT_SCOPE)