rom-properties/extlib/zstd/CMakeLists.txt
2025-02-19 22:07:44 -05:00

196 lines
5.8 KiB
CMake
Vendored

# zstd: Fast compression library.
PROJECT(zstd VERSION 1.5.7 LANGUAGES C ASM)
# rom-properties: Enable multithreading.
SET(ZSTD_MULTITHREAD ON)
ADD_DEFINITIONS(-DXXH_NAMESPACE=ZSTD_)
# Always build with high optimizations.
IF(MSVC)
# Remove some CFLAGS for MSVC builds:
# - /Ob0: Conflicts with /Ob2.
# - /Od: Conflicts with /O2.
# - /RTC1: Conflicts with /O2.
STRING(REPLACE "/Ob0" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
STRING(REPLACE "/Od" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
STRING(REPLACE "/RTC1" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Ob2 /O2")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Ob2 /O2")
# Append 'd' to the DLL filename for debug builds.
SET(CMAKE_DEBUG_POSTFIX "d")
ELSE(MSVC)
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O3")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
ENDIF(MSVC)
FILE(GLOB ZSTDCOMMON_FILES common/*.c)
FILE(GLOB ZSTDCOMP_FILES compress/*.c)
FILE(GLOB ZSTDDECOMP_FILES decompress/*.c decompress/*.S)
FILE(GLOB ZDICT_FILES dictBuilder/*.c)
FILE(GLOB ZDEPR_FILES deprecated/*.c)
SET(ZSTD_FILES ${ZSTDCOMMON_FILES})
# Modules
SET(ZSTD_LIB_COMPRESSION ON)
SET(ZSTD_LIB_DECOMPRESSION ON)
SET(ZSTD_LIB_DICTBUILDER OFF)
SET(ZSTD_LIB_DEPRECATED OFF)
# Enable zstd multithreading on pthread systems.
FIND_PACKAGE(Threads)
IF(CMAKE_USE_PTHREADS_INIT)
SET(ZSTD_MULTITHREAD ON)
ENDIF(CMAKE_USE_PTHREADS_INIT)
# Legacy support
SET(ZSTD_LEGACY_SUPPORT 0)
SET(ZSTD_LEGACY_MULTITHREADED_API OFF)
# Build size optimizations
SET(HUF_FORCE_DECOMPRESS_X1 OFF)
SET(HUF_FORCE_DECOMPRESS_X2 OFF)
SET(ZSTD_FORCE_DECOMPRESS_SHORT OFF)
SET(ZSTD_FORCE_DECOMPRESS_LONG OFF)
SET(ZSTD_NO_INLINE OFF)
SET(ZSTD_STRIP_ERROR_STRINGS OFF)
IF(NOT ZSTD_LIB_COMPRESSION)
SET(ZSTD_LIB_DICTBUILDER OFF)
SET(ZSTD_LIB_DEPRECATED OFF)
ENDIF(NOT ZSTD_LIB_COMPRESSION)
IF(NOT ZSTD_LIB_DECOMPRESSION)
SET(ZSTD_LEGACY_SUPPORT OFF)
SET(ZSTD_LIB_DEPRECATED OFF)
ENDIF(NOT ZSTD_LIB_DECOMPRESSION)
IF(ZSTD_LIB_COMPRESSION)
SET(ZSTD_FILES ${ZSTD_FILES} ${ZSTDCOMP_FILES})
ENDIF(ZSTD_LIB_COMPRESSION)
IF(ZSTD_LIB_DECOMPRESSION)
SET(ZSTD_FILES ${ZSTD_FILES} ${ZSTDDECOMP_FILES})
ENDIF(ZSTD_LIB_DECOMPRESSION)
IF(ZSTD_LIB_DEPRECATED)
SET(ZSTD_FILES ${ZSTD_FILES} ${ZDEPR_FILES})
ENDIF(ZSTD_LIB_DEPRECATED)
IF(ZSTD_LIB_DICTBUILDER)
SET(ZSTD_FILES ${ZSTD_FILES} ${ZDICT_FILES})
ENDIF(ZSTD_LIB_DICTBUILDER)
IF(HUF_FORCE_DECOMPRESS_X1)
ADD_DEFINITIONS(-DHUF_FORCE_DECOMPRESS_X1)
ENDIF(HUF_FORCE_DECOMPRESS_X1)
IF(HUF_FORCE_DECOMPRESS_X2)
ADD_DEFINITIONS(-DHUF_FORCE_DECOMPRESS_X2)
ENDIF(HUF_FORCE_DECOMPRESS_X2)
IF(ZSTD_FORCE_DECOMPRESS_SHORT)
ADD_DEFINITIONS(-DZSTD_FORCE_DECOMPRESS_SHORT)
ENDIF(ZSTD_FORCE_DECOMPRESS_SHORT)
IF(ZSTD_FORCE_DECOMPRESS_LONG)
ADD_DEFINITIONS(-DZSTD_FORCE_DECOMPRESS_LONG)
ENDIF(ZSTD_FORCE_DECOMPRESS_LONG)
IF(ZSTD_NO_INLINE)
ADD_DEFINITIONS(-DZSTD_NO_INLINE)
ENDIF(ZSTD_NO_INLINE)
IF(ZSTD_STRIP_ERROR_STRINGS)
ADD_DEFINITIONS(-DZSTD_STRIP_ERROR_STRINGS)
ENDIF(ZSTD_STRIP_ERROR_STRINGS)
IF(ZSTD_LEGACY_MULTITHREADED_API)
ADD_DEFINITIONS(-DZSTD_LEGACY_MULTITHREADED_API)
ENDIF(ZSTD_LEGACY_MULTITHREADED_API)
# FIXME: Legacy support.
IF(ZSTD_LEGACY_SUPPORT)
#ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
# ZSTD_FILES += $(shell ls legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
#endif
ENDIF(ZSTD_LEGACY_SUPPORT)
ADD_DEFINITIONS(-DZSTD_LEGACY_SUPPORT=${ZSTD_LEGACY_SUPPORT})
IF(WIN32)
# Add the Win32 resource file.
SET(ZSTD_FILES ${ZSTD_FILES} windres/libzstd-dll.rc)
ENDIF(WIN32)
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(zstd SHARED ${ZSTD_FILES})
TARGET_COMPILE_DEFINITIONS(zstd
PRIVATE -DZSTD_DLL_EXPORT
INTERFACE -DZSTD_DLL_IMPORT
)
TARGET_INCLUDE_DIRECTORIES(zstd
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
)
DO_SPLIT_DEBUG(zstd)
SET_WINDOWS_SUBSYSTEM(zstd WIN32)
ENDIF(BUILD_SHARED_LIBS)
IF(BUILD_STATIC_LIBS)
ADD_LIBRARY(zstdstatic STATIC ${ZSTD_FILES})
TARGET_INCLUDE_DIRECTORIES(zstdstatic
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
)
DO_SPLIT_DEBUG(zstdstatic)
ENDIF(BUILD_STATIC_LIBS)
IF(ZSTD_MULTITHREAD AND CMAKE_THREAD_LIBS_INIT)
IF(BUILD_SHARED_LIBS)
TARGET_LINK_LIBRARIES(zstd PRIVATE ${CMAKE_THREAD_LIBS_INIT})
ENDIF(BUILD_SHARED_LIBS)
IF(BUILD_STATIC_LIBS)
TARGET_LINK_LIBRARIES(zstdstatic PRIVATE ${CMAKE_THREAD_LIBS_INIT})
ENDIF(BUILD_STATIC_LIBS)
ENDIF(ZSTD_MULTITHREAD AND CMAKE_THREAD_LIBS_INIT)
# Install DLLs.
IF(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
INSTALL(TARGETS zstd
RUNTIME DESTINATION "${INSTALL_BIN_DIR}" )
#ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
#LIBRARY DESTINATION "${INSTALL_LIB_DIR}"
#BUNDLE DESTINATION "${INSTALL_BIN_DIR}" )
IF(INSTALL_DEBUG)
# FIXME: Generator expression $<TARGET_PROPERTY:${_target},PDB> didn't work with CPack-3.6.1.
INCLUDE(DirInstallPaths)
GET_TARGET_PROPERTY(DEBUG_FILENAME zstd PDB)
IF(WIN32)
# TODO: Test on MinGW.
# FIXME: Generator PDB expression doesn't have the debug postfix for some reason,
# so cpack fails in debug builds if we get the PDB property.
SET(PDB_FILENAME_D "$<TARGET_FILE_DIR:zstd>/zstd${CMAKE_DEBUG_POSTFIX}.pdb")
SET(PDB_FILENAME_R "$<TARGET_FILE_DIR:zstd>/zstd${CMAKE_RELEASE_POSTFIX}.pdb")
INSTALL(FILES "${PDB_FILENAME_D}" "${PDB_FILENAME_R}"
DESTINATION "${DIR_INSTALL_DLL_DEBUG}"
COMPONENT "debug"
OPTIONAL
)
UNSET(PDB_FILENAME_D)
UNSET(PDB_FILENAME_R)
ELSE(WIN32)
INSTALL(FILES "${DEBUG_FILENAME}"
DESTINATION "${DIR_INSTALL_DLL_DEBUG}"
COMPONENT "debug"
)
ENDIF(WIN32)
UNSET(DEBUG_FILENAME)
ENDIF(INSTALL_DEBUG)
ENDIF(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
# Clang: zstd uses __declspec() regardless of compiler or OS.
IF(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdeclspec")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdeclspec")
ENDIF(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")