diff options
author | David Bremner <bremner@debian.org> | 2018-12-25 22:44:44 +0900 |
---|---|---|
committer | David Bremner <bremner@debian.org> | 2018-12-25 22:44:44 +0900 |
commit | 33cc53ba511843ac9857470e74e043013d3620fe (patch) | |
tree | ebc0e94b5486710fc2f381d92fab9a594f1dc62c /src/external/rawspeed/cmake | |
parent | 1fddb41abdd4ca3be5bfdfe019e126b188879e15 (diff) |
Importing darktable_2.6.0.orig.tar.xz
Diffstat (limited to 'src/external/rawspeed/cmake')
31 files changed, 330 insertions, 123 deletions
diff --git a/src/external/rawspeed/cmake/Modules/CheckZLIB.cmake b/src/external/rawspeed/cmake/Modules/CheckZLIB.cmake index 413b550ca..97d70cef8 100644 --- a/src/external/rawspeed/cmake/Modules/CheckZLIB.cmake +++ b/src/external/rawspeed/cmake/Modules/CheckZLIB.cmake @@ -3,6 +3,8 @@ include(CheckTypeSize) include(CheckPrototypeDefinition) include(CheckCXXSymbolExists) +enable_language(C) + set(CMAKE_REQUIRED_INCLUDES_SAVE "${CMAKE_REQUIRED_INCLUDES}") set(CMAKE_EXTRA_INCLUDE_FILES_SAVE "${CMAKE_EXTRA_INCLUDE_FILES}") set(CMAKE_REQUIRED_LIBRARIES_SAVE "${CMAKE_REQUIRED_LIBRARIES}") diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMAr.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMAr.cmake index aca7db536..4f5a90c20 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMAr.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMAr.cmake @@ -1,4 +1,4 @@ -find_program(LLVMAR_EXECUTABLE NAMES llvm-ar llvm-ar-6.0 llvm-ar-5.0 llvm-ar-4.0) +find_program(LLVMAR_EXECUTABLE NAMES llvm-ar llvm-ar-7 llvm-ar-6.0 llvm-ar-5.0 llvm-ar-4.0 llvm-ar-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMAr diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMCXXFilt.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMCXXFilt.cmake index 4cc093f09..2381d8df4 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMCXXFilt.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMCXXFilt.cmake @@ -1,5 +1,5 @@ find_program(LLVMCXXFilt_EXECUTABLE - NAMES llvm-cxxfilt llvm-cxxfilt-6.0 llvm-cxxfilt-5.0 llvm-cxxfilt-4.0 + NAMES llvm-cxxfilt llvm-cxxfilt-7 llvm-cxxfilt-6.0 llvm-cxxfilt-5.0 llvm-cxxfilt-4.0 llvm-cxxfilt-3.9 DOC "The llvm-cxxfilt executable" ) diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMClangTidy.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMClangTidy.cmake index 019b20c3b..3f3fb7f34 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMClangTidy.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMClangTidy.cmake @@ -1,4 +1,4 @@ -find_program(CLANGTIDY_PATH NAMES clang-tidy clang-tidy-6.0) +find_program(CLANGTIDY_PATH NAMES clang-tidy clang-tidy-7 clang-tidy-6.0 clang-tidy-5.0 clang-tidy-4.0 clang-tidy-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMClangTidy diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMCov.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMCov.cmake index f8104959e..594c79a57 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMCov.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMCov.cmake @@ -1,4 +1,4 @@ -find_program(LLVMCOV_PATH NAMES llvm-cov) +find_program(LLVMCOV_PATH NAMES llvm-cov llvm-cov-7 llvm-cov-6.0 llvm-cov-5.0 llvm-cov-4.0 llvm-cov-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMCov diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMLLD.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMLLD.cmake index 6e8574dfd..8016089e9 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMLLD.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMLLD.cmake @@ -1,4 +1,4 @@ -find_program(LLVMLLD_EXECUTABLE NAMES ld.lld lld lld-6.0 lld-5.0) +find_program(LLVMLLD_EXECUTABLE NAMES ld.lld lld lld-7 lld-6.0 lld-5.0 lld-4.0 lld-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMLLD diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMNm.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMNm.cmake index 2872424e0..f92c4cbe5 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMNm.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMNm.cmake @@ -1,4 +1,4 @@ -find_program(LLVMNM_EXECUTABLE NAMES llvm-nm llvm-nm-6.0 llvm-nm-5.0 llvm-nm-4.0) +find_program(LLVMNM_EXECUTABLE NAMES llvm-nm llvm-nm-7 llvm-nm-6.0 llvm-nm-5.0 llvm-nm-4.0 llvm-nm-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMNm diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMObjCopy.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMObjCopy.cmake index 1eab8fd4e..f8c65de44 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMObjCopy.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMObjCopy.cmake @@ -1,4 +1,4 @@ -find_program(LLVMOBJCOPY_EXECUTABLE NAMES llvm-objcopy llvm-objcopy-6.0) +find_program(LLVMOBJCOPY_EXECUTABLE NAMES llvm-objcopy llvm-objcopy-7 llvm-objcopy-6.0 llvm-objcopy-5.0 llvm-objcopy-4.0 llvm-objcopy-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMObjCopy diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMObjDump.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMObjDump.cmake index 59abf7f25..2810ac002 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMObjDump.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMObjDump.cmake @@ -1,4 +1,4 @@ -find_program(LLVMOBJDUMP_EXECUTABLE NAMES llvm-objdump llvm-objdump-6.0 llvm-objdump-5.0 llvm-objdump-4.0) +find_program(LLVMOBJDUMP_EXECUTABLE NAMES llvm-objdump llvm-objdump-7 llvm-objdump-6.0 llvm-objdump-5.0 llvm-objdump-4.0 llvm-objdump-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMObjDump diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMProfData.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMProfData.cmake index 72ca5a861..b92b9420e 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMProfData.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMProfData.cmake @@ -1,4 +1,4 @@ -find_program(LLVMPROFDATA_PATH NAMES llvm-profdata) +find_program(LLVMPROFDATA_PATH NAMES llvm-profdata llvm-profdata-7 llvm-profdata-6.0 llvm-profdata-5.0 llvm-profdata-4.0 llvm-profdata-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMProfData diff --git a/src/external/rawspeed/cmake/Modules/FindLLVMRanLib.cmake b/src/external/rawspeed/cmake/Modules/FindLLVMRanLib.cmake index 5db031194..860917a18 100644 --- a/src/external/rawspeed/cmake/Modules/FindLLVMRanLib.cmake +++ b/src/external/rawspeed/cmake/Modules/FindLLVMRanLib.cmake @@ -1,4 +1,4 @@ -find_program(LLVMRANLIB_EXECUTABLE NAMES llvm-ranlib llvm-ranlib-6.0 llvm-ranlib-5.0 llvm-ranlib-4.0) +find_program(LLVMRANLIB_EXECUTABLE NAMES llvm-ranlib llvm-ranlib-7 llvm-ranlib-6.0 llvm-ranlib-5.0 llvm-ranlib-4.0 llvm-ranlib-3.9) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LLVMRanLib diff --git a/src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake b/src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake index 15d4d004e..7fa38528c 100644 --- a/src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake +++ b/src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake @@ -1,7 +1,3 @@ -cmake_minimum_required(VERSION 3.0) - -project(googlebenchmark NONE) - # Download and unpack googlebenchmark at configure time configure_file(${RAWSPEED_SOURCE_DIR}/cmake/Modules/GoogleBenchmark.cmake.in ${CMAKE_BINARY_DIR}/googlebenchmark/CMakeLists.txt @ONLY) @@ -44,9 +40,11 @@ set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_SAVE "${CMAKE_CXX_INCLUDE_WHAT_YOU_USE}") unset(CMAKE_CXX_CLANG_TIDY) unset(CMAKE_CXX_INCLUDE_WHAT_YOU_USE) +include(${CMAKE_BINARY_DIR}/googlebenchmark/googlebenchmark-paths.cmake) + # Add googlebenchmark directly to our build. This defines the benchmark target. -add_subdirectory(${CMAKE_BINARY_DIR}/googlebenchmark/googlebenchmark-src - ${CMAKE_BINARY_DIR}/googlebenchmark/googlebenchmark-build +add_subdirectory(${GOOGLEBENCHMARK_SOURCE_DIR} + ${GOOGLEBENCHMARK_BINARY_DIR} EXCLUDE_FROM_ALL) set_target_properties(benchmark PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $<TARGET_PROPERTY:benchmark,INTERFACE_INCLUDE_DIRECTORIES>) diff --git a/src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake.in b/src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake.in index ee18edc2c..38c25dcc8 100644 --- a/src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake.in +++ b/src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake.in @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.4.0) project(googlebenchmark-download NONE) @@ -17,11 +17,9 @@ if(EXISTS "${GOOGLEBENCHMARK_PATH}" AND IS_DIRECTORY "${GOOGLEBENCHMARK_PATH}" A ExternalProject_Add( googlebenchmark - URL "${GOOGLEBENCHMARK_PATH}" PREFIX "${CMAKE_BINARY_DIR}/googlebenchmark" - SOURCE_DIR "${CMAKE_BINARY_DIR}/googlebenchmark-src" + SOURCE_DIR "${GOOGLEBENCHMARK_PATH}" # use existing src dir. BINARY_DIR "${CMAKE_BINARY_DIR}/googlebenchmark-build" - # PATCH_COMMAND patch -p1 -i "@rawspeed_SOURCE_DIR@/cmake/Modules/GoogleBenchmark-fixes.patch" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" @@ -34,12 +32,11 @@ else() message(WARNING "Did not find GOOGLEBENCHMARK sources! Fetching from web...") ExternalProject_Add( googlebenchmark - URL https://github.com/google/benchmark/archive/v1.3.0.tar.gz - URL_HASH SHA512=272775e4dbd0ecc65a2a3a64f24e79682b630929dea3af47349329ac8b796341f1197458a67c9aac0e514857ebe7cbc191d18f6fd2c0aea3242562e69d8a6849 + URL https://github.com/google/benchmark/archive/v1.4.1.tar.gz + URL_HASH SHA512=e9d71b4679cb4e4d755f7bb4101e131b37e209b6aebd0853e0c63eb11c42b75faa5da4ff8c265149808a475f3a1cfb140c5b49f877acfda908a4bb7add983aae PREFIX "${CMAKE_BINARY_DIR}/googlebenchmark" SOURCE_DIR "${CMAKE_BINARY_DIR}/googlebenchmark-src" BINARY_DIR "${CMAKE_BINARY_DIR}/googlebenchmark-build" - # PATCH_COMMAND patch -p1 -i "@rawspeed_SOURCE_DIR@/cmake/Modules/GoogleBenchmark-fixes.patch" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" @@ -47,3 +44,9 @@ else() ) endif() endif() + +ExternalProject_Get_Property(googlebenchmark SOURCE_DIR BINARY_DIR) +file(WRITE googlebenchmark-paths.cmake +"set(GOOGLEBENCHMARK_SOURCE_DIR \"${SOURCE_DIR}\") +set(GOOGLEBENCHMARK_BINARY_DIR \"${BINARY_DIR}\") +") diff --git a/src/external/rawspeed/cmake/Modules/GoogleTest.cmake b/src/external/rawspeed/cmake/Modules/GoogleTest.cmake index 2676db6e9..7839625c8 100644 --- a/src/external/rawspeed/cmake/Modules/GoogleTest.cmake +++ b/src/external/rawspeed/cmake/Modules/GoogleTest.cmake @@ -1,7 +1,3 @@ -cmake_minimum_required(VERSION 3.0) - -project(googletest NONE) - # Download and unpack googletest at configure time configure_file(${RAWSPEED_SOURCE_DIR}/cmake/Modules/GoogleTest.cmake.in ${CMAKE_BINARY_DIR}/googletest/CMakeLists.txt @ONLY) @@ -49,10 +45,12 @@ set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_SAVE "${CMAKE_CXX_INCLUDE_WHAT_YOU_USE}") unset(CMAKE_CXX_CLANG_TIDY) unset(CMAKE_CXX_INCLUDE_WHAT_YOU_USE) +include(${CMAKE_BINARY_DIR}/googletest/googletest-paths.cmake) + # Add googletest directly to our build. This defines # the gtest and gtest_main targets. -add_subdirectory(${CMAKE_BINARY_DIR}/googletest/googletest-src - ${CMAKE_BINARY_DIR}/googletest/googletest-build +add_subdirectory(${GOOGLETEST_SOURCE_DIR} + ${GOOGLETEST_BINARY_DIR} EXCLUDE_FROM_ALL) set_target_properties(gtest PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $<TARGET_PROPERTY:gtest,INTERFACE_INCLUDE_DIRECTORIES>) diff --git a/src/external/rawspeed/cmake/Modules/GoogleTest.cmake.in b/src/external/rawspeed/cmake/Modules/GoogleTest.cmake.in index ca876c4e9..c463accbb 100644 --- a/src/external/rawspeed/cmake/Modules/GoogleTest.cmake.in +++ b/src/external/rawspeed/cmake/Modules/GoogleTest.cmake.in @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.4.0) project(googletest-download NONE) @@ -20,9 +20,8 @@ if(EXISTS "${GOOGLETEST_PATH}" AND IS_DIRECTORY "${GOOGLETEST_PATH}" ExternalProject_Add( googletest - URL "${GOOGLETEST_PATH}" PREFIX "${CMAKE_BINARY_DIR}/googletest" - SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" + SOURCE_DIR "${GOOGLETEST_PATH}" # use existing src dir. BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" CONFIGURE_COMMAND "" BUILD_COMMAND "" @@ -36,8 +35,8 @@ else() message(WARNING "Did not find Google Test sources! Fetching from web...") ExternalProject_Add( googletest - URL https://github.com/google/googletest/archive/release-1.8.0.tar.gz - URL_HASH SHA512=1dbece324473e53a83a60601b02c92c089f5d314761351974e097b2cf4d24af4296f9eb8653b6b03b1e363d9c5f793897acae1f0c7ac40149216035c4d395d9d + URL https://github.com/google/googletest/archive/release-1.8.1.tar.gz + URL_HASH SHA512=e6283c667558e1fd6e49fa96e52af0e415a3c8037afe1d28b7ff1ec4c2ef8f49beb70a9327b7fc77eb4052a58c4ccad8b5260ec90e4bceeac7a46ff59c4369d7 PREFIX "${CMAKE_BINARY_DIR}/googletest" SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" @@ -48,3 +47,9 @@ else() ) endif() endif() + +ExternalProject_Get_Property(googletest SOURCE_DIR BINARY_DIR) +file(WRITE googletest-paths.cmake +"set(GOOGLETEST_SOURCE_DIR \"${SOURCE_DIR}\") +set(GOOGLETEST_BINARY_DIR \"${BINARY_DIR}\") +") diff --git a/src/external/rawspeed/cmake/Modules/LLVMOpenMP.cmake b/src/external/rawspeed/cmake/Modules/LLVMOpenMP.cmake new file mode 100644 index 000000000..7465f8fcb --- /dev/null +++ b/src/external/rawspeed/cmake/Modules/LLVMOpenMP.cmake @@ -0,0 +1,71 @@ +# Download and unpack LLVM OpenMP runtime library at configure time +configure_file(${RAWSPEED_SOURCE_DIR}/cmake/Modules/LLVMOpenMP.cmake.in ${CMAKE_BINARY_DIR}/llvm-openmp/CMakeLists.txt @ONLY) + +execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" + -DALLOW_DOWNLOADING_LLVMOPENMP=${ALLOW_DOWNLOADING_LLVMOPENMP} -DLLVMOPENMP_PATH:PATH=${LLVMOPENMP_PATH} . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/llvm-openmp +) + +if(result) + message(FATAL_ERROR "CMake step for LLVM OpenMP runtime library failed: ${result}") +endif() + +execute_process( + COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/llvm-openmp +) + +if(result) + message(FATAL_ERROR "Build step for LLVM OpenMP runtime library failed: ${result}") +endif() + +# We are building it separately from the LLVM itself. +set(OPENMP_STANDALONE_BUILD ON CACHE BOOL "" FORCE) + +# let's insist on static library. +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) +set(LIBOMP_ENABLE_SHARED OFF CACHE BOOL "" FORCE) + +set(CMAKE_C_FLAGS_SAVE "${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS_SAVE "${CMAKE_CXX_FLAGS}") + +set(CMAKE_C_FLAGS_SANITIZE_SAVE "${CMAKE_C_FLAGS_SANITIZE}") +set(CMAKE_CXX_FLAGS_SANITIZE_SAVE "${CMAKE_CXX_FLAGS_SANITIZE}") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") + +set(ubsan "-fsanitize-recover=undefined") +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(ubsan "${ubsan} -fsanitize-recover=integer") +endif() + +SET(CMAKE_CXX_FLAGS_SANITIZE "${CMAKE_CXX_FLAGS_SANITIZE} ${ubsan}") +SET(CMAKE_C_FLAGS_SANITIZE "${CMAKE_C_FLAGS_SANITIZE} ${ubsan}") + +set(CMAKE_CXX_CLANG_TIDY_SAVE "${CMAKE_CXX_CLANG_TIDY}") +set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_SAVE "${CMAKE_CXX_INCLUDE_WHAT_YOU_USE}") + +unset(CMAKE_CXX_CLANG_TIDY) +unset(CMAKE_CXX_INCLUDE_WHAT_YOU_USE) + +include(${CMAKE_BINARY_DIR}/llvm-openmp/llvm-openmp-paths.cmake) + +# Add llvm openmp directly to our build. This defines the omp target. +add_subdirectory(${LLVMOPENMP_SOURCE_DIR} + ${LLVMOPENMP_BINARY_DIR} + EXCLUDE_FROM_ALL) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_SAVE}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_SAVE}") + +set(CMAKE_C_FLAGS_SANITIZE "${CMAKE_C_FLAGS_SANITIZE_SAVE}" CACHE STRING "Flags used by the C++ compiler during sanitized (ASAN+UBSAN) builds." FORCE ) +set(CMAKE_CXX_FLAGS_SANITIZE "${CMAKE_CXX_FLAGS_SANITIZE_SAVE}" CACHE STRING "Flags used by the C++ compiler during sanitized (ASAN+UBSAN) builds." FORCE ) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_SANITIZE + CMAKE_C_FLAGS_SANITIZE ) + +set(CMAKE_CXX_CLANG_TIDY "${CMAKE_CXX_CLANG_TIDY_SAVE}") +set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "${CMAKE_CXX_INCLUDE_WHAT_YOU_USE_SAVE}") diff --git a/src/external/rawspeed/cmake/Modules/LLVMOpenMP.cmake.in b/src/external/rawspeed/cmake/Modules/LLVMOpenMP.cmake.in new file mode 100644 index 000000000..e2f7c9334 --- /dev/null +++ b/src/external/rawspeed/cmake/Modules/LLVMOpenMP.cmake.in @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 3.4.0) + +project(llvm-openmp-download NONE) + +# Enable ExternalProject CMake module +include(ExternalProject) + +option(ALLOW_DOWNLOADING_LLVMOPENMP "If LLVM OpenMP runtime library src tree is not found in location specified by LLVMOPENMP_PATH, do fetch the archive from internet" OFF) +set(LLVMOPENMP_PATH "/usr/src/openmp" CACHE PATH "Path to the LLVM OpenMP runtime library root tree.") + +# Download and install LLVM OpenMP runtime library + +message(STATUS "Looking for LLVM OpenMP runtime library sources") +message(STATUS "Looking for LLVM OpenMP runtime library sources in ${LLVMOPENMP_PATH}") +if(EXISTS "${LLVMOPENMP_PATH}" AND IS_DIRECTORY "${LLVMOPENMP_PATH}" AND EXISTS "${LLVMOPENMP_PATH}/CMakeLists.txt") + message(STATUS "Found LLVM OpenMP runtime library in ${LLVMOPENMP_PATH}") + + ExternalProject_Add( + llvm-openmp + PREFIX "${CMAKE_BINARY_DIR}/llvm-openmp" + SOURCE_DIR "${LLVMOPENMP_PATH}" # use existing src dir. + BINARY_DIR "${CMAKE_BINARY_DIR}/llvm-openmp-build" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + ) +else() + if(NOT ALLOW_DOWNLOADING_LLVMOPENMP) + message(SEND_ERROR "Did not find LLVM OpenMP runtime library sources! Either pass correct path in LLVMOPENMP_PATH, or enable ALLOW_DOWNLOADING_LLVMOPENMP, or disable USE_BUNDLED_LLVMOPENMP, or disable WITH_OPENMP.") + else() + message(WARNING "Did not find LLVM OpenMP runtime library sources! Fetching from web...") + ExternalProject_Add( + llvm-openmp + URL https://releases.llvm.org/7.0.0/openmp-7.0.0.src.tar.xz + URL_HASH SHA512=bda383d62c822db41504d7774974809cd2af042b03a0b4ca450cc1478c5977682f5c646734801c1b7a16233141d62359c17e87e1435c48a222e159a8763f8857 + PREFIX "${CMAKE_BINARY_DIR}/llvm-openmp" + SOURCE_DIR "${CMAKE_BINARY_DIR}/llvm-openmp-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/llvm-openmp-build" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + ) + endif() +endif() + +ExternalProject_Get_Property(llvm-openmp SOURCE_DIR BINARY_DIR) +file(WRITE llvm-openmp-paths.cmake +"set(LLVMOPENMP_SOURCE_DIR \"${SOURCE_DIR}\") +set(LLVMOPENMP_BINARY_DIR \"${BINARY_DIR}\") +") diff --git a/src/external/rawspeed/cmake/Modules/Pugixml.cmake b/src/external/rawspeed/cmake/Modules/Pugixml.cmake index 752ceb7d6..78454d7a8 100644 --- a/src/external/rawspeed/cmake/Modules/Pugixml.cmake +++ b/src/external/rawspeed/cmake/Modules/Pugixml.cmake @@ -1,7 +1,3 @@ -cmake_minimum_required(VERSION 3.0) - -project(pugixml NONE) - # Download and unpack pugixml at configure time configure_file(${RAWSPEED_SOURCE_DIR}/cmake/Modules/Pugixml.cmake.in ${CMAKE_BINARY_DIR}/pugixml/CMakeLists.txt @ONLY) @@ -43,10 +39,12 @@ set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_SAVE "${CMAKE_CXX_INCLUDE_WHAT_YOU_USE}") unset(CMAKE_CXX_CLANG_TIDY) unset(CMAKE_CXX_INCLUDE_WHAT_YOU_USE) +include(${CMAKE_BINARY_DIR}/pugixml/pugixml-paths.cmake) + # Add pugixml directly to our build. This defines # the gtest and gtest_main targets. -add_subdirectory(${CMAKE_BINARY_DIR}/pugixml/pugixml-src - ${CMAKE_BINARY_DIR}/pugixml/pugixml-build) +add_subdirectory(${PUGIXML_SOURCE_DIR} + ${PUGIXML_BINARY_DIR}) set_target_properties(pugixml PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $<TARGET_PROPERTY:pugixml,INTERFACE_INCLUDE_DIRECTORIES>) diff --git a/src/external/rawspeed/cmake/Modules/Pugixml.cmake.in b/src/external/rawspeed/cmake/Modules/Pugixml.cmake.in index 536f0e258..a6f3f2a4b 100644 --- a/src/external/rawspeed/cmake/Modules/Pugixml.cmake.in +++ b/src/external/rawspeed/cmake/Modules/Pugixml.cmake.in @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.4.0) project(pugixml-download NONE) @@ -17,9 +17,8 @@ if(EXISTS "${PUGIXML_PATH}" AND IS_DIRECTORY "${PUGIXML_PATH}" AND EXISTS "${PUG ExternalProject_Add( pugixml - URL "${PUGIXML_PATH}" PREFIX "${CMAKE_BINARY_DIR}/pugixml" - SOURCE_DIR "${CMAKE_BINARY_DIR}/pugixml-src" + SOURCE_DIR "${PUGIXML_PATH}" # use existing src dir. BINARY_DIR "${CMAKE_BINARY_DIR}/pugixml-build" CONFIGURE_COMMAND "" BUILD_COMMAND "" @@ -33,8 +32,8 @@ else() message(WARNING "Did not find pugixml sources! Fetching from web...") ExternalProject_Add( pugixml - URL https://github.com/zeux/pugixml/releases/download/v1.8.1/pugixml-1.8.1.tar.gz - URL_HASH SHA512=1aec6f8cd0c385b66e848020d94d331db788c78523f72d145726738433a784b518084ec45a6eeffb0a6585bcf2759d09ad1e3d304d15d99068d43dbfd6db9d31 + URL https://github.com/zeux/pugixml/releases/download/v1.9/pugixml-1.9.tar.gz + URL_HASH SHA512=853a9d985aae537391c6524d5413ef4de237d99d96cc58ea7fe7152f786df1e408cdacd2e4387697e23c3e67cdc1d42b29de554501309eae16d86edd0e24785f PREFIX "${CMAKE_BINARY_DIR}/pugixml" SOURCE_DIR "${CMAKE_BINARY_DIR}/pugixml-src" BINARY_DIR "${CMAKE_BINARY_DIR}/pugixml-build" @@ -45,3 +44,9 @@ else() ) endif() endif() + +ExternalProject_Get_Property(pugixml SOURCE_DIR BINARY_DIR) +file(WRITE pugixml-paths.cmake +"set(PUGIXML_SOURCE_DIR \"${SOURCE_DIR}\") +set(PUGIXML_BINARY_DIR \"${BINARY_DIR}\") +") diff --git a/src/external/rawspeed/cmake/Modules/Zlib.cmake b/src/external/rawspeed/cmake/Modules/Zlib.cmake index 31a4d024f..df114c5bf 100644 --- a/src/external/rawspeed/cmake/Modules/Zlib.cmake +++ b/src/external/rawspeed/cmake/Modules/Zlib.cmake @@ -1,7 +1,3 @@ -cmake_minimum_required(VERSION 3.0) - -project(zlib NONE) - # Download and unpack zlib at configure time configure_file(${RAWSPEED_SOURCE_DIR}/cmake/Modules/Zlib.cmake.in ${CMAKE_BINARY_DIR}/zlib/CMakeLists.txt @ONLY) @@ -40,15 +36,17 @@ set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_SAVE "${CMAKE_CXX_INCLUDE_WHAT_YOU_USE}") unset(CMAKE_CXX_CLANG_TIDY) unset(CMAKE_CXX_INCLUDE_WHAT_YOU_USE) +include(${CMAKE_BINARY_DIR}/zlib/zlib-paths.cmake) + # XXX make sure that zlib is using it's own headers # see https://github.com/madler/zlib/issues/218 -include_directories(BEFORE ${CMAKE_BINARY_DIR}/zlib/zlib-src) -include_directories(BEFORE ${CMAKE_BINARY_DIR}/zlib/zlib-build) +include_directories(BEFORE SYSTEM ${CMAKE_BINARY_DIR}/zlib/zlib-src) +include_directories(BEFORE SYSTEM ${CMAKE_BINARY_DIR}/zlib/zlib-build) # Add zlib directly to our build. This defines # the gtest and gtest_main targets. -add_subdirectory(${CMAKE_BINARY_DIR}/zlib/zlib-src - ${CMAKE_BINARY_DIR}/zlib/zlib-build) +add_subdirectory(${ZLIB_SOURCE_DIR} + ${ZLIB_BINARY_DIR}) set(_zlib_lib zlib) # shared set(_zlib_lib zlibstatic) # static diff --git a/src/external/rawspeed/cmake/Modules/Zlib.cmake.in b/src/external/rawspeed/cmake/Modules/Zlib.cmake.in index 1f4a7a8a9..8a26de4e9 100644 --- a/src/external/rawspeed/cmake/Modules/Zlib.cmake.in +++ b/src/external/rawspeed/cmake/Modules/Zlib.cmake.in @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.4.0) project(zlib-download NONE) @@ -17,9 +17,8 @@ if(EXISTS "${ZLIB_PATH}" AND IS_DIRECTORY "${ZLIB_PATH}" AND EXISTS "${ZLIB_PATH ExternalProject_Add( zlib - URL "${ZLIB_PATH}" PREFIX "${CMAKE_BINARY_DIR}/zlib" - SOURCE_DIR "${CMAKE_BINARY_DIR}/zlib-src" + SOURCE_DIR "${ZLIB_PATH}" # use existing src dir. BINARY_DIR "${CMAKE_BINARY_DIR}/zlib-build" CONFIGURE_COMMAND "" BUILD_COMMAND "" @@ -45,3 +44,9 @@ else() ) endif() endif() + +ExternalProject_Get_Property(zlib SOURCE_DIR BINARY_DIR) +file(WRITE zlib-paths.cmake +"set(ZLIB_SOURCE_DIR \"${SOURCE_DIR}\") +set(ZLIB_BINARY_DIR \"${BINARY_DIR}\") +") diff --git a/src/external/rawspeed/cmake/OpenMP.cmake b/src/external/rawspeed/cmake/OpenMP.cmake deleted file mode 100644 index e9902f603..000000000 --- a/src/external/rawspeed/cmake/OpenMP.cmake +++ /dev/null @@ -1,23 +0,0 @@ -if(WITH_OPENMP) - message(STATUS "Looking for OpenMP") - find_package(OpenMP) - if(OPENMP_FOUND) - message(STATUS "Looking for OpenMP - found") - set(HAVE_OPENMP 1) - - if(NOT TARGET OpenMP::OpenMP) - add_library(OpenMP::OpenMP INTERFACE IMPORTED) - set_property(TARGET OpenMP::OpenMP PROPERTY INTERFACE_COMPILE_OPTIONS "${OpenMP_CXX_FLAGS}") - set_property(TARGET OpenMP::OpenMP PROPERTY INTERFACE_LINK_LIBRARIES "${OpenMP_CXX_FLAGS}") - endif() - - set_package_properties(OpenMP PROPERTIES - TYPE OPTIONAL - PURPOSE "Used for parallelization of tools (NOT library!)") - else() - message(WARNING "Looking for OpenMP - failed. utilities will not use openmp-based parallelization") - endif() -else() - message(STATUS "OpenMP is disabled, utilities will not use openmp-based parallelization") -endif() -add_feature_info("OpenMP-based utilities threading" HAVE_OPENMP "used for parallelization of utilities only, NOT library!") diff --git a/src/external/rawspeed/cmake/compiler-flags.cmake b/src/external/rawspeed/cmake/compiler-flags.cmake index a6cb2decc..9e51ab472 100644 --- a/src/external/rawspeed/cmake/compiler-flags.cmake +++ b/src/external/rawspeed/cmake/compiler-flags.cmake @@ -21,9 +21,7 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -# always debug info -add_definitions(-g3) -add_definitions(-ggdb3) +include(debug-info) if(CMAKE_BUILD_TYPE STREQUAL "RELEASE") # want assertions in all but Release build type. @@ -40,6 +38,10 @@ elseif(NOT (CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO" OR CMAKE_BUILD_TYPE STREQ add_definitions(-D_GLIBCXX_SANITIZE_VECTOR) endif() +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_CXX_VISIBILITY_PRESET hidden) +set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) + IF(NOT APPLE) set(linkerflags "-Wl,--as-needed") ELSE() @@ -63,12 +65,15 @@ MARK_AS_ADVANCED( if(RAWSPEED_ENABLE_LTO) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") include(llvm-toolchain) - set(lto_compile "-flto=thin") + set(lto_compile "-flto=thin -fforce-emit-vtables -fwhole-program-vtables -fstrict-vtable-pointers") set(lto_link "-flto=thin -fuse-ld=\"${LLVMLLD_EXECUTABLE}\" ${LLVMLLD_INCREMENTAL_LDFLAGS}") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") include(gcc-toolchain) set(lto_compile "-flto") set(lto_link "-flto") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set(lto_compile "-flto=thin -fstrict-vtable-pointers") + set(lto_link "-flto=thin") endif() set(CMAKE_C_FLAGS diff --git a/src/external/rawspeed/cmake/compiler-versions.cmake b/src/external/rawspeed/cmake/compiler-versions.cmake index c3458e905..f3d561d6e 100644 --- a/src/external/rawspeed/cmake/compiler-versions.cmake +++ b/src/external/rawspeed/cmake/compiler-versions.cmake @@ -1,4 +1,4 @@ -# want C++14 support. +# want C++14 support, openmp 4.0 support. if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) message(FATAL_ERROR "GNU C compiler version ${CMAKE_C_COMPILER_VERSION} is too old. Need 5.0+") @@ -8,26 +8,29 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_L message(FATAL_ERROR "GNU C++ compiler version ${CMAKE_CXX_COMPILER_VERSION} is too old. Need 5.0+") endif() -if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 3.5) - message(FATAL_ERROR "LLVM Clang C compiler version ${CMAKE_C_COMPILER_VERSION} is too old. Need 3.5+") +if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 3.9) + message(FATAL_ERROR "LLVM Clang C compiler version ${CMAKE_C_COMPILER_VERSION} is too old. Need 3.9+") endif() -if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5) - message(FATAL_ERROR "LLVM Clang C++ compiler version ${CMAKE_CXX_COMPILER_VERSION} is too old. Need 3.5+") +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.9) + message(FATAL_ERROR "LLVM Clang C++ compiler version ${CMAKE_CXX_COMPILER_VERSION} is too old. Need 3.9+") endif() -# if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) -# message(WARNING "Support for GNU C compiler version ${CMAKE_C_COMPILER_VERSION} is soft-deprecated. Consider upgrading to 5.0+") + +# C++17 ? + +# if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 7) +# message(WARNING "Support for GNU C compiler version ${CMAKE_C_COMPILER_VERSION} is soft-deprecated. Consider upgrading to 7+") # endif() -# if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) -# message(WARNING "Support for GNU C++ compiler version ${CMAKE_CXX_COMPILER_VERSION} is soft-deprecated. Consider upgrading to 5.0+") +# if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7) +# message(WARNING "Support for GNU C++ compiler version ${CMAKE_CXX_COMPILER_VERSION} is soft-deprecated. Consider upgrading to 7+") # endif() -# if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 3.5) -# message(WARNING "LLVM Clang C compiler version ${CMAKE_C_COMPILER_VERSION} is soft-deprecated. Consider upgrading to 3.5+") +# if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 4.0) +# message(WARNING "LLVM Clang C compiler version ${CMAKE_C_COMPILER_VERSION} is soft-deprecated. Consider upgrading to 4.0+") # endif() -# if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5) -# message(WARNING "LLVM Clang C++ compiler version ${CMAKE_CXX_COMPILER_VERSION} is soft-deprecated. Consider upgrading to 3.5+") +# if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) +# message(WARNING "LLVM Clang C++ compiler version ${CMAKE_CXX_COMPILER_VERSION} is soft-deprecated. Consider upgrading to 4.0+") # endif() diff --git a/src/external/rawspeed/cmake/debug-info.cmake b/src/external/rawspeed/cmake/debug-info.cmake new file mode 100644 index 000000000..30651a477 --- /dev/null +++ b/src/external/rawspeed/cmake/debug-info.cmake @@ -0,0 +1,9 @@ +if(RAWSPEED_ENABLE_DEBUG_INFO) + # always debug info + add_definitions(-g3) + add_definitions(-ggdb3) +elseif(NOT RAWSPEED_ENABLE_DEBUG_INFO) + add_definitions(-g0) +else() + message(SEND_ERROR "RAWSPEED_ENABLE_DEBUG_INFO has unknown value: \"${RAWSPEED_ENABLE_DEBUG_INFO}\"") +endif() diff --git a/src/external/rawspeed/cmake/gcc-gcov.cmake b/src/external/rawspeed/cmake/gcc-gcov.cmake index af4b8a1d9..13196240a 100644 --- a/src/external/rawspeed/cmake/gcc-gcov.cmake +++ b/src/external/rawspeed/cmake/gcc-gcov.cmake @@ -23,7 +23,7 @@ endif() add_custom_target( gcov - COMMAND "${FIND_PATH}" "${CMAKE_BINARY_DIR}" -type f -name '*.gcno' -exec "${GCOV_PATH}" ${GCOV_OPTS} {} + > /dev/null + COMMAND "${FIND_PATH}" "${CMAKE_BINARY_DIR}" -type f -name '*.gcno' -exec "${GCOV_PATH}" ${GCOV_OPTS} {} \\\\; > /dev/null WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Running gcov tool on all the *.gcno files to produce *.gcov files" USES_TERMINAL diff --git a/src/external/rawspeed/cmake/iwyu.imp b/src/external/rawspeed/cmake/iwyu.imp index 441812158..6a76176cb 100644 --- a/src/external/rawspeed/cmake/iwyu.imp +++ b/src/external/rawspeed/cmake/iwyu.imp @@ -2,6 +2,13 @@ { include: ["<zconf.h>", "private", "<zlib.h>", "public"] }, { include: ["<jconfig.h>", "private", "<jpeglib.h>", "public"] }, { include: ["<jmorecfg.h>", "private", "<jpeglib.h>", "public"] }, + { include: ["<bits/std_abs.h>", "private", "<cmath>", "public"] }, + { include: ["<bits/stl_set.h>", "private", "<set>", "public"] }, + { include: ["<bits/stdint-uintn.h>", "private", "<cstdint>", "public"] }, + { include: ["<bits/exception.h>", "private", "<exception>", "public"] }, + { include: ["<bits/types/clock_t.h>", "private", "<ctime>", "public"] }, + { include: ["<bits/std_function.h>", "private", "<functional>", "public"] }, + { include: ["<bits/stdint-intn.h>", "private", "<cstdint>", "public"] }, { include: ["@<gtest/.*>", "private", "<gtest/gtest.h>", "public"] }, { include: ["@<gmock/.*>", "private", "<gmock/gmock.h>", "public"] }, { include: ["<ThreadSafetyAnalysis.h>", "private", "\"ThreadSafetyAnalysis.h\"", "public"] } diff --git a/src/external/rawspeed/cmake/llvm-cov.cmake b/src/external/rawspeed/cmake/llvm-cov.cmake index 7ec9b2f61..f54f5a6e8 100644 --- a/src/external/rawspeed/cmake/llvm-cov.cmake +++ b/src/external/rawspeed/cmake/llvm-cov.cmake @@ -14,7 +14,7 @@ find_package(Demangler REQUIRED) add_custom_target( coverage-show DEPENDS rstest - COMMAND "${LLVMCOV_PATH}" show -Xdemangler=$<TARGET_FILE:demangler> -instr-profile "${CMAKE_BINARY_DIR}/rawspeed.profdata" "$<TARGET_FILE:rstest>" -format html -output-dir "${CMAKE_BINARY_DIR}/coverage" + COMMAND "${LLVMCOV_PATH}" show -Xdemangler=$<TARGET_FILE:demangler> -instr-profile "${RAWSPEED_PROFDATA_FILE}" "$<TARGET_FILE:rstest>" -format html -output-dir "${CMAKE_BINARY_DIR}/coverage" COMMAND "${CMAKE_COMMAND}" -E echo "Use $$ sensible-browser \"./coverage/index.html\" to view the coverage report." WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Running llvm-cov tool on the *.profdata file to generate HTML coverage report" diff --git a/src/external/rawspeed/cmake/llvm-profdata.cmake b/src/external/rawspeed/cmake/llvm-profdata.cmake index ecd4247ec..b9bae9e28 100644 --- a/src/external/rawspeed/cmake/llvm-profdata.cmake +++ b/src/external/rawspeed/cmake/llvm-profdata.cmake @@ -11,7 +11,7 @@ find_package(Find REQUIRED) add_custom_target( profdata - COMMAND "${FIND_PATH}" "${CMAKE_BINARY_DIR}" -type f -name '*.profraw' -exec "${LLVMPROFDATA_PATH}" merge -o "${CMAKE_BINARY_DIR}/rawspeed.profdata" {} + > /dev/null + COMMAND "${FIND_PATH}" "${CMAKE_BINARY_DIR}" -type f -name '*.profraw' -exec "${LLVMPROFDATA_PATH}" merge -o "${RAWSPEED_PROFDATA_FILE}" {} + > /dev/null WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Running llvm-profdata tool on all the *.profraw files" ) diff --git a/src/external/rawspeed/cmake/sample-based-testing.cmake b/src/external/rawspeed/cmake/sample-based-testing.cmake index a1d29adb2..74b479ed8 100644 --- a/src/external/rawspeed/cmake/sample-based-testing.cmake +++ b/src/external/rawspeed/cmake/sample-based-testing.cmake @@ -1,22 +1,26 @@ message(STATUS "Looking for sample set for sample-based testing") -message(STATUS "Looking for sample set in ${REFERENCE_SAMPLE_ARCHIVE}") -if(NOT (EXISTS "${REFERENCE_SAMPLE_ARCHIVE}" - AND EXISTS "${REFERENCE_SAMPLE_ARCHIVE}/filelist.sha1" - AND EXISTS "${REFERENCE_SAMPLE_ARCHIVE}/timestamp.txt")) - message(SEND_ERROR "Did not find sample set for sample-based testing! Either pass correct path in REFERENCE_SAMPLE_ARCHIVE, or disable ENABLE_SAMPLEBASED_TESTING.") +message(STATUS "Looking for sample set in ${RAWSPEED_REFERENCE_SAMPLE_ARCHIVE}") +if(NOT (EXISTS "${RAWSPEED_REFERENCE_SAMPLE_ARCHIVE}" + AND EXISTS "${RAWSPEED_REFERENCE_SAMPLE_ARCHIVE}/filelist.sha1" + AND EXISTS "${RAWSPEED_REFERENCE_SAMPLE_ARCHIVE}/timestamp.txt")) + message(SEND_ERROR "Did not find sample set for sample-based testing! Either pass correct path in RAWSPEED_REFERENCE_SAMPLE_ARCHIVE, or disable RAWSPEED_ENABLE_SAMPLE_BASED_TESTING.") endif() -message(STATUS "Found sample set in ${REFERENCE_SAMPLE_ARCHIVE}") +message(STATUS "Found sample set in ${RAWSPEED_REFERENCE_SAMPLE_ARCHIVE}") -file(STRINGS "${REFERENCE_SAMPLE_ARCHIVE}/filelist.sha1" _REFERENCE_SAMPLES ENCODING UTF-8) +file(STRINGS "${RAWSPEED_REFERENCE_SAMPLE_ARCHIVE}/filelist.sha1" _REFERENCE_SAMPLES ENCODING UTF-8) set(REFERENCE_SAMPLES) set(REFERENCE_SAMPLE_HASHES) foreach(STR ${_REFERENCE_SAMPLES}) - string(SUBSTRING "${STR}" 40 -1 SAMPLENAME) - string(STRIP "${SAMPLENAME}" SAMPLENAME) - set(SAMPLENAME "${REFERENCE_SAMPLE_ARCHIVE}/${SAMPLENAME}") + # There are two schemes: + # <hash><space><space><filename> <- read in text mode + # <hash><space><asterisk><filename> <- read in binary mode + # Which for our purpose means: + # <40 chars><char><char><filename> <- i.e. we just skip first 42 chars. + string(SUBSTRING "${STR}" 42 -1 SAMPLENAME) + set(SAMPLENAME "${RAWSPEED_REFERENCE_SAMPLE_ARCHIVE}/${SAMPLENAME}") if(NOT EXISTS "${SAMPLENAME}") message(SEND_ERROR "The sample \"${SAMPLENAME}\" does not exist!") @@ -27,34 +31,43 @@ foreach(STR ${_REFERENCE_SAMPLES}) list(APPEND REFERENCE_SAMPLE_HASHES "${SAMPLENAME}.hash.failed") endforeach() +set(EXTRA_ENV "") +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND + CMAKE_BUILD_TYPE STREQUAL "COVERAGE") + message(WARNING "Warning: sample-based-testing; clang instrumentation profile" + " does not work with threading! Will be passing " + "OMP_NUM_THREADS=1 environment variable.") + set(EXTRA_ENV "OMP_NUM_THREADS=1") +endif() + add_custom_target(rstest-create) add_custom_command(TARGET rstest-create - COMMAND rstest -c ${REFERENCE_SAMPLES} - WORKING_DIRECTORY "${REFERENCE_SAMPLE_ARCHIVE}" + COMMAND "${CMAKE_COMMAND}" -E env ${EXTRA_ENV} "$<TARGET_FILE:rstest>" -c ${REFERENCE_SAMPLES} + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" COMMENT "Running rstest on all the samples in the sample set to generate the missing hashes" VERBATIM USES_TERMINAL) add_custom_target(rstest-recreate) add_custom_command(TARGET rstest-recreate - COMMAND rstest -c -f ${REFERENCE_SAMPLES} - WORKING_DIRECTORY "${REFERENCE_SAMPLE_ARCHIVE}" + COMMAND "${CMAKE_COMMAND}" -E env ${EXTRA_ENV} "$<TARGET_FILE:rstest>" -c -f ${REFERENCE_SAMPLES} + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" COMMENT "Running rstest on all the samples in the sample set to [re]generate all the hashes" VERBATIM USES_TERMINAL) add_custom_target(rstest-test) # hashes must exist beforehand add_custom_command(TARGET rstest-test - COMMAND rstest ${REFERENCE_SAMPLES} - WORKING_DIRECTORY "${REFERENCE_SAMPLE_ARCHIVE}" + COMMAND "${CMAKE_COMMAND}" -E env ${EXTRA_ENV} "$<TARGET_FILE:rstest>" ${REFERENCE_SAMPLES} + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" COMMENT "Running rstest on all the samples in the sample set to check for regressions" VERBATIM USES_TERMINAL) add_custom_target(rstest-check) # hashes should exist beforehand if you want to check for regressions add_custom_command(TARGET rstest-check - COMMAND rstest -f ${REFERENCE_SAMPLES} - WORKING_DIRECTORY "${REFERENCE_SAMPLE_ARCHIVE}" + COMMAND "${CMAKE_COMMAND}" -E env ${EXTRA_ENV} "$<TARGET_FILE:rstest>" -f ${REFERENCE_SAMPLES} + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" COMMENT "Trying to decode all the samples in the sample set" VERBATIM USES_TERMINAL) @@ -62,6 +75,6 @@ add_custom_command(TARGET rstest-check add_custom_target(rstest-clean) add_custom_command(TARGET rstest-clean COMMAND "${CMAKE_COMMAND}" -E remove ${REFERENCE_SAMPLE_HASHES} - WORKING_DIRECTORY "${REFERENCE_SAMPLE_ARCHIVE}" + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" COMMENT "Removing *.hash, *.hash.failed for the each sample in the set" VERBATIM) diff --git a/src/external/rawspeed/cmake/src-dependencies.cmake b/src/external/rawspeed/cmake/src-dependencies.cmake index 7a3a471b6..2aee628f0 100644 --- a/src/external/rawspeed/cmake/src-dependencies.cmake +++ b/src/external/rawspeed/cmake/src-dependencies.cmake @@ -1,3 +1,5 @@ +include(FeatureSummary) + if(BUILD_TESTING) # want GTEST_ADD_TESTS() macro. NOT THE ACTUAL MODULE! include(GTEST_ADD_TESTS) @@ -17,12 +19,13 @@ if(BUILD_BENCHMARKING) add_dependencies(dependencies benchmark) endif() +unset(HAVE_PTHREAD) if(WITH_PTHREADS) message(STATUS "Looking for PThreads") set(CMAKE_THREAD_PREFER_PTHREAD 1) find_package(Threads) if(NOT CMAKE_USE_PTHREADS_INIT) - message(SEND_ERROR "Did not found POSIX Threads! Either make it find PThreads, or pass -DWITH_PTHREADS=OFF to disable threading.") + message(SEND_ERROR "Did not find POSIX Threads! Either make it find PThreads, or pass -DWITH_PTHREADS=OFF to disable threading.") else() message(STATUS "Looking for PThreads - found") set(HAVE_PTHREAD 1) @@ -30,21 +33,74 @@ if(WITH_PTHREADS) set_package_properties(Threads PROPERTIES TYPE RECOMMENDED DESCRIPTION "POSIX Threads" - PURPOSE "Used for parallelization of the library itself") + PURPOSE "Used for the main parallelization of the library") endif() else() message(STATUS "PThread-based threading is disabled. Not searching for PThreads") endif() -add_feature_info("PThread-based library threading" HAVE_PTHREAD "used for parallelized image decoding") +add_feature_info("PThread-based threading" HAVE_PTHREAD "used for parallelized image decoding") + +unset(HAVE_OPENMP) +if(WITH_OPENMP) + if(NOT HAVE_PTHREAD) + message(SEND_ERROR "POSIX locking API is used, but the POSIX Threads " + "weren't found, thus can not enable OpenMP support. " + "Either make it find PThreads, or pass " + "-DWITH_OPENMP=OFF to disable OpenMP support.") + endif() + + message(STATUS "Looking for OpenMP") + find_package(OpenMP) + + if(NOT OPENMP_FOUND) + message(SEND_ERROR "Did not find OpenMP! Either make it find OpenMP, " + "or pass -DWITH_OPENMP=OFF to disable OpenMP support.") + else() + message(STATUS "Looking for OpenMP - found (system)") + endif() + + # FIXME: OpenMP::OpenMP_CXX target, and ${OpenMP_CXX_LIBRARIES} were both + # added in cmake-3.9. Until then, this is correct: + if(NOT TARGET OpenMP::OpenMP_CXX) + add_library(OpenMP::OpenMP_CXX INTERFACE IMPORTED) + if(OpenMP_CXX_FLAGS) + set_property(TARGET OpenMP::OpenMP_CXX PROPERTY INTERFACE_COMPILE_OPTIONS ${OpenMP_CXX_FLAGS}) + set_property(TARGET OpenMP::OpenMP_CXX PROPERTY INTERFACE_LINK_LIBRARIES ${OpenMP_CXX_FLAGS}) + # Yes, both of them to the same value. + endif() + endif() -include(OpenMP) + if(NOT USE_BUNDLED_LLVMOPENMP) + target_link_libraries(rawspeed PUBLIC OpenMP::OpenMP_CXX) + else() + include(LLVMOpenMP) + + message(STATUS "Looking for OpenMP - found 'in-tree' runtime library") + + add_dependencies(dependencies omp) + target_compile_options(rawspeed PUBLIC $<TARGET_PROPERTY:OpenMP::OpenMP_CXX,INTERFACE_COMPILE_OPTIONS>) # compile time only! + target_link_libraries(rawspeed PUBLIC omp) # newly built runtime library + endif() + + set(HAVE_OPENMP 1) + + set_package_properties(OpenMP PROPERTIES + TYPE RECOMMENDED + URL https://www.openmp.org/ + DESCRIPTION "Open Multi-Processing" + PURPOSE "Marginally used for parallelization the library") +else() + message(STATUS "OpenMP is disabled") +endif() +add_feature_info("OpenMP-based threading" HAVE_OPENMP "used for parallelized image decoding") +unset(HAVE_PUGIXML) if(WITH_PUGIXML) message(STATUS "Looking for pugixml") if(NOT USE_BUNDLED_PUGIXML) find_package(Pugixml 1.2) if(NOT Pugixml_FOUND) - message(SEND_ERROR "Did not found Pugixml! Either make it find Pugixml, or pass -DUSE_BUNDLED_PUGIXML=ON to enable in-tree pugixml.") + message(SEND_ERROR "Did not find Pugixml! Either make it find Pugixml, or pass -DUSE_BUNDLED_PUGIXML=ON to enable in-tree pugixml.") else() message(STATUS "Looking for pugixml - found (system)") endif() @@ -79,6 +135,7 @@ else() endif() add_feature_info("XML reading" HAVE_PUGIXML "used for loading of data/cameras.xml") +unset(HAVE_JPEG) if(WITH_JPEG) message(STATUS "Looking for JPEG") find_package(JPEG) @@ -107,6 +164,7 @@ else() endif() add_feature_info("Lossy JPEG decoding" HAVE_JPEG "used for DNG Lossy JPEG compression decoding") +unset(HAVE_ZLIB) if (WITH_ZLIB) message(STATUS "Looking for ZLIB") if(NOT USE_BUNDLED_ZLIB) |