diff --git a/Makefile b/Makefile index 631b884ad..030fd3fb0 100644 --- a/Makefile +++ b/Makefile @@ -106,6 +106,7 @@ clean: #------------------------------------------------------------------------------ ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU FreeBSD DragonFly NetBSD)) HOST_OS = POSIX +CMAKE_PARAMS = -DZSTD_BUILD_CONTRIB:BOOL=ON -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON .PHONY: install uninstall travis-install clangtest gpptest armtest usan asan uasan install: @@ -263,7 +264,7 @@ endif ifneq (,$(filter MSYS%,$(shell uname))) HOST_OS = MSYS -CMAKE_PARAMS = -G"MSYS Makefiles" +CMAKE_PARAMS = -G"MSYS Makefiles" -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON endif @@ -275,7 +276,7 @@ cmakebuild: cmake --version $(RM) -r $(BUILDIR)/cmake/build mkdir $(BUILDIR)/cmake/build - cd $(BUILDIR)/cmake/build ; cmake -DPREFIX:STRING=~/install_test_dir $(CMAKE_PARAMS) .. ; $(MAKE) install ; $(MAKE) uninstall + cd $(BUILDIR)/cmake/build ; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) .. ; $(MAKE) install ; $(MAKE) uninstall c90build: clean gcc -v diff --git a/build/.gitignore b/build/.gitignore index f03aac8b3..85bc9287d 100644 --- a/build/.gitignore +++ b/build/.gitignore @@ -17,4 +17,4 @@ VS2013/bin/ VS2015/bin/ # CMake -cmake/ +cmake/build/ diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 4805cc2c9..9ce52ed21 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -9,10 +9,26 @@ PROJECT(zstd) CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7) +SET(ZSTD_SOURCE_DIR "${CMAKE_SOURCE_DIR}/../..") +#----------------------------------------------------------------------------- +# Add extra compilation flags +#----------------------------------------------------------------------------- +INCLUDE(CMakeModules/AddExtraCompilationFlags.cmake) +ADD_EXTRA_COMPILATION_FLAGS() + +#----------------------------------------------------------------------------- +# Options +#----------------------------------------------------------------------------- OPTION(ZSTD_LEGACY_SUPPORT "LEGACY SUPPORT" OFF) -OPTION(ZSTD_MULTITHREAD_SUPPORT "MULTITHREADING SUPPORT" ON) +IF (UNIX) + OPTION(ZSTD_MULTITHREAD_SUPPORT "MULTITHREADING SUPPORT" ON) +ELSE (UNIX) + OPTION(ZSTD_MULTITHREAD_SUPPORT "MULTITHREADING SUPPORT" OFF) +ENDIF (UNIX) +OPTION(ZSTD_BUILD_PROGRAMS "BUILD PROGRAMS" ON) OPTION(ZSTD_BUILD_CONTRIB "BUILD CONTRIB" OFF) +OPTION(ZSTD_BUILD_TESTS "BUILD TESTS" OFF) IF (ZSTD_LEGACY_SUPPORT) MESSAGE(STATUS "ZSTD_LEGACY_SUPPORT defined!") @@ -22,19 +38,30 @@ ELSE (ZSTD_LEGACY_SUPPORT) ADD_DEFINITIONS(-DZSTD_LEGACY_SUPPORT=0) ENDIF (ZSTD_LEGACY_SUPPORT) +#----------------------------------------------------------------------------- +# Add source directories +#----------------------------------------------------------------------------- ADD_SUBDIRECTORY(lib) -ADD_SUBDIRECTORY(programs) -ADD_SUBDIRECTORY(tests) + +IF (ZSTD_BUILD_PROGRAMS) + ADD_SUBDIRECTORY(programs) +ENDIF (ZSTD_BUILD_PROGRAMS) + +IF (ZSTD_BUILD_TESTS) + IF (NOT ZSTD_BUILD_STATIC) + MESSAGE(SEND_ERROR "You need to build static library to build tests") + ENDIF (NOT ZSTD_BUILD_STATIC) + + ADD_SUBDIRECTORY(tests) +ENDIF (ZSTD_BUILD_TESTS) + IF (ZSTD_BUILD_CONTRIB) ADD_SUBDIRECTORY(contrib) ENDIF (ZSTD_BUILD_CONTRIB) #----------------------------------------------------------------------------- -# Add extra compilation flags +# Add clean-all target #----------------------------------------------------------------------------- -INCLUDE(CMakeModules/AddExtraCompilationFlags.cmake) -ADD_EXTRA_COMPILATION_FLAGS() - ADD_CUSTOM_TARGET(clean-all COMMAND ${CMAKE_BUILD_TOOL} clean COMMAND rm -rf ${CMAKE_BINARY_DIR}/ diff --git a/build/cmake/CMakeModules/AddExtraCompilationFlags.cmake b/build/cmake/CMakeModules/AddExtraCompilationFlags.cmake index e480c7ead..db5b48124 100644 --- a/build/cmake/CMakeModules/AddExtraCompilationFlags.cmake +++ b/build/cmake/CMakeModules/AddExtraCompilationFlags.cmake @@ -1,316 +1,85 @@ +include(CheckCXXCompilerFlag) +include(CheckCCompilerFlag) + +function(EnableCompilerFlag _flag _C _CXX) + message("Checking flag ${_flag}") + if (_C) + CHECK_C_COMPILER_FLAG(${_flag} C_FLAG) + if (C_FLAG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flag}" CACHE INTERNAL "C Flags") + endif () + unset(C_FLAG CACHE) + endif () + if (_CXX) + CHECK_CXX_COMPILER_FLAG(${_flag} CXX_FLAG) + if (CXX_FLAG) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag}" CACHE INTERNAL "CXX Flags") + endif () + unset(CXX_FLAG CACHE) + endif () +endfunction() + MACRO(ADD_EXTRA_COMPILATION_FLAGS) - include(CheckCXXCompilerFlag) - include(CheckCCompilerFlag) if (CMAKE_COMPILER_IS_GNUCXX OR MINGW) #Not only UNIX but also WIN32 for MinGW - - set(POSITION_INDEPENDENT_CODE_FLAG "-fPIC") - CHECK_C_COMPILER_FLAG(${POSITION_INDEPENDENT_CODE_FLAG} POSITION_INDEPENDENT_CODE_FLAG_ALLOWED) - if (POSITION_INDEPENDENT_CODE_FLAG_ALLOWED) - MESSAGE("Compiler flag ${POSITION_INDEPENDENT_CODE_FLAG} allowed") - set(ACTIVATE_POSITION_INDEPENDENT_CODE_FLAG "ON" CACHE BOOL "activate -fPIC flag") - else () - MESSAGE("Compiler flag ${POSITION_INDEPENDENT_CODE_FLAG} not allowed") - endif (POSITION_INDEPENDENT_CODE_FLAG_ALLOWED) - - set(WARNING_UNDEF "-Wundef") - CHECK_C_COMPILER_FLAG(${WARNING_UNDEF} WARNING_UNDEF_ALLOWED) - if (WARNING_UNDEF_ALLOWED) - MESSAGE("Compiler flag ${WARNING_UNDEF} allowed") - set(ACTIVATE_WARNING_UNDEF "ON" CACHE BOOL "activate -Wundef flag") - else () - MESSAGE("Compiler flag ${WARNING_UNDEF} not allowed") - endif (WARNING_UNDEF_ALLOWED) - - set(WARNING_SHADOW "-Wshadow") - CHECK_C_COMPILER_FLAG(${WARNING_SHADOW} WARNING_SHADOW_ALLOWED) - if (WARNING_SHADOW_ALLOWED) - MESSAGE("Compiler flag ${WARNING_SHADOW} allowed") - set(ACTIVATE_WARNING_SHADOW "ON" CACHE BOOL "activate -Wshadow flag") - else () - MESSAGE("Compiler flag ${WARNING_SHADOW} not allowed") - endif (WARNING_SHADOW_ALLOWED) - - set(WARNING_CAST_ALIGN "-Wcast-align") - CHECK_C_COMPILER_FLAG(${WARNING_CAST_ALIGN} WARNING_CAST_ALIGN_ALLOWED) - if (WARNING_CAST_ALIGN_ALLOWED) - MESSAGE("Compiler flag ${WARNING_CAST_ALIGN} allowed") - set(ACTIVATE_WARNING_CAST_ALIGN "ON" CACHE BOOL "activate -Wcast-align flag") - else () - MESSAGE("Compiler flag ${WARNING_CAST_ALIGN} not allowed") - endif (WARNING_CAST_ALIGN_ALLOWED) - - set(WARNING_CAST_QUAL "-Wcast-qual") - CHECK_C_COMPILER_FLAG(${WARNING_CAST_QUAL} WARNING_CAST_QUAL_ALLOWED) - if (WARNING_CAST_QUAL_ALLOWED) - MESSAGE("Compiler flag ${WARNING_CAST_QUAL} allowed") - set(ACTIVATE_WARNING_CAST_QUAL "ON" CACHE BOOL "activate -Wcast-qual flag") - else () - MESSAGE("Compiler flag ${WARNING_CAST_QUAL} not allowed") - endif (WARNING_CAST_QUAL_ALLOWED) - - set(WARNING_STRICT_PROTOTYPES "-Wstrict-prototypes") - CHECK_C_COMPILER_FLAG(${WARNING_STRICT_PROTOTYPES} WARNING_STRICT_PROTOTYPES_ALLOWED) - if (WARNING_STRICT_PROTOTYPES_ALLOWED) - MESSAGE("Compiler flag ${WARNING_STRICT_PROTOTYPES} allowed") - set(ACTIVATE_WARNING_STRICT_PROTOTYPES "ON" CACHE BOOL "activate -Wstrict-prototypes flag") - else () - MESSAGE("Compiler flag ${WARNING_STRICT_PROTOTYPES} not allowed") - endif (WARNING_STRICT_PROTOTYPES_ALLOWED) - - set(WARNING_ALL "-Wall") - CHECK_C_COMPILER_FLAG(${WARNING_ALL} WARNING_ALL_ALLOWED) - if (WARNING_ALL_ALLOWED) - MESSAGE("Compiler flag ${WARNING_ALL} allowed") - set(ACTIVATE_WARNING_ALL "ON" CACHE BOOL "activate -Wall flag") - else () - MESSAGE("Compiler flag ${WARNING_ALL} not allowed") - endif (WARNING_ALL_ALLOWED) - - set(WARNING_EXTRA "-Wextra") - CHECK_C_COMPILER_FLAG(${WARNING_EXTRA} WARNING_EXTRA_ALLOWED) - if (WARNING_EXTRA_ALLOWED) - MESSAGE("Compiler flag ${WARNING_EXTRA} allowed") - set(ACTIVATE_WARNING_EXTRA "ON" CACHE BOOL "activate -Wextra flag") - else () - MESSAGE("Compiler flag ${WARNING_EXTRA} not allowed") - endif (WARNING_EXTRA_ALLOWED) - - set(WARNING_FLOAT_EQUAL "-Wfloat-equal") - CHECK_C_COMPILER_FLAG(${WARNING_FLOAT_EQUAL} WARNING_FLOAT_EQUAL_ALLOWED) - if (WARNING_FLOAT_EQUAL_ALLOWED) - MESSAGE("Compiler flag ${WARNING_FLOAT_EQUAL} allowed") - set(ACTIVATE_WARNING_FLOAT_EQUAL "OFF" CACHE BOOL "activate -Wfloat-equal flag") - else () - MESSAGE("Compiler flag ${WARNING_FLOAT_EQUAL} not allowed") - endif (WARNING_FLOAT_EQUAL_ALLOWED) - - set(WARNING_SIGN_CONVERSION "-Wsign-conversion") - CHECK_C_COMPILER_FLAG(${WARNING_SIGN_CONVERSION} WARNING_SIGN_CONVERSION_ALLOWED) - if (WARNING_SIGN_CONVERSION_ALLOWED) - MESSAGE("Compiler flag ${WARNING_SIGN_CONVERSION} allowed") - set(ACTIVATE_WARNING_SIGN_CONVERSION "OFF" CACHE BOOL "activate -Wsign-conversion flag") - else () - MESSAGE("Compiler flag ${WARNING_SIGN_CONVERSION} not allowed") - endif (WARNING_SIGN_CONVERSION_ALLOWED) - - if (ACTIVATE_POSITION_INDEPENDENT_CODE_FLAG) - list(APPEND CMAKE_C_FLAGS ${POSITION_INDEPENDENT_CODE_FLAG}) - else () - string(REPLACE ${POSITION_INDEPENDENT_CODE_FLAG} "" CMAKE_C_FLAGS "${POSITION_INDEPENDENT_CODE_FLAG}") - endif (ACTIVATE_POSITION_INDEPENDENT_CODE_FLAG) - - if (ACTIVATE_WARNING_UNDEF) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_UNDEF}) - list(APPEND CMAKE_C_FLAGS ${WARNING_UNDEF}) - else () - string(REPLACE ${WARNING_UNDEF} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_UNDEF} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_UNDEF) - - if (ACTIVATE_WARNING_SHADOW) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_SHADOW}) - list(APPEND CMAKE_C_FLAGS ${WARNING_SHADOW}) - else () - string(REPLACE ${WARNING_SHADOW} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_SHADOW} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_SHADOW) - - if (ACTIVATE_WARNING_CAST_QUAL) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_CAST_QUAL}) - list(APPEND CMAKE_C_FLAGS ${WARNING_CAST_QUAL}) - else () - string(REPLACE ${WARNING_CAST_QUAL} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_CAST_QUAL} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_CAST_QUAL) - - if (ACTIVATE_WARNING_CAST_ALIGN) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_CAST_ALIGN}) - list(APPEND CMAKE_C_FLAGS ${WARNING_CAST_ALIGN}) - else () - string(REPLACE ${WARNING_CAST_ALIGN} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_CAST_ALIGN} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_CAST_ALIGN) - - if (ACTIVATE_WARNING_STRICT_PROTOTYPES) - list(APPEND CMAKE_C_FLAGS ${WARNING_STRICT_PROTOTYPES}) - else () - string(REPLACE ${WARNING_STRICT_PROTOTYPES} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_STRICT_PROTOTYPES) - - if (ACTIVATE_WARNING_ALL) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_ALL}) - list(APPEND CMAKE_C_FLAGS ${WARNING_ALL}) - else () - string(REPLACE ${WARNING_ALL} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_ALL} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_ALL) - - if (ACTIVATE_WARNING_EXTRA) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_EXTRA}) - list(APPEND CMAKE_C_FLAGS ${WARNING_EXTRA}) - else () - string(REPLACE ${WARNING_EXTRA} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_EXTRA} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_EXTRA) - - if (ACTIVATE_WARNING_FLOAT_EQUAL) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_FLOAT_EQUAL}) - list(APPEND CMAKE_C_FLAGS ${WARNING_FLOAT_EQUAL}) - else () - string(REPLACE ${WARNING_FLOAT_EQUAL} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_FLOAT_EQUAL} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_FLOAT_EQUAL) - - if (ACTIVATE_WARNING_SIGN_CONVERSION) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_SIGN_CONVERSION}) - list(APPEND CMAKE_C_FLAGS ${WARNING_SIGN_CONVERSION}) - else () - string(REPLACE ${WARNING_SIGN_CONVERSION} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_SIGN_CONVERSION} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_SIGN_CONVERSION) - #Set c++11 by default - list(APPEND CMAKE_CXX_FLAGS "-std=c++11") - + EnableCompilerFlag("-std=c++11" false true) #Set c99 by default - list(APPEND CMAKE_C_FLAGS "-std=c99") + EnableCompilerFlag("-std=c99" true false) + EnableCompilerFlag("-Wall" true true) + EnableCompilerFlag("-Wextra" true true) + EnableCompilerFlag("-Wundef" true true) + EnableCompilerFlag("-Wshadow" true true) + EnableCompilerFlag("-Wcast-align" true true) + EnableCompilerFlag("-Wcast-qual" true true) + EnableCompilerFlag("-Wstrict-prototypes" true false) + elseif (MSVC) # Add specific compilation flags for Windows Visual + EnableCompilerFlag("/Wall" true true) - elseif (MSVC) - # Add specific compilation flags for Windows Visual - - set(WARNING_ALL "/Wall") - CHECK_C_COMPILER_FLAG(${WARNING_ALL} WARNING_ALL_ALLOWED) - if (WARNING_ALL_ALLOWED) - MESSAGE("Compiler flag ${WARNING_ALL} allowed") - set(ACTIVATE_WARNING_ALL "OFF" CACHE BOOL "activate /Wall flag") - else () - MESSAGE("Compiler flag ${WARNING_ALL} not allowed") - endif (WARNING_ALL_ALLOWED) - - set(RTC_FLAG "/RTC1") - CHECK_C_COMPILER_FLAG(${RTC_FLAG} RTC_FLAG_ALLOWED) - if (RTC_FLAG_ALLOWED) - MESSAGE("Compiler flag ${RTC_FLAG} allowed") - set(ACTIVATE_RTC_FLAG "ON" CACHE BOOL "activate /RTC1 flag") - else () - MESSAGE("Compiler flag ${RTC_FLAG} not allowed") - endif (RTC_FLAG_ALLOWED) - - set(ZC_FLAG "/Zc:forScope") - CHECK_C_COMPILER_FLAG(${ZC_FLAG} ZC_FLAG_ALLOWED) - if (ZC_FLAG_ALLOWED) - MESSAGE("Compiler flag ${ZC_FLAG} allowed") - set(ACTIVATE_ZC_FLAG "ON" CACHE BOOL "activate /Zc:forScope flag") - else () - MESSAGE("Compiler flag ${ZC_FLAG} not allowed") - endif (ZC_FLAG_ALLOWED) - - set(GD_FLAG "/Gd") - CHECK_C_COMPILER_FLAG(${GD_FLAG} GD_FLAG_ALLOWED) - if (GD_FLAG_ALLOWED) - MESSAGE("Compiler flag ${GD_FLAG} allowed") - set(ACTIVATE_GD_FLAG "ON" CACHE BOOL "activate /Gd flag") - else () - MESSAGE("Compiler flag ${GD_FLAG} not allowed") - endif (GD_FLAG_ALLOWED) - - set(ANALYZE_FLAG "/analyze:stacksize25000") - CHECK_C_COMPILER_FLAG(${ANALYZE_FLAG} ANALYZE_FLAG_ALLOWED) - if (ANALYZE_FLAG_ALLOWED) - MESSAGE("Compiler flag ${ANALYZE_FLAG} allowed") - set(ACTIVATE_ANALYZE_FLAG "ON" CACHE BOOL "activate /ANALYZE flag") - else () - MESSAGE("Compiler flag ${ANALYZE_FLAG} not allowed") - endif (ANALYZE_FLAG_ALLOWED) - - if (ACTIVATE_WARNING_ALL) - list(APPEND CMAKE_CXX_FLAGS ${WARNING_ALL}) - list(APPEND CMAKE_C_FLAGS ${WARNING_ALL}) - else () - string(REPLACE ${WARNING_ALL} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${WARNING_ALL} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_WARNING_ALL) - # Only for DEBUG version - if (ACTIVATE_RTC_FLAG) - list(APPEND CMAKE_CXX_FLAGS_DEBUG ${RTC_FLAG}) - list(APPEND CMAKE_C_FLAGS_DEBUG ${RTC_FLAG}) - else () - string(REPLACE ${RTC_FLAG} "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") - string(REPLACE ${RTC_FLAG} "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") - endif (ACTIVATE_RTC_FLAG) - - if (ACTIVATE_ZC_FLAG) - list(APPEND CMAKE_CXX_FLAGS ${ZC_FLAG}) - list(APPEND CMAKE_C_FLAGS ${ZC_FLAG}) - else () - string(REPLACE ${ZC_FLAG} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${ZC_FLAG} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_ZC_FLAG) - - if (ACTIVATE_GD_FLAG) - list(APPEND CMAKE_CXX_FLAGS ${GD_FLAG}) - list(APPEND CMAKE_C_FLAGS ${GD_FLAG}) - else () - string(REPLACE ${GD_FLAG} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${GD_FLAG} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_GD_FLAG) - - if (ACTIVATE_ANALYZE_FLAG) - list(APPEND CMAKE_CXX_FLAGS ${ANALYZE_FLAG}) - list(APPEND CMAKE_C_FLAGS ${ANALYZE_FLAG}) - else () - string(REPLACE ${ANALYZE_FLAG} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${ANALYZE_FLAG} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_ANALYZE_FLAG) - + EnableCompilerFlag("/RTC1" true true) + EnableCompilerFlag("/Zc:forScope" true true) + EnableCompilerFlag("/Gd" true true) + EnableCompilerFlag("/analyze:stacksize25000" true true) + if (MSVC80 OR MSVC90 OR MSVC10 OR MSVC11) # To avoid compiler warning (level 4) C4571, compile with /EHa if you still want # your catch(...) blocks to catch structured exceptions. - list(APPEND CMAKE_CXX_FLAGS "/EHa") + EnableCompilerFlag("/EHa" false true) endif (MSVC80 OR MSVC90 OR MSVC10 OR MSVC11) - set(MULTITHREADED_COMPILATION "/MP") - MESSAGE("Compiler flag ${MULTITHREADED_COMPILATION} allowed") - set(ACTIVATE_MULTITHREADED_COMPILATION "ON" CACHE BOOL "activate /MP flag") - + set(ACTIVATE_MULTITHREADED_COMPILATION "ON" CACHE BOOL "activate multi-threaded compilation (/MP flag)") if (ACTIVATE_MULTITHREADED_COMPILATION) - list(APPEND CMAKE_CXX_FLAGS ${MULTITHREADED_COMPILATION}) - list(APPEND CMAKE_C_FLAGS ${MULTITHREADED_COMPILATION}) - else () - string(REPLACE ${MULTITHREADED_COMPILATION} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE ${MULTITHREADED_COMPILATION} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - endif (ACTIVATE_MULTITHREADED_COMPILATION) + EnableCompilerFlag("/MP" true true) + endif () #For exceptions - list(APPEND CMAKE_CXX_FLAGS "/EHsc") - list(APPEND CMAKE_C_FLAGS "/EHsc") + EnableCompilerFlag("/EHsc" true true) # UNICODE SUPPORT - list(APPEND CMAKE_CXX_FLAGS "/D_UNICODE /DUNICODE") - list(APPEND CMAKE_C_FLAGS "/D_UNICODE /DUNICODE") + EnableCompilerFlag("/D_UNICODE" true true) + EnableCompilerFlag("/DUNICODE" true true) endif () # Remove duplicates compilation flags - FOREACH (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - separate_arguments(${flag_var}) - list(REMOVE_DUPLICATES ${flag_var}) - string(REPLACE ";" " " ${flag_var} "${${flag_var}}") - set(${flag_var} "${${flag_var}}" CACHE STRING "common build flags" FORCE) + FOREACH (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + separate_arguments(${flag_var}) + list(REMOVE_DUPLICATES ${flag_var}) + string(REPLACE ";" " " ${flag_var} "${${flag_var}}") + set(${flag_var} "${${flag_var}}" CACHE STRING "common build flags" FORCE) ENDFOREACH (flag_var) if (MSVC) # Replace /MT to /MD flag - # Replace /O2 to /O3 flag + # Replace /O2 to /O3 flag FOREACH (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) STRING(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}") - STRING(REGEX REPLACE "/O2" "/Ox" ${flag_var} "${${flag_var}}") + STRING(REGEX REPLACE "/O2" "/Ox" ${flag_var} "${${flag_var}}") ENDFOREACH (flag_var) endif () diff --git a/build/cmake/CMakeModules/GetLibraryVersion.cmake b/build/cmake/CMakeModules/GetLibraryVersion.cmake new file mode 100644 index 000000000..a3e2fd25f --- /dev/null +++ b/build/cmake/CMakeModules/GetLibraryVersion.cmake @@ -0,0 +1,9 @@ +function(GetLibraryVersion _header _major _minor _release) + # Read file content + FILE(READ ${_header} CONTENT) + + string(REGEX MATCHALL ".*define ZSTD_VERSION_MAJOR+.* ([0-9]+).*define ZSTD_VERSION_MINOR+.* ([0-9]+).*define ZSTD_VERSION_RELEASE+.* ([0-9]+)" VERSION_REGEX "${CONTENT}") + SET(${_major} ${CMAKE_MATCH_1} PARENT_SCOPE) + SET(${_minor} ${CMAKE_MATCH_2} PARENT_SCOPE) + SET(${_release} ${CMAKE_MATCH_3} PARENT_SCOPE) +endfunction() diff --git a/build/cmake/contrib/CMakeLists.txt b/build/cmake/contrib/CMakeLists.txt index 68e0881c5..c7d97aa95 100644 --- a/build/cmake/contrib/CMakeLists.txt +++ b/build/cmake/contrib/CMakeLists.txt @@ -13,4 +13,5 @@ PROJECT(contrib) ADD_SUBDIRECTORY(pzstd) +ADD_SUBDIRECTORY(gen_html) diff --git a/build/cmake/contrib/gen_html/CMakeLists.txt b/build/cmake/contrib/gen_html/CMakeLists.txt new file mode 100644 index 000000000..dff8c7a11 --- /dev/null +++ b/build/cmake/contrib/gen_html/CMakeLists.txt @@ -0,0 +1,33 @@ +# ################################################################ +# * Copyright (c) 2015-present, Yann Collet, Facebook, Inc. +# * All rights reserved. +# * +# * This source code is licensed under the BSD-style license found in the +# * LICENSE file in the root directory of this source tree. An additional grant +# * of patent rights can be found in the PATENTS file in the same directory. +# +# You can contact the author at : +# - zstd homepage : http://www.zstd.net/ +# ################################################################ + +PROJECT(gen_html) +INCLUDE(${CMAKE_SOURCE_DIR}/CMakeModules/GetLibraryVersion.cmake) + +SET(CMAKE_INCLUDE_CURRENT_DIR TRUE) + +# Define programs directory, where sources and header files are located +SET(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib) +SET(PROGRAMS_DIR ${ZSTD_SOURCE_DIR}/programs) +SET(GENHTML_DIR ${ZSTD_SOURCE_DIR}/contrib/gen_html) +SET(GENHTML_BINARY ${PROJECT_BINARY_DIR}/gen_html${CMAKE_EXECUTABLE_SUFFIX}) +INCLUDE_DIRECTORIES(${PROGRAMS_DIR} ${LIBRARY_DIR} ${LIBRARY_DIR}/common ${GENHTML_DIR}) + +ADD_EXECUTABLE(gen_html ${GENHTML_DIR}/gen_html.cpp) + +GetLibraryVersion(${LIBRARY_DIR}/zstd.h VMAJOR VMINOR VRELEASE) +SET(LIBVERSION "${VMAJOR}.${VMINOR}.${VRELEASE}") +ADD_CUSTOM_TARGET(zstd_manual.html ALL + ${GENHTML_BINARY} "${LIBVERSION}" "${LIBRARY_DIR}/zstd.h" "${PROJECT_BINARY_DIR}/zstd_manual.html" + DEPENDS gen_html COMMENT "Update zstd manual") + +INSTALL(FILES "${PROJECT_BINARY_DIR}/zstd_manual.html" DESTINATION "share/doc") diff --git a/build/cmake/contrib/pzstd/CMakeLists.txt b/build/cmake/contrib/pzstd/CMakeLists.txt index 2a3663f31..b4fbe1689 100644 --- a/build/cmake/contrib/pzstd/CMakeLists.txt +++ b/build/cmake/contrib/pzstd/CMakeLists.txt @@ -14,17 +14,22 @@ PROJECT(pzstd) SET(CMAKE_INCLUDE_CURRENT_DIR TRUE) -# Define project root directory -SET(ROOT_DIR ../../../..) - # Define programs directory, where sources and header files are located -SET(LIBRARY_DIR ${ROOT_DIR}/lib) -SET(PROGRAMS_DIR ${ROOT_DIR}/programs) -SET(PZSTD_DIR ${ROOT_DIR}/contrib/pzstd) +SET(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib) +SET(PROGRAMS_DIR ${ZSTD_SOURCE_DIR}/programs) +SET(PZSTD_DIR ${ZSTD_SOURCE_DIR}/contrib/pzstd) INCLUDE_DIRECTORIES(${PROGRAMS_DIR} ${LIBRARY_DIR} ${LIBRARY_DIR}/common ${PZSTD_DIR}) ADD_EXECUTABLE(pzstd ${PZSTD_DIR}/main.cpp ${PZSTD_DIR}/Options.cpp ${PZSTD_DIR}/Pzstd.cpp ${PZSTD_DIR}/SkippableFrame.cpp) -TARGET_LINK_LIBRARIES(pzstd libzstd_static pthread) SET_TARGET_PROPERTIES(pzstd PROPERTIES COMPILE_DEFINITIONS "NDEBUG") SET_TARGET_PROPERTIES(pzstd PROPERTIES COMPILE_OPTIONS "-Wno-shadow") +SET(THREADS_PREFER_PTHREAD_FLAG ON) +FIND_PACKAGE(Threads REQUIRED) +IF (CMAKE_USE_PTHREADS_INIT) + TARGET_LINK_LIBRARIES(pzstd libzstd_shared ${CMAKE_THREAD_LIBS_INIT}) +ELSE() + MESSAGE(SEND_ERROR "ZSTD currently does not support thread libraries other than pthreads") +ENDIF() + +INSTALL(TARGETS pzstd RUNTIME DESTINATION "bin") diff --git a/build/cmake/lib/CMakeLists.txt b/build/cmake/lib/CMakeLists.txt index 1950d97cd..7a345bf56 100644 --- a/build/cmake/lib/CMakeLists.txt +++ b/build/cmake/lib/CMakeLists.txt @@ -10,30 +10,18 @@ # - zstd homepage : http://www.zstd.net/ # ################################################################ -# Get library version based on information from input content (use regular exp) -function(GetLibraryVersion _content _outputVar1 _outputVar2 _outputVar3) - string(REGEX MATCHALL ".*define ZSTD_VERSION_MAJOR+.* ([0-9]+).*define ZSTD_VERSION_MINOR+.* ([0-9]+).*define ZSTD_VERSION_RELEASE+.* ([0-9]+)" VERSION_REGEX "${_content}") - SET(${_outputVar1} ${CMAKE_MATCH_1} PARENT_SCOPE) - SET(${_outputVar2} ${CMAKE_MATCH_2} PARENT_SCOPE) - SET(${_outputVar3} ${CMAKE_MATCH_3} PARENT_SCOPE) -endfunction() - PROJECT(libzstd) +INCLUDE(${CMAKE_SOURCE_DIR}/CMakeModules/GetLibraryVersion.cmake) SET(CMAKE_INCLUDE_CURRENT_DIR TRUE) - -# Define project root directory -SET(ROOT_DIR ../../..) +OPTION(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" OFF) # Define library directory, where sources and header files are located -SET(LIBRARY_DIR ${ROOT_DIR}/lib) +SET(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib) INCLUDE_DIRECTORIES(${LIBRARY_DIR} ${LIBRARY_DIR}/common) -# Read file content -FILE(READ ${LIBRARY_DIR}/zstd.h HEADER_CONTENT) - # Parse version -GetLibraryVersion("${HEADER_CONTENT}" LIBVER_MAJOR LIBVER_MINOR LIBVER_RELEASE) +GetLibraryVersion(${LIBRARY_DIR}/zstd.h LIBVER_MAJOR LIBVER_MINOR LIBVER_RELEASE) MESSAGE("ZSTD VERSION ${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}") SET(Sources @@ -97,89 +85,57 @@ IF (ZSTD_LEGACY_SUPPORT) ENDIF (ZSTD_LEGACY_SUPPORT) IF (MSVC) - SET(MSVC_RESOURCE_DIR ${ROOT_DIR}/build/VS2010/libzstd-dll) + SET(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/libzstd-dll) SET(PlatformDependResources ${MSVC_RESOURCE_DIR}/libzstd-dll.rc) ENDIF (MSVC) # Split project to static and shared libraries build -ADD_LIBRARY(libzstd_static STATIC ${Sources} ${Headers}) ADD_LIBRARY(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources}) +IF (ZSTD_BUILD_STATIC) + ADD_LIBRARY(libzstd_static STATIC ${Sources} ${Headers}) +ENDIF (ZSTD_BUILD_STATIC) # Add specific compile definitions for MSVC project IF (MSVC) - SET_TARGET_PROPERTIES(libzstd_static PROPERTIES COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS") SET_TARGET_PROPERTIES(libzstd_shared PROPERTIES COMPILE_DEFINITIONS "ZSTD_DLL_EXPORT=1;ZSTD_HEAPMODE=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS") + IF (ZSTD_BUILD_STATIC) + SET_TARGET_PROPERTIES(libzstd_static PROPERTIES COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS") + ENDIF (ZSTD_BUILD_STATIC) ENDIF (MSVC) # Define library base name IF (MSVC) - SET(LIBRARY_BASE_NAME zstdlib) -ELSE () - SET(LIBRARY_BASE_NAME libzstd) -ENDIF (MSVC) -IF (MSVC) IF (CMAKE_SIZEOF_VOID_P MATCHES "8") - SET(LIBRARY_ARCH_SUFFIX "_x64") + SET(LIBRARY_BASE_NAME "zstdlib_x64") ELSE () - SET(LIBRARY_ARCH_SUFFIX "_x86") + SET(LIBRARY_BASE_NAME "zstdlib_x86") ENDIF (CMAKE_SIZEOF_VOID_P MATCHES "8") ELSE () - SET(LIBRARY_ARCH_SUFFIX "") + SET(LIBRARY_BASE_NAME zstd) ENDIF (MSVC) # Define static and shared library names -SET(STATIC_LIBRARY_OUTPUT_NAME ${LIBRARY_BASE_NAME}${LIBRARY_ARCH_SUFFIX} CACHE STRING "Static library output name") -SET(SHARED_LIBRARY_OUTPUT_NAME ${LIBRARY_BASE_NAME}.${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}${LIBRARY_ARCH_SUFFIX} CACHE STRING "Shared library output name") - -SET_TARGET_PROPERTIES( - libzstd_static - PROPERTIES - PREFIX "" - OUTPUT_NAME ${STATIC_LIBRARY_OUTPUT_NAME}) - SET_TARGET_PROPERTIES( libzstd_shared PROPERTIES - PREFIX "" - OUTPUT_NAME ${SHARED_LIBRARY_OUTPUT_NAME}) + OUTPUT_NAME ${LIBRARY_BASE_NAME} + SOVERSION ${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}) + +IF (ZSTD_BUILD_STATIC) + SET_TARGET_PROPERTIES( + libzstd_static + PROPERTIES + OUTPUT_NAME ${LIBRARY_BASE_NAME}) +ENDIF (ZSTD_BUILD_STATIC) IF (UNIX) - IF ("${PREFIX}" STREQUAL "") - SET(PREFIX /usr/local) - ENDIF() - MESSAGE("the variable PREFIX=${PREFIX}") - SET(INSTALL_LIBRARY_DIR ${PREFIX}/lib) - SET(INSTALL_INCLUDE_DIR ${PREFIX}/include) - # install target - INSTALL(FILES ${LIBRARY_DIR}/zstd.h ${LIBRARY_DIR}/deprecated/zbuff.h ${LIBRARY_DIR}/dictBuilder/zdict.h DESTINATION ${INSTALL_INCLUDE_DIR}) - INSTALL(TARGETS libzstd_static DESTINATION ${INSTALL_LIBRARY_DIR}) - INSTALL(TARGETS libzstd_shared LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}) - - # Create symlinks and setup this files - SET(SHARED_LIBRARY_LINK ${SHARED_LIBRARY_OUTPUT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) - SET(SHARED_LIBRARY_SYMLINK1 ${LIBRARY_BASE_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) - SET(SHARED_LIBRARY_SYMLINK2 ${LIBRARY_BASE_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIBVER_MAJOR}) - - SET(SHARED_LIBRARY_LINK_PATH ${CMAKE_CURRENT_BINARY_DIR}/${SHARED_LIBRARY_LINK}) - SET(SHARED_LIBRARY_SYMLINK1_PATH ${CMAKE_CURRENT_BINARY_DIR}/${SHARED_LIBRARY_SYMLINK1}) - SET(SHARED_LIBRARY_SYMLINK2_PATH ${CMAKE_CURRENT_BINARY_DIR}/${SHARED_LIBRARY_SYMLINK2}) - - ADD_CUSTOM_COMMAND(TARGET libzstd_shared POST_BUILD - COMMAND ${CMAKE_COMMAND} -E create_symlink ${SHARED_LIBRARY_LINK} ${SHARED_LIBRARY_SYMLINK1} - DEPENDS ${SHARED_LIBRARY_LINK_PATH} - COMMENT "Generating symbolic link ${SHARED_LIBRARY_LINK} -> ${SHARED_LIBRARY_SYMLINK1}") - - ADD_CUSTOM_COMMAND(TARGET libzstd_shared POST_BUILD - COMMAND ${CMAKE_COMMAND} -E create_symlink ${SHARED_LIBRARY_LINK} ${SHARED_LIBRARY_SYMLINK2} - DEPENDS ${SHARED_LIBRARY_LINK_PATH} - COMMENT "Generating symbolic link ${SHARED_LIBRARY_LINK} -> ${SHARED_LIBRARY_SYMLINK2}") - - SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${SHARED_LIBRARY_SYMLINK1};${SHARED_LIBRARY_SYMLINK2}") - - INSTALL(FILES ${SHARED_LIBRARY_SYMLINK1_PATH} DESTINATION ${INSTALL_LIBRARY_DIR}) - INSTALL(FILES ${SHARED_LIBRARY_SYMLINK2_PATH} DESTINATION ${INSTALL_LIBRARY_DIR}) + INSTALL(FILES ${LIBRARY_DIR}/zstd.h ${LIBRARY_DIR}/deprecated/zbuff.h ${LIBRARY_DIR}/dictBuilder/zdict.h DESTINATION "include") + INSTALL(TARGETS libzstd_shared LIBRARY DESTINATION "lib") + IF (ZSTD_BUILD_STATIC) + INSTALL(TARGETS libzstd_static ARCHIVE DESTINATION "lib") + ENDIF (ZSTD_BUILD_STATIC) # uninstall target CONFIGURE_FILE( diff --git a/build/cmake/programs/CMakeLists.txt b/build/cmake/programs/CMakeLists.txt index c88ee5cc9..a481a8e1d 100644 --- a/build/cmake/programs/CMakeLists.txt +++ b/build/cmake/programs/CMakeLists.txt @@ -14,12 +14,9 @@ PROJECT(programs) SET(CMAKE_INCLUDE_CURRENT_DIR TRUE) -# Define project root directory -SET(ROOT_DIR ../../..) - # Define programs directory, where sources and header files are located -SET(LIBRARY_DIR ${ROOT_DIR}/lib) -SET(PROGRAMS_DIR ${ROOT_DIR}/programs) +SET(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib) +SET(PROGRAMS_DIR ${ZSTD_SOURCE_DIR}/programs) INCLUDE_DIRECTORIES(${PROGRAMS_DIR} ${LIBRARY_DIR} ${LIBRARY_DIR}/common ${LIBRARY_DIR}/compress ${LIBRARY_DIR}/dictBuilder) IF (ZSTD_LEGACY_SUPPORT) @@ -28,23 +25,43 @@ IF (ZSTD_LEGACY_SUPPORT) ENDIF (ZSTD_LEGACY_SUPPORT) IF (MSVC) - SET(MSVC_RESOURCE_DIR ${ROOT_DIR}/build/VS2010/zstd) + SET(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/zstd) SET(PlatformDependResources ${MSVC_RESOURCE_DIR}/zstd.rc) ENDIF (MSVC) ADD_EXECUTABLE(zstd ${PROGRAMS_DIR}/zstdcli.c ${PROGRAMS_DIR}/fileio.c ${PROGRAMS_DIR}/bench.c ${PROGRAMS_DIR}/datagen.c ${PROGRAMS_DIR}/dibio.c ${PlatformDependResources}) -TARGET_LINK_LIBRARIES(zstd libzstd_static) +TARGET_LINK_LIBRARIES(zstd libzstd_shared) +ADD_CUSTOM_COMMAND(TARGET zstd POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink zstd zstdcat COMMENT "Creating zstdcat symlink") +ADD_CUSTOM_COMMAND(TARGET zstd POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink zstd unzstd COMMENT "Creating unzstd symlink") +INSTALL(TARGETS zstd RUNTIME DESTINATION "bin") +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdcat DESTINATION "bin") +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/unzstd DESTINATION "bin") + IF (UNIX) + FILE(COPY ${PROGRAMS_DIR}/zstd.1 DESTINATION .) + ADD_CUSTOM_COMMAND(TARGET zstd POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink zstd.1 zstdcat.1 COMMENT "Creating zstdcat.1 symlink") + ADD_CUSTOM_COMMAND(TARGET zstd POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink zstd.1 unzstd.1 COMMENT "Creating unzstd.1 symlink") + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstd.1 DESTINATION "share/man/man1") + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdcat.1 DESTINATION "share/man/man1") + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/unzstd.1 DESTINATION "share/man/man1") + ADD_EXECUTABLE(zstd-frugal ${PROGRAMS_DIR}/zstdcli.c ${PROGRAMS_DIR}/fileio.c) - TARGET_LINK_LIBRARIES(zstd-frugal libzstd_static) + TARGET_LINK_LIBRARIES(zstd-frugal libzstd_shared) SET_TARGET_PROPERTIES(zstd-frugal PROPERTIES COMPILE_DEFINITIONS "ZSTD_NOBENCH;ZSTD_NODICT") ENDIF (UNIX) IF (ZSTD_MULTITHREAD_SUPPORT) ADD_EXECUTABLE(zstdmt ${PROGRAMS_DIR}/zstdcli.c ${PROGRAMS_DIR}/fileio.c ${PROGRAMS_DIR}/bench.c ${PROGRAMS_DIR}/datagen.c ${PROGRAMS_DIR}/dibio.c ${PlatformDependResources}) SET_TARGET_PROPERTIES(zstdmt PROPERTIES COMPILE_DEFINITIONS "ZSTD_MULTITHREAD") - TARGET_LINK_LIBRARIES(zstdmt libzstd_static) - IF (UNIX) - TARGET_LINK_LIBRARIES(zstdmt pthread) - ENDIF (UNIX) + TARGET_LINK_LIBRARIES(zstdmt libzstd_shared) + + SET(THREADS_PREFER_PTHREAD_FLAG ON) + FIND_PACKAGE(Threads REQUIRED) + IF (CMAKE_USE_PTHREADS_INIT) + TARGET_LINK_LIBRARIES(zstdmt ${CMAKE_THREAD_LIBS_INIT}) + ELSE() + MESSAGE(SEND_ERROR "ZSTD currently does not support thread libraries other than pthreads") + ENDIF() + + INSTALL(TARGETS zstdmt RUNTIME DESTINATION "bin") ENDIF (ZSTD_MULTITHREAD_SUPPORT) diff --git a/build/cmake/tests/CMakeLists.txt b/build/cmake/tests/CMakeLists.txt index 53a699449..cb327e48c 100644 --- a/build/cmake/tests/CMakeLists.txt +++ b/build/cmake/tests/CMakeLists.txt @@ -34,13 +34,10 @@ PROJECT(tests) SET(CMAKE_INCLUDE_CURRENT_DIR TRUE) -# Define project root directory -SET(ROOT_DIR ../../..) - # Define programs directory, where sources and header files are located -SET(LIBRARY_DIR ${ROOT_DIR}/lib) -SET(PROGRAMS_DIR ${ROOT_DIR}/programs) -SET(TESTS_DIR ${ROOT_DIR}/tests) +SET(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib) +SET(PROGRAMS_DIR ${ZSTD_SOURCE_DIR}/programs) +SET(TESTS_DIR ${ZSTD_SOURCE_DIR}/tests) INCLUDE_DIRECTORIES(${TESTS_DIR} ${PROGRAMS_DIR} ${LIBRARY_DIR} ${LIBRARY_DIR}/common ${LIBRARY_DIR}/compress ${LIBRARY_DIR}/dictBuilder) ADD_EXECUTABLE(fullbench ${PROGRAMS_DIR}/datagen.c ${TESTS_DIR}/fullbench.c)