CMakeLists.txt (7609B)
1 # Copyright (c) the JPEG XL Project 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 if((SANITIZER STREQUAL "asan") OR (SANITIZER STREQUAL "msan")) 16 set(BUILD_TESTING OFF) 17 endif() 18 19 # Highway 20 set(HWY_SYSTEM_GTEST ON CACHE INTERNAL "") 21 set(HWY_FORCE_STATIC_LIBS ON CACHE INTERNAL "") 22 set(HWY_ENABLE_CONTRIB OFF CACHE INTERNAL "") 23 set(HWY_ENABLE_EXAMPLES OFF CACHE INTERNAL "") 24 set(HWY_ENABLE_TESTS OFF CACHE INTERNAL "") 25 if((SANITIZER STREQUAL "asan") OR (SANITIZER STREQUAL "msan")) 26 set(HWY_ENABLE_INSTALL OFF CACHE INTERNAL "") 27 endif() 28 if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/highway/CMakeLists.txt" AND 29 NOT JPEGXL_FORCE_SYSTEM_HWY) 30 add_subdirectory(highway) 31 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/highway/LICENSE" 32 ${PROJECT_BINARY_DIR}/LICENSE.highway COPYONLY) 33 else() 34 find_package(HWY 1.0.7) 35 if (NOT HWY_FOUND) 36 message(FATAL_ERROR 37 "Highway library (hwy) not found. Install libhwy-dev or download it " 38 "to third_party/highway from https://github.com/google/highway . " 39 "Highway is required to build JPEG XL. You can run " 40 "${PROJECT_SOURCE_DIR}/deps.sh to download this dependency.") 41 endif() 42 if(JPEGXL_DEP_LICENSE_DIR) 43 configure_file("${JPEGXL_DEP_LICENSE_DIR}/libhwy-dev/copyright" 44 ${PROJECT_BINARY_DIR}/LICENSE.highway COPYONLY) 45 endif() # JPEGXL_DEP_LICENSE_DIR 46 endif() 47 48 # brotli 49 if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/brotli/c/include/brotli/decode.h" OR 50 JPEGXL_FORCE_SYSTEM_BROTLI) 51 find_package(Brotli) 52 if (NOT Brotli_FOUND) 53 message(FATAL_ERROR 54 "Brotli not found, install brotli-dev or download brotli source code to" 55 " third_party/brotli from https://github.com/google/brotli. You can use" 56 " ${PROJECT_SOURCE_DIR}/deps.sh to download this dependency.") 57 endif () 58 if(JPEGXL_DEP_LICENSE_DIR) 59 configure_file("${JPEGXL_DEP_LICENSE_DIR}/libbrotli-dev/copyright" 60 ${PROJECT_BINARY_DIR}/LICENSE.brotli COPYONLY) 61 endif() # JPEGXL_DEP_LICENSE_DIR 62 else() 63 # Compile brotli from sources. 64 set(BROTLI_DISABLE_TESTS ON CACHE STRING "Disable Brotli tests") 65 # Override default "no-install" policy. 66 if((NOT SANITIZER STREQUAL "asan") AND (NOT SANITIZER STREQUAL "msan")) 67 set(BROTLI_BUNDLED_MODE OFF CACHE INTERNAL "") 68 endif() 69 add_subdirectory(brotli) 70 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/brotli/LICENSE" 71 ${PROJECT_BINARY_DIR}/LICENSE.brotli COPYONLY) 72 if(APPLE) 73 if(NOT DEFINED CMAKE_MACOSX_RPATH) 74 # Use @rpath in install_name when CMAKE_MACOSX_RPATH is not set. 75 set_property(TARGET brotlienc PROPERTY MACOSX_RPATH TRUE) 76 set_property(TARGET brotlidec PROPERTY MACOSX_RPATH TRUE) 77 set_property(TARGET brotlicommon PROPERTY MACOSX_RPATH TRUE) 78 endif() 79 if((NOT DEFINED CMAKE_MACOSX_RPATH) OR CMAKE_MACOSX_RPATH) 80 # Set library search path when @rpath is used. 81 if(NOT DEFINED CMAKE_INSTALL_RPATH) 82 set_property(TARGET brotlienc PROPERTY INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 83 set_property(TARGET brotlidec PROPERTY INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 84 set_property(TARGET brotlicommon PROPERTY INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 85 endif() 86 else() 87 # Set conventional install_name when @rpath is not used. 88 if(NOT DEFINED CMAKE_INSTALL_NAME_DIR) 89 set_property(TARGET brotlienc PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib") 90 set_property(TARGET brotlidec PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib") 91 set_property(TARGET brotlicommon PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib") 92 endif() 93 endif() 94 endif() # APPLE 95 endif() 96 97 # *cms 98 if (JPEGXL_ENABLE_SKCMS) 99 if( NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/skcms/skcms.h" ) 100 message(FATAL_ERROR "Please run ${PROJECT_SOURCE_DIR}/deps.sh to fetch the " 101 "build dependencies.") 102 endif() 103 include(skcms.cmake) 104 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/skcms/LICENSE" 105 ${PROJECT_BINARY_DIR}/LICENSE.skcms COPYONLY) 106 endif () 107 if (JPEGXL_ENABLE_VIEWERS OR NOT JPEGXL_ENABLE_SKCMS OR JPEGXL_ENABLE_PLUGINS) 108 if( NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lcms/.git" OR JPEGXL_FORCE_SYSTEM_LCMS2 ) 109 find_package(LCMS2 2.12) 110 if ( NOT LCMS2_FOUND ) 111 message(FATAL_ERROR "Please install lcms2 or run git submodule update --init") 112 endif () 113 else() 114 include(lcms2.cmake) 115 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/lcms/COPYING" 116 ${PROJECT_BINARY_DIR}/LICENSE.lcms COPYONLY) 117 endif() 118 endif() 119 120 # libpng 121 if (JPEGXL_BUNDLE_LIBPNG AND EMSCRIPTEN) 122 if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libpng/CMakeLists.txt") 123 message(FATAL_ERROR "Please run ${PROJECT_SOURCE_DIR}/deps.sh to fetch the " 124 "build dependencies.") 125 endif() 126 file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/libpng/scripts/pnglibconf.h.prebuilt" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/libpng") 127 file(RENAME "${CMAKE_CURRENT_SOURCE_DIR}/libpng/pnglibconf.h.prebuilt" "${CMAKE_CURRENT_SOURCE_DIR}/libpng/pnglibconf.h") 128 set(ZLIB_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/zlib/") 129 set(ZLIB_LIBRARIES "") 130 set(PNG_FOUND YES PARENT_SCOPE) 131 set(PNG_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/libpng/" PARENT_SCOPE) 132 set(PNG_LIBRARIES "" PARENT_SCOPE) 133 elseif (JPEGXL_BUNDLE_LIBPNG) 134 if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libpng/CMakeLists.txt") 135 message(FATAL_ERROR "Please run ${PROJECT_SOURCE_DIR}/deps.sh to fetch the " 136 "build dependencies.") 137 endif() 138 add_subdirectory(zlib) 139 set(PNG_STATIC ON CACHE BOOL "") 140 set(PNG_EXECUTABLES OFF CACHE BOOL "") 141 set(PNG_BUILD_ZLIB ON CACHE BOOL "") 142 set(PNG_TESTS OFF CACHE BOOL "") 143 set(SKIP_INSTALL_ALL ON CACHE BOOL "") 144 set(ZLIB_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/zlib/") 145 set(ZLIB_LIBRARIES zlibstatic) 146 add_subdirectory(libpng EXCLUDE_FROM_ALL) 147 set(PNG_FOUND YES PARENT_SCOPE) 148 set(PNG_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/libpng/" PARENT_SCOPE) 149 set(PNG_LIBRARIES png_static PARENT_SCOPE) 150 set_property(TARGET png_static PROPERTY POSITION_INDEPENDENT_CODE ON) 151 set_property(TARGET zlibstatic PROPERTY POSITION_INDEPENDENT_CODE ON) 152 if(JPEGXL_DEP_LICENSE_DIR) 153 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libpng/LICENSE" 154 ${PROJECT_BINARY_DIR}/LICENSE.libpng COPYONLY) 155 endif() 156 else() 157 find_package(PNG) 158 if(PNG_FOUND AND JPEGXL_DEP_LICENSE_DIR) 159 configure_file("${JPEGXL_DEP_LICENSE_DIR}/zlib1g-dev/copyright" 160 ${PROJECT_BINARY_DIR}/LICENSE.zlib COPYONLY) 161 configure_file("${JPEGXL_DEP_LICENSE_DIR}/libpng-dev/copyright" 162 ${PROJECT_BINARY_DIR}/LICENSE.libpng COPYONLY) 163 endif() # JPEGXL_DEP_LICENSE_DIR 164 endif() 165 166 # sjpeg 167 if (JPEGXL_ENABLE_SJPEG) 168 if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/sjpeg/CMakeLists.txt") 169 message(FATAL_ERROR "Please run ${PROJECT_SOURCE_DIR}/deps.sh to fetch the " 170 "build dependencies.") 171 endif() 172 include(sjpeg.cmake) 173 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/sjpeg/COPYING" 174 ${PROJECT_BINARY_DIR}/LICENSE.sjpeg COPYONLY) 175 endif ()