summaryrefslogtreecommitdiff
path: root/src/external/rawspeed/cmake
diff options
context:
space:
mode:
authorDavid Bremner <bremner@debian.org>2018-12-25 22:44:44 +0900
committerDavid Bremner <bremner@debian.org>2018-12-25 22:44:44 +0900
commit33cc53ba511843ac9857470e74e043013d3620fe (patch)
treeebc0e94b5486710fc2f381d92fab9a594f1dc62c /src/external/rawspeed/cmake
parent1fddb41abdd4ca3be5bfdfe019e126b188879e15 (diff)
Importing darktable_2.6.0.orig.tar.xz
Diffstat (limited to 'src/external/rawspeed/cmake')
-rw-r--r--src/external/rawspeed/cmake/Modules/CheckZLIB.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMAr.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMCXXFilt.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMClangTidy.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMCov.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMLLD.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMNm.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMObjCopy.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMObjDump.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMProfData.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/FindLLVMRanLib.cmake2
-rw-r--r--src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake10
-rw-r--r--src/external/rawspeed/cmake/Modules/GoogleBenchmark.cmake.in17
-rw-r--r--src/external/rawspeed/cmake/Modules/GoogleTest.cmake10
-rw-r--r--src/external/rawspeed/cmake/Modules/GoogleTest.cmake.in15
-rw-r--r--src/external/rawspeed/cmake/Modules/LLVMOpenMP.cmake71
-rw-r--r--src/external/rawspeed/cmake/Modules/LLVMOpenMP.cmake.in52
-rw-r--r--src/external/rawspeed/cmake/Modules/Pugixml.cmake10
-rw-r--r--src/external/rawspeed/cmake/Modules/Pugixml.cmake.in15
-rw-r--r--src/external/rawspeed/cmake/Modules/Zlib.cmake14
-rw-r--r--src/external/rawspeed/cmake/Modules/Zlib.cmake.in11
-rw-r--r--src/external/rawspeed/cmake/OpenMP.cmake23
-rw-r--r--src/external/rawspeed/cmake/compiler-flags.cmake13
-rw-r--r--src/external/rawspeed/cmake/compiler-versions.cmake29
-rw-r--r--src/external/rawspeed/cmake/debug-info.cmake9
-rw-r--r--src/external/rawspeed/cmake/gcc-gcov.cmake2
-rw-r--r--src/external/rawspeed/cmake/iwyu.imp7
-rw-r--r--src/external/rawspeed/cmake/llvm-cov.cmake2
-rw-r--r--src/external/rawspeed/cmake/llvm-profdata.cmake2
-rw-r--r--src/external/rawspeed/cmake/sample-based-testing.cmake51
-rw-r--r--src/external/rawspeed/cmake/src-dependencies.cmake68
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)