1*89a0ef05SAndroid Build Coastguard Worker# 2*89a0ef05SAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project 3*89a0ef05SAndroid Build Coastguard Worker# 4*89a0ef05SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 5*89a0ef05SAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 6*89a0ef05SAndroid Build Coastguard Worker# the License at 7*89a0ef05SAndroid Build Coastguard Worker# 8*89a0ef05SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*89a0ef05SAndroid Build Coastguard Worker# 10*89a0ef05SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*89a0ef05SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12*89a0ef05SAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13*89a0ef05SAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 14*89a0ef05SAndroid Build Coastguard Worker# the License. 15*89a0ef05SAndroid Build Coastguard Worker# 16*89a0ef05SAndroid Build Coastguard Worker 17*89a0ef05SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.15) 18*89a0ef05SAndroid Build Coastguard Worker 19*89a0ef05SAndroid Build Coastguard Worker# CMP0091: MSVC runtime library flags are selected by an abstraction. 20*89a0ef05SAndroid Build Coastguard Worker# New in CMake 3.15. https://cmake.org/cmake/help/latest/policy/CMP0091.html 21*89a0ef05SAndroid Build Coastguard Workerif(POLICY CMP0091) 22*89a0ef05SAndroid Build Coastguard Worker cmake_policy(SET CMP0091 OLD) 23*89a0ef05SAndroid Build Coastguard Workerendif() 24*89a0ef05SAndroid Build Coastguard Worker 25*89a0ef05SAndroid Build Coastguard Workerset(UHDR_MAJOR_VERSION 1) 26*89a0ef05SAndroid Build Coastguard Workerset(UHDR_MINOR_VERSION 3) 27*89a0ef05SAndroid Build Coastguard Workerset(UHDR_PATCH_VERSION 0) 28*89a0ef05SAndroid Build Coastguard Workerproject(libuhdr 29*89a0ef05SAndroid Build Coastguard Worker VERSION ${UHDR_MAJOR_VERSION}.${UHDR_MINOR_VERSION}.${UHDR_PATCH_VERSION} 30*89a0ef05SAndroid Build Coastguard Worker LANGUAGES C CXX 31*89a0ef05SAndroid Build Coastguard Worker DESCRIPTION "Library for encoding and decoding ultrahdr images") 32*89a0ef05SAndroid Build Coastguard Worker 33*89a0ef05SAndroid Build Coastguard Worker########################################################### 34*89a0ef05SAndroid Build Coastguard Worker# Detect system 35*89a0ef05SAndroid Build Coastguard Worker########################################################### 36*89a0ef05SAndroid Build Coastguard Workerif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 37*89a0ef05SAndroid Build Coastguard Workerelseif(${CMAKE_SYSTEM_NAME} MATCHES "Emscripten") 38*89a0ef05SAndroid Build Coastguard Workerelseif(${CMAKE_SYSTEM_NAME} MATCHES "Android") 39*89a0ef05SAndroid Build Coastguard Workerelseif(WIN32) 40*89a0ef05SAndroid Build Coastguard Workerelseif(APPLE) 41*89a0ef05SAndroid Build Coastguard Workerelse() 42*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Platform ${CMAKE_SYSTEM_NAME} not recognized") 43*89a0ef05SAndroid Build Coastguard Workerendif() 44*89a0ef05SAndroid Build Coastguard Worker 45*89a0ef05SAndroid Build Coastguard Workerif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") 46*89a0ef05SAndroid Build Coastguard Worker if(CMAKE_SIZEOF_VOID_P EQUAL 8) 47*89a0ef05SAndroid Build Coastguard Worker set(ARCH "amd64") 48*89a0ef05SAndroid Build Coastguard Worker else() 49*89a0ef05SAndroid Build Coastguard Worker set(ARCH "i386") 50*89a0ef05SAndroid Build Coastguard Worker endif() 51*89a0ef05SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*") 52*89a0ef05SAndroid Build Coastguard Worker set(ARCH "i386") 53*89a0ef05SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)") 54*89a0ef05SAndroid Build Coastguard Worker if(CMAKE_SIZEOF_VOID_P EQUAL 8) 55*89a0ef05SAndroid Build Coastguard Worker set(ARCH "aarch64") 56*89a0ef05SAndroid Build Coastguard Worker else() 57*89a0ef05SAndroid Build Coastguard Worker set(ARCH "arm") 58*89a0ef05SAndroid Build Coastguard Worker endif() 59*89a0ef05SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)") 60*89a0ef05SAndroid Build Coastguard Worker set(ARCH "arm") 61*89a0ef05SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv64") 62*89a0ef05SAndroid Build Coastguard Worker set(ARCH "riscv64") 63*89a0ef05SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv32") 64*89a0ef05SAndroid Build Coastguard Worker set(ARCH "riscv32") 65*89a0ef05SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^loongarch64") 66*89a0ef05SAndroid Build Coastguard Worker set(ARCH "loong64") 67*89a0ef05SAndroid Build Coastguard Workerelse() 68*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Architecture: ${CMAKE_SYSTEM_PROCESSOR} not recognized") 69*89a0ef05SAndroid Build Coastguard Workerendif() 70*89a0ef05SAndroid Build Coastguard Worker 71*89a0ef05SAndroid Build Coastguard Worker########################################################### 72*89a0ef05SAndroid Build Coastguard Worker# Directories 73*89a0ef05SAndroid Build Coastguard Worker########################################################### 74*89a0ef05SAndroid Build Coastguard Workerset(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) 75*89a0ef05SAndroid Build Coastguard Workerset(THIRD_PARTY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party) 76*89a0ef05SAndroid Build Coastguard Workerset(JAVA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/java) 77*89a0ef05SAndroid Build Coastguard Workerset(TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests) 78*89a0ef05SAndroid Build Coastguard Workerset(BENCHMARK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/benchmark) 79*89a0ef05SAndroid Build Coastguard Workerset(FUZZERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/fuzzer) 80*89a0ef05SAndroid Build Coastguard Workerset(EXAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/examples) 81*89a0ef05SAndroid Build Coastguard Workerset(EXPORT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) 82*89a0ef05SAndroid Build Coastguard Worker 83*89a0ef05SAndroid Build Coastguard Workerif(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) 84*89a0ef05SAndroid Build Coastguard Worker message(WARNING "Selected in-source build. Preferably, create a build/ directory and build from there.") 85*89a0ef05SAndroid Build Coastguard Workerendif() 86*89a0ef05SAndroid Build Coastguard Worker 87*89a0ef05SAndroid Build Coastguard Worker########################################################### 88*89a0ef05SAndroid Build Coastguard Worker# Options 89*89a0ef05SAndroid Build Coastguard Worker########################################################### 90*89a0ef05SAndroid Build Coastguard Workerget_cmake_property(IS_MULTI GENERATOR_IS_MULTI_CONFIG) 91*89a0ef05SAndroid Build Coastguard Workerif(NOT IS_MULTI) 92*89a0ef05SAndroid Build Coastguard Worker if(NOT CMAKE_BUILD_TYPE) 93*89a0ef05SAndroid Build Coastguard Worker message(STATUS "No build type chosen, selecting Release") 94*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release MinSizeRel RelWithDebInfo." FORCE) 95*89a0ef05SAndroid Build Coastguard Worker endif() 96*89a0ef05SAndroid Build Coastguard Workerendif() 97*89a0ef05SAndroid Build Coastguard Worker 98*89a0ef05SAndroid Build Coastguard Workerif(EMSCRIPTEN) 99*89a0ef05SAndroid Build Coastguard Worker # platform does not support dynamic linking? 100*89a0ef05SAndroid Build Coastguard Worker message(STATUS "For wasm targets, selecting static only builds") 101*89a0ef05SAndroid Build Coastguard Worker option(BUILD_SHARED_LIBS "Build shared libraries" FALSE) 102*89a0ef05SAndroid Build Coastguard Workerelseif(NOT DEFINED BUILD_SHARED_LIBS) 103*89a0ef05SAndroid Build Coastguard Worker message(STATUS "No target type chosen, selecting Shared") 104*89a0ef05SAndroid Build Coastguard Worker option(BUILD_SHARED_LIBS "Build shared libraries" TRUE) 105*89a0ef05SAndroid Build Coastguard Workerendif() 106*89a0ef05SAndroid Build Coastguard Worker 107*89a0ef05SAndroid Build Coastguard Workerfunction(option_if_not_defined name description default) 108*89a0ef05SAndroid Build Coastguard Worker if(NOT DEFINED ${name}) 109*89a0ef05SAndroid Build Coastguard Worker option(${name} ${description} ${default}) 110*89a0ef05SAndroid Build Coastguard Worker endif() 111*89a0ef05SAndroid Build Coastguard Workerendfunction() 112*89a0ef05SAndroid Build Coastguard Worker 113*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_BUILD_EXAMPLES "Build sample application " TRUE) 114*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_BUILD_TESTS "Build unit tests " FALSE) 115*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_BUILD_BENCHMARK "Build benchmark tests " FALSE) 116*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_BUILD_FUZZERS "Build fuzz test applications " FALSE) 117*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_BUILD_DEPS "Build deps and not use pre-installed packages " FALSE) 118*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_BUILD_JAVA "Build JNI wrapper and Java front-end classes " FALSE) 119*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_BUILD_PACKAGING "Build distribution packages using CPack " FALSE) 120*89a0ef05SAndroid Build Coastguard Worker 121*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_ENABLE_LOGS "Build with verbose logging " FALSE) 122*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_ENABLE_INSTALL "Enable install and uninstall targets for libuhdr package " TRUE) 123*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_ENABLE_INTRINSICS "Build with SIMD acceleration " TRUE) 124*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_ENABLE_GLES "Build with GPU acceleration " FALSE) 125*89a0ef05SAndroid Build Coastguard Workeroption_if_not_defined(UHDR_ENABLE_WERROR "Build with -Werror" FALSE) 126*89a0ef05SAndroid Build Coastguard Worker 127*89a0ef05SAndroid Build Coastguard Worker# pre-requisites 128*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_TESTS AND EMSCRIPTEN) 129*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Building tests not supported for wasm targets") 130*89a0ef05SAndroid Build Coastguard Workerendif() 131*89a0ef05SAndroid Build Coastguard Worker 132*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_BENCHMARK AND WIN32) 133*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Building benchmarks not supported in Windows") 134*89a0ef05SAndroid Build Coastguard Workerendif() 135*89a0ef05SAndroid Build Coastguard Worker 136*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_BENCHMARK AND EMSCRIPTEN) 137*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Building benchmarks not supported for wasm targets") 138*89a0ef05SAndroid Build Coastguard Workerendif() 139*89a0ef05SAndroid Build Coastguard Worker 140*89a0ef05SAndroid Build Coastguard Worker# side effects 141*89a0ef05SAndroid Build Coastguard Workerif(CMAKE_CROSSCOMPILING AND UHDR_ENABLE_INSTALL) 142*89a0ef05SAndroid Build Coastguard Worker set(UHDR_ENABLE_INSTALL FALSE) # disable install and uninstall targets during cross compilation. 143*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Install and uninstall targets - Disabled") 144*89a0ef05SAndroid Build Coastguard Workerendif() 145*89a0ef05SAndroid Build Coastguard Worker 146*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_FUZZERS AND NOT UHDR_BUILD_DEPS) 147*89a0ef05SAndroid Build Coastguard Worker set(UHDR_BUILD_DEPS TRUE) # For fuzz testing its best to build all dependencies from source. 148*89a0ef05SAndroid Build Coastguard Worker # This is to instrument dependency libs as well. 149*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Building dependencies from source - Enabled") 150*89a0ef05SAndroid Build Coastguard Workerendif() 151*89a0ef05SAndroid Build Coastguard Worker 152*89a0ef05SAndroid Build Coastguard Workerif(DEFINED UHDR_SANITIZE_OPTIONS AND NOT UHDR_BUILD_DEPS) 153*89a0ef05SAndroid Build Coastguard Worker set(UHDR_BUILD_DEPS TRUE) # If sanitize options are enabled, its best to build all dependencies from source. 154*89a0ef05SAndroid Build Coastguard Worker # This is to instrument dependency libs as well. 155*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Building dependencies from source - Enabled") 156*89a0ef05SAndroid Build Coastguard Workerendif() 157*89a0ef05SAndroid Build Coastguard Worker 158*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_DEPS AND UHDR_ENABLE_INSTALL) 159*89a0ef05SAndroid Build Coastguard Worker set(UHDR_ENABLE_INSTALL FALSE) # If dependencies are not chosen from installed packages but are built 160*89a0ef05SAndroid Build Coastguard Worker # from source, its best to disallow system wide installation of 161*89a0ef05SAndroid Build Coastguard Worker # uhdr to avoid possible abi/api conflicts. 162*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Install and uninstall targets - Disabled") 163*89a0ef05SAndroid Build Coastguard Workerendif() 164*89a0ef05SAndroid Build Coastguard Worker 165*89a0ef05SAndroid Build Coastguard Worker########################################################### 166*89a0ef05SAndroid Build Coastguard Worker# Compile flags 167*89a0ef05SAndroid Build Coastguard Worker########################################################### 168*89a0ef05SAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD 17) 169*89a0ef05SAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD_REQUIRED ON) 170*89a0ef05SAndroid Build Coastguard Workerset(CMAKE_CXX_EXTENSIONS OFF) 171*89a0ef05SAndroid Build Coastguard Workerif(BUILD_SHARED_LIBS) 172*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE ON) 173*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_CXX_VISIBILITY_PRESET hidden) 174*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) 175*89a0ef05SAndroid Build Coastguard Worker set(UHDR_ENABLE_STATIC_LINKING OFF) 176*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-DUHDR_BUILDING_SHARED_LIBRARY) 177*89a0ef05SAndroid Build Coastguard Workerelse() 178*89a0ef05SAndroid Build Coastguard Worker if(WIN32) 179*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a) 180*89a0ef05SAndroid Build Coastguard Worker else() 181*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_FIND_LIBRARY_SUFFIXES .a) 182*89a0ef05SAndroid Build Coastguard Worker endif() 183*89a0ef05SAndroid Build Coastguard Worker if(APPLE) 184*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Apple does not support statically linking an entire executable, disabling '-static' option") 185*89a0ef05SAndroid Build Coastguard Worker set(UHDR_ENABLE_STATIC_LINKING OFF) 186*89a0ef05SAndroid Build Coastguard Worker elseif(DEFINED UHDR_SANITIZE_OPTIONS OR UHDR_BUILD_FUZZERS) 187*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Possible that sanitizer libraries are only DSO's, disabling '-static' option") 188*89a0ef05SAndroid Build Coastguard Worker set(UHDR_ENABLE_STATIC_LINKING OFF) 189*89a0ef05SAndroid Build Coastguard Worker elseif(MSVC) 190*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Disabling '-static' option in MSVC platforms") 191*89a0ef05SAndroid Build Coastguard Worker set(UHDR_ENABLE_STATIC_LINKING OFF) 192*89a0ef05SAndroid Build Coastguard Worker else() 193*89a0ef05SAndroid Build Coastguard Worker set(UHDR_ENABLE_STATIC_LINKING ON) 194*89a0ef05SAndroid Build Coastguard Worker endif() 195*89a0ef05SAndroid Build Coastguard Workerendif() 196*89a0ef05SAndroid Build Coastguard Workerif(UHDR_ENABLE_LOGS) 197*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-DLOG_NDEBUG) 198*89a0ef05SAndroid Build Coastguard Workerendif() 199*89a0ef05SAndroid Build Coastguard Workerif(UHDR_ENABLE_INTRINSICS) 200*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-DUHDR_ENABLE_INTRINSICS) 201*89a0ef05SAndroid Build Coastguard Workerendif() 202*89a0ef05SAndroid Build Coastguard Worker 203*89a0ef05SAndroid Build Coastguard Workerinclude(CheckCXXCompilerFlag) 204*89a0ef05SAndroid Build Coastguard Workerfunction(CheckCompilerOption opt res) 205*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_REQUIRED_FLAGS ${opt}) 206*89a0ef05SAndroid Build Coastguard Worker check_cxx_compiler_flag(${opt} ${res}) 207*89a0ef05SAndroid Build Coastguard Worker unset(CMAKE_REQUIRED_FLAGS) 208*89a0ef05SAndroid Build Coastguard Worker if(NOT ${res}) 209*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Unsupported compiler option(s) ${opt}") 210*89a0ef05SAndroid Build Coastguard Worker endif() 211*89a0ef05SAndroid Build Coastguard Workerendfunction(CheckCompilerOption) 212*89a0ef05SAndroid Build Coastguard Worker 213*89a0ef05SAndroid Build Coastguard Workerif(DEFINED UHDR_SANITIZE_OPTIONS) 214*89a0ef05SAndroid Build Coastguard Worker CheckCompilerOption("-fsanitize=${UHDR_SANITIZE_OPTIONS}" SUPPORTS_SAN_OPTIONS) 215*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-fsanitize=${UHDR_SANITIZE_OPTIONS}) 216*89a0ef05SAndroid Build Coastguard Worker add_link_options(-fsanitize=${UHDR_SANITIZE_OPTIONS}) 217*89a0ef05SAndroid Build Coastguard Workerendif() 218*89a0ef05SAndroid Build Coastguard Worker 219*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_FUZZERS) 220*89a0ef05SAndroid Build Coastguard Worker CheckCompilerOption("-fsanitize=fuzzer-no-link" fuzz) 221*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-fsanitize=fuzzer-no-link) 222*89a0ef05SAndroid Build Coastguard Workerendif() 223*89a0ef05SAndroid Build Coastguard Worker 224*89a0ef05SAndroid Build Coastguard Workerset(UHDR_WERROR_FLAGS "") 225*89a0ef05SAndroid Build Coastguard Workerif(MSVC) 226*89a0ef05SAndroid Build Coastguard Worker add_definitions(-D_CRT_SECURE_NO_WARNINGS) 227*89a0ef05SAndroid Build Coastguard Worker # Disable specific warnings 228*89a0ef05SAndroid Build Coastguard Worker # TODO: None of these should be disabled, but for now, for a warning-free msvc build these are 229*89a0ef05SAndroid Build Coastguard Worker # added. fix the warnings and remove these filters 230*89a0ef05SAndroid Build Coastguard Worker add_compile_options(/wd4244) # conversion from 'type1' to 'type2', possible loss of data 231*89a0ef05SAndroid Build Coastguard Worker add_compile_options(/wd4267) # conversion from 'size_t' to 'type' possible loss of data 232*89a0ef05SAndroid Build Coastguard Worker add_compile_options(/wd4305) # truncation from 'double' to 'float' 233*89a0ef05SAndroid Build Coastguard Worker add_compile_options(/wd4838) # conversion from 'type1' to 'type2' requires a narrowing conversion 234*89a0ef05SAndroid Build Coastguard Worker add_compile_options(/wd26812) # Prefer enum class over enum 235*89a0ef05SAndroid Build Coastguard Workerelseif(EMSCRIPTEN) 236*89a0ef05SAndroid Build Coastguard Worker if(NOT UHDR_BUILD_DEPS) 237*89a0ef05SAndroid Build Coastguard Worker include(CheckCSourceCompiles) 238*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_REQUIRED_FLAGS "--use-port=libjpeg") 239*89a0ef05SAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LINK_OPTIONS "--use-port=libjpeg") 240*89a0ef05SAndroid Build Coastguard Worker check_c_source_compiles([=[ 241*89a0ef05SAndroid Build Coastguard Worker #include <stdio.h> 242*89a0ef05SAndroid Build Coastguard Worker #include <jpeglib.h> 243*89a0ef05SAndroid Build Coastguard Worker int main(void) { 244*89a0ef05SAndroid Build Coastguard Worker struct jpeg_compress_struct cinfo; 245*89a0ef05SAndroid Build Coastguard Worker struct jpeg_error_mgr jerr; 246*89a0ef05SAndroid Build Coastguard Worker cinfo.err=jpeg_std_error(&jerr); 247*89a0ef05SAndroid Build Coastguard Worker jpeg_create_compress(&cinfo); 248*89a0ef05SAndroid Build Coastguard Worker jpeg_destroy_compress(&cinfo); 249*89a0ef05SAndroid Build Coastguard Worker return 0; 250*89a0ef05SAndroid Build Coastguard Worker } 251*89a0ef05SAndroid Build Coastguard Worker ]=] HAVE_JPEG) 252*89a0ef05SAndroid Build Coastguard Worker if(NOT HAVE_JPEG) 253*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Could NOT compile with --use-port=libjpeg, resolve this \ 254*89a0ef05SAndroid Build Coastguard Worker or try 'cmake -DUHDR_BUILD_DEPS=1'") 255*89a0ef05SAndroid Build Coastguard Worker endif() 256*89a0ef05SAndroid Build Coastguard Worker endif() 257*89a0ef05SAndroid Build Coastguard Workerelse() 258*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-ffunction-sections) 259*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-fdata-sections) 260*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-fomit-frame-pointer) 261*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-ffp-contract=fast) 262*89a0ef05SAndroid Build Coastguard Worker if(ARCH STREQUAL "i386") 263*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-m32) 264*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-march=i386) 265*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-mtune=generic) 266*89a0ef05SAndroid Build Coastguard Worker elseif(ARCH STREQUAL "amd64") 267*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-m64) 268*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-march=x86-64) 269*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-mtune=generic) 270*89a0ef05SAndroid Build Coastguard Worker elseif(ARCH STREQUAL "arm") 271*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-march=armv7-a) 272*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-marm) 273*89a0ef05SAndroid Build Coastguard Worker if(NOT ANDROID_ABI) 274*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-mfloat-abi=hard) 275*89a0ef05SAndroid Build Coastguard Worker endif() 276*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-mfpu=neon-vfpv3) 277*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-fno-lax-vector-conversions) 278*89a0ef05SAndroid Build Coastguard Worker elseif(ARCH STREQUAL "aarch64") 279*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-march=armv8-a) 280*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-fno-lax-vector-conversions) 281*89a0ef05SAndroid Build Coastguard Worker elseif(ARCH STREQUAL "riscv64") 282*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-march=rv64gc) 283*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-mabi=lp64d) 284*89a0ef05SAndroid Build Coastguard Worker elseif(ARCH STREQUAL "riscv32") 285*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-march=rv32gc) 286*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-mabi=ilp32d) 287*89a0ef05SAndroid Build Coastguard Worker elseif(ARCH STREQUAL "loong64") 288*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-march=loongarch64) 289*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-mabi=lp64d) 290*89a0ef05SAndroid Build Coastguard Worker endif() 291*89a0ef05SAndroid Build Coastguard Worker 292*89a0ef05SAndroid Build Coastguard Worker if(UHDR_ENABLE_WERROR) 293*89a0ef05SAndroid Build Coastguard Worker CheckCompilerOption("-Werror" SUPPORTS_WERROR) 294*89a0ef05SAndroid Build Coastguard Worker set(UHDR_WERROR_FLAGS "-Werror") 295*89a0ef05SAndroid Build Coastguard Worker endif() 296*89a0ef05SAndroid Build Coastguard Workerendif() 297*89a0ef05SAndroid Build Coastguard Worker 298*89a0ef05SAndroid Build Coastguard Worker########################################################### 299*89a0ef05SAndroid Build Coastguard Worker# Utils 300*89a0ef05SAndroid Build Coastguard Worker########################################################### 301*89a0ef05SAndroid Build Coastguard Worker# copied from https://github.com/google/shaderc/blob/main/cmake/utils.cmake 302*89a0ef05SAndroid Build Coastguard Workermacro(get_transitive_static_libs target out_list) 303*89a0ef05SAndroid Build Coastguard Worker if(TARGET ${target}) 304*89a0ef05SAndroid Build Coastguard Worker get_target_property(target_type ${target} TYPE) 305*89a0ef05SAndroid Build Coastguard Worker if(target_type STREQUAL "STATIC_LIBRARY") 306*89a0ef05SAndroid Build Coastguard Worker list(INSERT ${out_list} 0 ${target}) 307*89a0ef05SAndroid Build Coastguard Worker get_target_property(libs ${target} LINK_LIBRARIES) 308*89a0ef05SAndroid Build Coastguard Worker if(libs) 309*89a0ef05SAndroid Build Coastguard Worker foreach(lib ${libs}) 310*89a0ef05SAndroid Build Coastguard Worker get_transitive_static_libs(${lib} ${out_list}) 311*89a0ef05SAndroid Build Coastguard Worker endforeach() 312*89a0ef05SAndroid Build Coastguard Worker endif() 313*89a0ef05SAndroid Build Coastguard Worker endif() 314*89a0ef05SAndroid Build Coastguard Worker endif() 315*89a0ef05SAndroid Build Coastguard Workerendmacro() 316*89a0ef05SAndroid Build Coastguard Worker 317*89a0ef05SAndroid Build Coastguard Worker# combine a list of static libraries in to a single library 318*89a0ef05SAndroid Build Coastguard Workerfunction(combine_static_libs target output_target) 319*89a0ef05SAndroid Build Coastguard Worker set(all_libs_list "") 320*89a0ef05SAndroid Build Coastguard Worker get_transitive_static_libs(${target} all_libs_list) 321*89a0ef05SAndroid Build Coastguard Worker foreach(lib IN LISTS all_libs_list) 322*89a0ef05SAndroid Build Coastguard Worker target_sources(${output_target} PRIVATE $<TARGET_OBJECTS:${lib}>) 323*89a0ef05SAndroid Build Coastguard Worker endforeach() 324*89a0ef05SAndroid Build Coastguard Workerendfunction() 325*89a0ef05SAndroid Build Coastguard Worker 326*89a0ef05SAndroid Build Coastguard Worker########################################################### 327*89a0ef05SAndroid Build Coastguard Worker# Dependencies 328*89a0ef05SAndroid Build Coastguard Worker########################################################### 329*89a0ef05SAndroid Build Coastguard Workerlist(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") 330*89a0ef05SAndroid Build Coastguard Worker 331*89a0ef05SAndroid Build Coastguard Workerif(${CMAKE_SYSTEM_NAME} MATCHES "Android") 332*89a0ef05SAndroid Build Coastguard Worker if (UHDR_ENABLE_LOGS) 333*89a0ef05SAndroid Build Coastguard Worker find_library(log-lib log QUIET) 334*89a0ef05SAndroid Build Coastguard Worker if(NOT log-lib) 335*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Could NOT find log library, retry after installing \ 336*89a0ef05SAndroid Build Coastguard Worker log library at sysroot or try 'cmake -DUHDR_ENABLE_LOGS=0'") 337*89a0ef05SAndroid Build Coastguard Worker else() 338*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Found log-lib: ${log-lib}") 339*89a0ef05SAndroid Build Coastguard Worker endif() 340*89a0ef05SAndroid Build Coastguard Worker endif() 341*89a0ef05SAndroid Build Coastguard Workerendif() 342*89a0ef05SAndroid Build Coastguard Worker 343*89a0ef05SAndroid Build Coastguard Worker# Threads 344*89a0ef05SAndroid Build Coastguard Workerset(CMAKE_THREAD_PREFER_PTHREAD ON) 345*89a0ef05SAndroid Build Coastguard Workerset(THREADS_PREFER_PTHREAD_FLAG ON) 346*89a0ef05SAndroid Build Coastguard Workerfind_package(Threads REQUIRED) 347*89a0ef05SAndroid Build Coastguard Worker 348*89a0ef05SAndroid Build Coastguard Workerinclude(ExternalProject) 349*89a0ef05SAndroid Build Coastguard Worker 350*89a0ef05SAndroid Build Coastguard Workerget_directory_property(UHDR_COMPILE_FLAGS COMPILE_OPTIONS) 351*89a0ef05SAndroid Build Coastguard Workerstring (REPLACE ";" " " UHDR_COMPILE_FLAGS_STR "${UHDR_COMPILE_FLAGS}") 352*89a0ef05SAndroid Build Coastguard Workerset(UHDR_CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${UHDR_COMPILE_FLAGS_STR}") 353*89a0ef05SAndroid Build Coastguard Workerset(UHDR_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${UHDR_COMPILE_FLAGS_STR}") 354*89a0ef05SAndroid Build Coastguard Workerset(UHDR_CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}) 355*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) 356*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_C_FLAGS=${UHDR_CMAKE_C_FLAGS}) 357*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}) 358*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}) 359*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}) 360*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}) 361*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) 362*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_CXX_FLAGS=${UHDR_CMAKE_CXX_FLAGS}) 363*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}) 364*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}) 365*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_CXX_FLAGS_MINSIZEREL=${CMAKE_CXX_FLAGS_MINSIZEREL}) 366*89a0ef05SAndroid Build Coastguard Workerlist(APPEND UHDR_CMAKE_ARGS -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) 367*89a0ef05SAndroid Build Coastguard Workerif(BUILD_SHARED_LIBS) 368*89a0ef05SAndroid Build Coastguard Worker list(APPEND UHDR_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON) 369*89a0ef05SAndroid Build Coastguard Workerendif() 370*89a0ef05SAndroid Build Coastguard Workerif(MSVC AND UHDR_BUILD_TESTS) 371*89a0ef05SAndroid Build Coastguard Worker list(APPEND UHDR_CMAKE_ARGS "-Dgtest_force_shared_crt=ON") 372*89a0ef05SAndroid Build Coastguard Workerendif() 373*89a0ef05SAndroid Build Coastguard Workerif(DEFINED CMAKE_TOOLCHAIN_FILE) 374*89a0ef05SAndroid Build Coastguard Worker list(APPEND UHDR_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}) 375*89a0ef05SAndroid Build Coastguard Workerendif() 376*89a0ef05SAndroid Build Coastguard Workerif(DEFINED ANDROID_PLATFORM) 377*89a0ef05SAndroid Build Coastguard Worker list(APPEND UHDR_CMAKE_ARGS -DANDROID_PLATFORM=${ANDROID_PLATFORM}) 378*89a0ef05SAndroid Build Coastguard Workerendif() 379*89a0ef05SAndroid Build Coastguard Workerif(DEFINED ANDROID_ABI) 380*89a0ef05SAndroid Build Coastguard Worker list(APPEND UHDR_CMAKE_ARGS -DANDROID_ABI=${ANDROID_ABI}) 381*89a0ef05SAndroid Build Coastguard Workerendif() 382*89a0ef05SAndroid Build Coastguard Workerif(DEFINED UHDR_ANDROID_NDK_PATH) 383*89a0ef05SAndroid Build Coastguard Worker list(APPEND UHDR_CMAKE_ARGS -DUHDR_ANDROID_NDK_PATH=${UHDR_ANDROID_NDK_PATH}) 384*89a0ef05SAndroid Build Coastguard Workerendif() 385*89a0ef05SAndroid Build Coastguard Worker 386*89a0ef05SAndroid Build Coastguard Worker# opengl es libraries 387*89a0ef05SAndroid Build Coastguard Workerif(UHDR_ENABLE_GLES) 388*89a0ef05SAndroid Build Coastguard Worker find_package(EGL QUIET) 389*89a0ef05SAndroid Build Coastguard Worker if(EGL_FOUND) 390*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Found EGL: ${EGL_LIBRARIES}") 391*89a0ef05SAndroid Build Coastguard Worker find_package(OpenGLES3 QUIET) 392*89a0ef05SAndroid Build Coastguard Worker if(OpenGLES3_FOUND) 393*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Found GLESv3: ${OPENGLES3_LIBRARIES} (API version \"${OpenGLES3_API_VERSION}\")") 394*89a0ef05SAndroid Build Coastguard Worker else() 395*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Could NOT find GLESv3") 396*89a0ef05SAndroid Build Coastguard Worker endif() 397*89a0ef05SAndroid Build Coastguard Worker else() 398*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Could NOT find EGL") 399*89a0ef05SAndroid Build Coastguard Worker endif() 400*89a0ef05SAndroid Build Coastguard Worker if(EGL_FOUND AND OpenGLES3_FOUND) 401*89a0ef05SAndroid Build Coastguard Worker add_compile_options(-DUHDR_ENABLE_GLES) 402*89a0ef05SAndroid Build Coastguard Worker string(FIND "${OPENGLES3_LIBRARIES}" "GLESv3" result) 403*89a0ef05SAndroid Build Coastguard Worker if(result GREATER -1) 404*89a0ef05SAndroid Build Coastguard Worker set(UHDR_GL_DEPS "-lEGL -lGLESv3") 405*89a0ef05SAndroid Build Coastguard Worker else() 406*89a0ef05SAndroid Build Coastguard Worker set(UHDR_GL_DEPS "-lEGL -lGLESv2") 407*89a0ef05SAndroid Build Coastguard Worker endif() 408*89a0ef05SAndroid Build Coastguard Worker else() 409*89a0ef05SAndroid Build Coastguard Worker set(UHDR_ENABLE_GLES FALSE) 410*89a0ef05SAndroid Build Coastguard Worker endif() 411*89a0ef05SAndroid Build Coastguard Workerendif() 412*89a0ef05SAndroid Build Coastguard Worker 413*89a0ef05SAndroid Build Coastguard Worker# libjpeg-turbo 414*89a0ef05SAndroid Build Coastguard Workerif(NOT UHDR_BUILD_DEPS) 415*89a0ef05SAndroid Build Coastguard Worker find_package(JPEG QUIET) 416*89a0ef05SAndroid Build Coastguard Worker if(NOT JPEG_FOUND) 417*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Could NOT find JPEG (missing: JPEG_LIBRARIES JPEG_INCLUDE_DIRS),\ 418*89a0ef05SAndroid Build Coastguard Worker retry after installing JPEG library at sysroot or try 'cmake -DUHDR_BUILD_DEPS=1'") 419*89a0ef05SAndroid Build Coastguard Worker else() 420*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Found JPEG: ${JPEG_LIBRARIES} (found version \"${JPEG_VERSION}\")") 421*89a0ef05SAndroid Build Coastguard Worker endif() 422*89a0ef05SAndroid Build Coastguard Workerendif() 423*89a0ef05SAndroid Build Coastguard Worker 424*89a0ef05SAndroid Build Coastguard Workerif(NOT JPEG_FOUND) 425*89a0ef05SAndroid Build Coastguard Worker set(JPEGTURBO_TARGET_NAME turbojpeg) 426*89a0ef05SAndroid Build Coastguard Worker set(JPEGTURBO_PREFIX_DIR ${CMAKE_CURRENT_BINARY_DIR}/${JPEGTURBO_TARGET_NAME}) 427*89a0ef05SAndroid Build Coastguard Worker set(JPEGTURBO_SOURCE_DIR ${THIRD_PARTY_DIR}/${JPEGTURBO_TARGET_NAME}) 428*89a0ef05SAndroid Build Coastguard Worker set(JPEGTURBO_BINARY_DIR ${JPEGTURBO_PREFIX_DIR}/src/${JPEGTURBO_TARGET_NAME}-build) 429*89a0ef05SAndroid Build Coastguard Worker set(JPEG_INCLUDE_DIRS ${JPEGTURBO_SOURCE_DIR} ${JPEGTURBO_BINARY_DIR}) 430*89a0ef05SAndroid Build Coastguard Worker if(MSVC) 431*89a0ef05SAndroid Build Coastguard Worker set(JPEG_LIB ${CMAKE_STATIC_LIBRARY_PREFIX}jpeg-static${CMAKE_STATIC_LIBRARY_SUFFIX}) 432*89a0ef05SAndroid Build Coastguard Worker else() 433*89a0ef05SAndroid Build Coastguard Worker set(JPEG_LIB ${CMAKE_STATIC_LIBRARY_PREFIX}jpeg${CMAKE_STATIC_LIBRARY_SUFFIX}) 434*89a0ef05SAndroid Build Coastguard Worker endif() 435*89a0ef05SAndroid Build Coastguard Worker if(IS_MULTI) 436*89a0ef05SAndroid Build Coastguard Worker set(JPEG_LIB_PREFIX ${JPEGTURBO_BINARY_DIR}/$<CONFIG>/) 437*89a0ef05SAndroid Build Coastguard Worker else() 438*89a0ef05SAndroid Build Coastguard Worker set(JPEG_LIB_PREFIX ${JPEGTURBO_BINARY_DIR}/) 439*89a0ef05SAndroid Build Coastguard Worker endif() 440*89a0ef05SAndroid Build Coastguard Worker set(JPEG_LIBRARIES ${JPEG_LIB_PREFIX}${JPEG_LIB}) 441*89a0ef05SAndroid Build Coastguard Worker if(EMSCRIPTEN) 442*89a0ef05SAndroid Build Coastguard Worker ExternalProject_Add(${JPEGTURBO_TARGET_NAME} 443*89a0ef05SAndroid Build Coastguard Worker GIT_REPOSITORY https://github.com/libjpeg-turbo/libjpeg-turbo.git 444*89a0ef05SAndroid Build Coastguard Worker GIT_TAG 3.0.1 445*89a0ef05SAndroid Build Coastguard Worker PREFIX ${JPEGTURBO_PREFIX_DIR} 446*89a0ef05SAndroid Build Coastguard Worker SOURCE_DIR ${JPEGTURBO_SOURCE_DIR} 447*89a0ef05SAndroid Build Coastguard Worker BINARY_DIR ${JPEGTURBO_BINARY_DIR} 448*89a0ef05SAndroid Build Coastguard Worker CONFIGURE_COMMAND emcmake cmake ${JPEGTURBO_SOURCE_DIR} 449*89a0ef05SAndroid Build Coastguard Worker -DENABLE_SHARED=0 -DWITH_SIMD=0 450*89a0ef05SAndroid Build Coastguard Worker BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> --target jpeg-static 451*89a0ef05SAndroid Build Coastguard Worker BUILD_BYPRODUCTS ${JPEG_LIBRARIES} 452*89a0ef05SAndroid Build Coastguard Worker INSTALL_COMMAND "" 453*89a0ef05SAndroid Build Coastguard Worker ) 454*89a0ef05SAndroid Build Coastguard Worker else() 455*89a0ef05SAndroid Build Coastguard Worker ExternalProject_Add(${JPEGTURBO_TARGET_NAME} 456*89a0ef05SAndroid Build Coastguard Worker GIT_REPOSITORY https://github.com/libjpeg-turbo/libjpeg-turbo.git 457*89a0ef05SAndroid Build Coastguard Worker GIT_TAG 3.0.1 458*89a0ef05SAndroid Build Coastguard Worker PREFIX ${JPEGTURBO_PREFIX_DIR} 459*89a0ef05SAndroid Build Coastguard Worker SOURCE_DIR ${JPEGTURBO_SOURCE_DIR} 460*89a0ef05SAndroid Build Coastguard Worker BINARY_DIR ${JPEGTURBO_BINARY_DIR} 461*89a0ef05SAndroid Build Coastguard Worker BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> --target jpeg-static 462*89a0ef05SAndroid Build Coastguard Worker CMAKE_ARGS ${UHDR_CMAKE_ARGS} -DENABLE_SHARED=0 463*89a0ef05SAndroid Build Coastguard Worker BUILD_BYPRODUCTS ${JPEG_LIBRARIES} 464*89a0ef05SAndroid Build Coastguard Worker INSTALL_COMMAND "" 465*89a0ef05SAndroid Build Coastguard Worker ) 466*89a0ef05SAndroid Build Coastguard Worker endif() 467*89a0ef05SAndroid Build Coastguard Workerendif() 468*89a0ef05SAndroid Build Coastguard Worker 469*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_JAVA) 470*89a0ef05SAndroid Build Coastguard Worker # build jni and java util classes 471*89a0ef05SAndroid Build Coastguard Worker find_package(Java REQUIRED) 472*89a0ef05SAndroid Build Coastguard Worker if(${CMAKE_SYSTEM_NAME} MATCHES "Android") 473*89a0ef05SAndroid Build Coastguard Worker find_package(JNI QUIET) 474*89a0ef05SAndroid Build Coastguard Worker if(NOT JAVA_INCLUDE_PATH) 475*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Could NOT find JNI Component") 476*89a0ef05SAndroid Build Coastguard Worker else() 477*89a0ef05SAndroid Build Coastguard Worker message(STATUS "Found JNI Component") 478*89a0ef05SAndroid Build Coastguard Worker endif() 479*89a0ef05SAndroid Build Coastguard Worker set(UHDR_JNI_INCLUDE_PATH ${JAVA_INCLUDE_PATH}) 480*89a0ef05SAndroid Build Coastguard Worker else() 481*89a0ef05SAndroid Build Coastguard Worker find_package(JNI REQUIRED) 482*89a0ef05SAndroid Build Coastguard Worker set(UHDR_JNI_INCLUDE_PATH ${JNI_INCLUDE_DIRS}) 483*89a0ef05SAndroid Build Coastguard Worker endif() 484*89a0ef05SAndroid Build Coastguard Workerendif() 485*89a0ef05SAndroid Build Coastguard Worker 486*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_TESTS) 487*89a0ef05SAndroid Build Coastguard Worker # gtest and gmock 488*89a0ef05SAndroid Build Coastguard Worker set(GTEST_TARGET_NAME googletest) 489*89a0ef05SAndroid Build Coastguard Worker set(GTEST_PREFIX_DIR ${CMAKE_CURRENT_BINARY_DIR}/${GTEST_TARGET_NAME}) 490*89a0ef05SAndroid Build Coastguard Worker set(GTEST_SOURCE_DIR ${THIRD_PARTY_DIR}/${GTEST_TARGET_NAME}) 491*89a0ef05SAndroid Build Coastguard Worker set(GTEST_BINARY_DIR ${GTEST_PREFIX_DIR}/src/${GTEST_TARGET_NAME}-build) 492*89a0ef05SAndroid Build Coastguard Worker set(GTEST_INCLUDE_DIRS 493*89a0ef05SAndroid Build Coastguard Worker ${GTEST_SOURCE_DIR}/googletest/include 494*89a0ef05SAndroid Build Coastguard Worker ${GTEST_SOURCE_DIR}/googlemock/include) 495*89a0ef05SAndroid Build Coastguard Worker set(GTEST_LIB ${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}) 496*89a0ef05SAndroid Build Coastguard Worker set(GTEST_LIB_MAIN ${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}) 497*89a0ef05SAndroid Build Coastguard Worker if(IS_MULTI) 498*89a0ef05SAndroid Build Coastguard Worker set(GTEST_LIB_PREFIX ${GTEST_BINARY_DIR}/lib/$<CONFIG>/) 499*89a0ef05SAndroid Build Coastguard Worker else() 500*89a0ef05SAndroid Build Coastguard Worker set(GTEST_LIB_PREFIX ${GTEST_BINARY_DIR}/lib/) 501*89a0ef05SAndroid Build Coastguard Worker endif() 502*89a0ef05SAndroid Build Coastguard Worker set(GTEST_BOTH_LIBRARIES ${GTEST_LIB_PREFIX}${GTEST_LIB} ${GTEST_LIB_PREFIX}${GTEST_LIB_MAIN}) 503*89a0ef05SAndroid Build Coastguard Worker ExternalProject_Add(${GTEST_TARGET_NAME} 504*89a0ef05SAndroid Build Coastguard Worker GIT_REPOSITORY https://github.com/google/googletest 505*89a0ef05SAndroid Build Coastguard Worker GIT_TAG v1.14.0 506*89a0ef05SAndroid Build Coastguard Worker PREFIX ${GTEST_PREFIX_DIR} 507*89a0ef05SAndroid Build Coastguard Worker SOURCE_DIR ${GTEST_SOURCE_DIR} 508*89a0ef05SAndroid Build Coastguard Worker BINARY_DIR ${GTEST_BINARY_DIR} 509*89a0ef05SAndroid Build Coastguard Worker CMAKE_ARGS ${UHDR_CMAKE_ARGS} 510*89a0ef05SAndroid Build Coastguard Worker BUILD_BYPRODUCTS ${GTEST_BOTH_LIBRARIES} 511*89a0ef05SAndroid Build Coastguard Worker INSTALL_COMMAND "" 512*89a0ef05SAndroid Build Coastguard Worker ) 513*89a0ef05SAndroid Build Coastguard Workerendif() 514*89a0ef05SAndroid Build Coastguard Worker 515*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_BENCHMARK) 516*89a0ef05SAndroid Build Coastguard Worker # benchmark 517*89a0ef05SAndroid Build Coastguard Worker set(BM_TARGET_NAME benchmark) 518*89a0ef05SAndroid Build Coastguard Worker set(BM_PREFIX_DIR ${CMAKE_CURRENT_BINARY_DIR}/${BM_TARGET_NAME}) 519*89a0ef05SAndroid Build Coastguard Worker set(BM_SOURCE_DIR ${THIRD_PARTY_DIR}/${BM_TARGET_NAME}) 520*89a0ef05SAndroid Build Coastguard Worker set(BM_BINARY_DIR ${BM_PREFIX_DIR}/src/${BM_TARGET_NAME}-build) 521*89a0ef05SAndroid Build Coastguard Worker set(BENCHMARK_INCLUDE_DIR ${BM_SOURCE_DIR}/include) 522*89a0ef05SAndroid Build Coastguard Worker set(BM_LIB ${CMAKE_STATIC_LIBRARY_PREFIX}benchmark${CMAKE_STATIC_LIBRARY_SUFFIX}) 523*89a0ef05SAndroid Build Coastguard Worker set(BM_LIB_MAIN ${CMAKE_STATIC_LIBRARY_PREFIX}benchmark_main${CMAKE_STATIC_LIBRARY_SUFFIX}) 524*89a0ef05SAndroid Build Coastguard Worker if(IS_MULTI) 525*89a0ef05SAndroid Build Coastguard Worker set(BM_LIB_PREFIX ${BM_BINARY_DIR}/src/$<CONFIG>/) 526*89a0ef05SAndroid Build Coastguard Worker else() 527*89a0ef05SAndroid Build Coastguard Worker set(BM_LIB_PREFIX ${BM_BINARY_DIR}/src/) 528*89a0ef05SAndroid Build Coastguard Worker endif() 529*89a0ef05SAndroid Build Coastguard Worker set(BENCHMARK_LIBRARIES ${BM_LIB_PREFIX}${BM_LIB} ${BM_LIB_PREFIX}${BM_LIB_MAIN}) 530*89a0ef05SAndroid Build Coastguard Worker ExternalProject_Add(${BM_TARGET_NAME} 531*89a0ef05SAndroid Build Coastguard Worker GIT_REPOSITORY https://github.com/google/benchmark.git 532*89a0ef05SAndroid Build Coastguard Worker GIT_TAG v1.8.3 533*89a0ef05SAndroid Build Coastguard Worker PREFIX ${BM_PREFIX_DIR} 534*89a0ef05SAndroid Build Coastguard Worker SOURCE_DIR ${BM_SOURCE_DIR} 535*89a0ef05SAndroid Build Coastguard Worker BINARY_DIR ${BM_BINARY_DIR} 536*89a0ef05SAndroid Build Coastguard Worker CMAKE_ARGS ${UHDR_CMAKE_ARGS} 537*89a0ef05SAndroid Build Coastguard Worker -DBENCHMARK_ENABLE_TESTING=OFF 538*89a0ef05SAndroid Build Coastguard Worker -DBENCHMARK_DOWNLOAD_DEPENDENCIES=OFF 539*89a0ef05SAndroid Build Coastguard Worker BUILD_BYPRODUCTS ${BENCHMARK_LIBRARIES} 540*89a0ef05SAndroid Build Coastguard Worker INSTALL_COMMAND "" 541*89a0ef05SAndroid Build Coastguard Worker ) 542*89a0ef05SAndroid Build Coastguard Workerendif() 543*89a0ef05SAndroid Build Coastguard Worker 544*89a0ef05SAndroid Build Coastguard Workerset_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES 545*89a0ef05SAndroid Build Coastguard Worker ${JPEGTURBO_BINARY_DIR} ${GTEST_BINARY_DIR} ${BM_BINARY_DIR}) 546*89a0ef05SAndroid Build Coastguard Worker 547*89a0ef05SAndroid Build Coastguard Worker########################################################### 548*89a0ef05SAndroid Build Coastguard Worker# File Lists 549*89a0ef05SAndroid Build Coastguard Worker########################################################### 550*89a0ef05SAndroid Build Coastguard Workerfile(GLOB UHDR_CORE_SRCS_LIST "${SOURCE_DIR}/src/*.cpp") 551*89a0ef05SAndroid Build Coastguard Workerif(UHDR_ENABLE_INTRINSICS) 552*89a0ef05SAndroid Build Coastguard Worker if(ARCH STREQUAL "arm" OR ARCH STREQUAL "aarch64") 553*89a0ef05SAndroid Build Coastguard Worker file(GLOB UHDR_CORE_NEON_SRCS_LIST "${SOURCE_DIR}/src/dsp/arm/*.cpp") 554*89a0ef05SAndroid Build Coastguard Worker list(APPEND UHDR_CORE_SRCS_LIST ${UHDR_CORE_NEON_SRCS_LIST}) 555*89a0ef05SAndroid Build Coastguard Worker endif() 556*89a0ef05SAndroid Build Coastguard Workerendif() 557*89a0ef05SAndroid Build Coastguard Workerif(UHDR_ENABLE_GLES) 558*89a0ef05SAndroid Build Coastguard Worker file(GLOB UHDR_CORE_GLES_SRCS_LIST "${SOURCE_DIR}/src/gpu/*.cpp") 559*89a0ef05SAndroid Build Coastguard Worker list(APPEND UHDR_CORE_SRCS_LIST ${UHDR_CORE_GLES_SRCS_LIST}) 560*89a0ef05SAndroid Build Coastguard Workerendif() 561*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_JAVA) 562*89a0ef05SAndroid Build Coastguard Worker file(GLOB UHDR_JNI_SRCS_LIST "${JAVA_DIR}/jni/*.cpp") 563*89a0ef05SAndroid Build Coastguard Worker file(GLOB UHDR_JAVA_SRCS_LIST "${JAVA_DIR}/com/google/media/codecs/ultrahdr/*.java") 564*89a0ef05SAndroid Build Coastguard Worker file(GLOB UHDR_APP_SRC "${JAVA_DIR}/UltraHdrApp.java") 565*89a0ef05SAndroid Build Coastguard Workerendif() 566*89a0ef05SAndroid Build Coastguard Workerfile(GLOB UHDR_TEST_SRCS_LIST "${TESTS_DIR}/*.cpp") 567*89a0ef05SAndroid Build Coastguard Workerfile(GLOB UHDR_BM_SRCS_LIST "${BENCHMARK_DIR}/*.cpp") 568*89a0ef05SAndroid Build Coastguard Workerfile(GLOB IMAGE_IO_SRCS_LIST "${THIRD_PARTY_DIR}/image_io/src/**/*.cc") 569*89a0ef05SAndroid Build Coastguard Worker 570*89a0ef05SAndroid Build Coastguard Workerset(PRIVATE_INCLUDE_DIR ${SOURCE_DIR}/include/ ${JPEG_INCLUDE_DIRS}) 571*89a0ef05SAndroid Build Coastguard Workerset(COMMON_LIBS_LIST ${JPEG_LIBRARIES} Threads::Threads) 572*89a0ef05SAndroid Build Coastguard Worker 573*89a0ef05SAndroid Build Coastguard Worker########################################################### 574*89a0ef05SAndroid Build Coastguard Worker# Targets 575*89a0ef05SAndroid Build Coastguard Worker########################################################### 576*89a0ef05SAndroid Build Coastguard Workerset(IMAGEIO_TARGET_NAME image_io) 577*89a0ef05SAndroid Build Coastguard Workeradd_library(${IMAGEIO_TARGET_NAME} STATIC ${IMAGE_IO_SRCS_LIST}) 578*89a0ef05SAndroid Build Coastguard Workertarget_include_directories(${IMAGEIO_TARGET_NAME} PRIVATE 579*89a0ef05SAndroid Build Coastguard Worker "${THIRD_PARTY_DIR}/image_io/includes" 580*89a0ef05SAndroid Build Coastguard Worker "${THIRD_PARTY_DIR}/image_io/src/modp_b64" 581*89a0ef05SAndroid Build Coastguard Worker "${THIRD_PARTY_DIR}/image_io/src/modp_b64/modp_b64") 582*89a0ef05SAndroid Build Coastguard Worker 583*89a0ef05SAndroid Build Coastguard Workerset(UHDR_CORE_LIB_NAME core) 584*89a0ef05SAndroid Build Coastguard Workeradd_library(${UHDR_CORE_LIB_NAME} STATIC ${UHDR_CORE_SRCS_LIST}) 585*89a0ef05SAndroid Build Coastguard Workertarget_compile_options(${UHDR_CORE_LIB_NAME} PRIVATE ${UHDR_WERROR_FLAGS}) 586*89a0ef05SAndroid Build Coastguard Workerif(NOT JPEG_FOUND) 587*89a0ef05SAndroid Build Coastguard Worker add_dependencies(${UHDR_CORE_LIB_NAME} ${JPEGTURBO_TARGET_NAME}) 588*89a0ef05SAndroid Build Coastguard Workerendif() 589*89a0ef05SAndroid Build Coastguard Workerif(NOT MSVC) 590*89a0ef05SAndroid Build Coastguard Worker target_compile_options(${UHDR_CORE_LIB_NAME} PRIVATE -Wall -Wextra -Wshadow) 591*89a0ef05SAndroid Build Coastguard Workerendif() 592*89a0ef05SAndroid Build Coastguard Workerif(DEFINED UHDR_MAX_DIMENSION) 593*89a0ef05SAndroid Build Coastguard Worker target_compile_options(${UHDR_CORE_LIB_NAME} PRIVATE -DUHDR_MAX_DIMENSION=${UHDR_MAX_DIMENSION}) 594*89a0ef05SAndroid Build Coastguard Workerendif() 595*89a0ef05SAndroid Build Coastguard Workertarget_include_directories(${UHDR_CORE_LIB_NAME} PRIVATE 596*89a0ef05SAndroid Build Coastguard Worker ${PRIVATE_INCLUDE_DIR} 597*89a0ef05SAndroid Build Coastguard Worker "${THIRD_PARTY_DIR}/image_io/includes/" 598*89a0ef05SAndroid Build Coastguard Worker) 599*89a0ef05SAndroid Build Coastguard Workertarget_include_directories(${UHDR_CORE_LIB_NAME} PUBLIC ${EXPORT_INCLUDE_DIR}) 600*89a0ef05SAndroid Build Coastguard Workerif(${CMAKE_SYSTEM_NAME} MATCHES "Android") 601*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_CORE_LIB_NAME} PUBLIC ${log-lib}) 602*89a0ef05SAndroid Build Coastguard Workerendif() 603*89a0ef05SAndroid Build Coastguard Workerif(UHDR_ENABLE_GLES) 604*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_CORE_LIB_NAME} PRIVATE ${EGL_LIBRARIES} ${OPENGLES3_LIBRARIES}) 605*89a0ef05SAndroid Build Coastguard Workerendif() 606*89a0ef05SAndroid Build Coastguard Workertarget_link_libraries(${UHDR_CORE_LIB_NAME} PRIVATE ${COMMON_LIBS_LIST} ${IMAGEIO_TARGET_NAME}) 607*89a0ef05SAndroid Build Coastguard Worker 608*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_EXAMPLES) 609*89a0ef05SAndroid Build Coastguard Worker set(UHDR_SAMPLE_APP ultrahdr_app) 610*89a0ef05SAndroid Build Coastguard Worker add_executable(${UHDR_SAMPLE_APP} "${EXAMPLES_DIR}/ultrahdr_app.cpp") 611*89a0ef05SAndroid Build Coastguard Worker add_dependencies(${UHDR_SAMPLE_APP} ${UHDR_CORE_LIB_NAME}) 612*89a0ef05SAndroid Build Coastguard Worker target_compile_options(${UHDR_SAMPLE_APP} PRIVATE ${UHDR_WERROR_FLAGS}) 613*89a0ef05SAndroid Build Coastguard Worker if(UHDR_BUILD_FUZZERS) 614*89a0ef05SAndroid Build Coastguard Worker target_link_options(${UHDR_SAMPLE_APP} PRIVATE -fsanitize=fuzzer-no-link) 615*89a0ef05SAndroid Build Coastguard Worker endif() 616*89a0ef05SAndroid Build Coastguard Worker if(UHDR_ENABLE_STATIC_LINKING) 617*89a0ef05SAndroid Build Coastguard Worker target_link_options(${UHDR_SAMPLE_APP} PRIVATE -static) 618*89a0ef05SAndroid Build Coastguard Worker endif() 619*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_SAMPLE_APP} PRIVATE ${UHDR_CORE_LIB_NAME}) 620*89a0ef05SAndroid Build Coastguard Workerendif() 621*89a0ef05SAndroid Build Coastguard Worker 622*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_TESTS OR UHDR_BUILD_BENCHMARK) 623*89a0ef05SAndroid Build Coastguard Worker include(CTest) 624*89a0ef05SAndroid Build Coastguard Worker if(WIN32) 625*89a0ef05SAndroid Build Coastguard Worker file(COPY "${TESTS_DIR}/data/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/data") 626*89a0ef05SAndroid Build Coastguard Worker else() 627*89a0ef05SAndroid Build Coastguard Worker execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink 628*89a0ef05SAndroid Build Coastguard Worker "${TESTS_DIR}/data/" "${CMAKE_CURRENT_BINARY_DIR}/data" 629*89a0ef05SAndroid Build Coastguard Worker RESULT_VARIABLE result 630*89a0ef05SAndroid Build Coastguard Worker ERROR_VARIABLE errorinfo) 631*89a0ef05SAndroid Build Coastguard Worker string(FIND "${errorinfo}" "error" errorstatus) 632*89a0ef05SAndroid Build Coastguard Worker if(result GREATER 0 OR errorstatus GREATER -1) 633*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Creating sym link failed with info ${errorinfo}") 634*89a0ef05SAndroid Build Coastguard Worker endif() 635*89a0ef05SAndroid Build Coastguard Worker endif() 636*89a0ef05SAndroid Build Coastguard Workerendif() 637*89a0ef05SAndroid Build Coastguard Worker 638*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_TESTS) 639*89a0ef05SAndroid Build Coastguard Worker add_executable(ultrahdr_unit_test ${UHDR_TEST_SRCS_LIST}) 640*89a0ef05SAndroid Build Coastguard Worker add_dependencies(ultrahdr_unit_test ${GTEST_TARGET_NAME} ${UHDR_CORE_LIB_NAME}) 641*89a0ef05SAndroid Build Coastguard Worker target_compile_options(ultrahdr_unit_test PRIVATE ${UHDR_WERROR_FLAGS}) 642*89a0ef05SAndroid Build Coastguard Worker target_include_directories(ultrahdr_unit_test PRIVATE 643*89a0ef05SAndroid Build Coastguard Worker ${PRIVATE_INCLUDE_DIR} 644*89a0ef05SAndroid Build Coastguard Worker ${GTEST_INCLUDE_DIRS} 645*89a0ef05SAndroid Build Coastguard Worker ) 646*89a0ef05SAndroid Build Coastguard Worker if(UHDR_BUILD_FUZZERS) 647*89a0ef05SAndroid Build Coastguard Worker target_link_options(ultrahdr_unit_test PRIVATE -fsanitize=fuzzer-no-link) 648*89a0ef05SAndroid Build Coastguard Worker endif() 649*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(ultrahdr_unit_test ${UHDR_CORE_LIB_NAME} ${GTEST_BOTH_LIBRARIES}) 650*89a0ef05SAndroid Build Coastguard Worker add_test(NAME UHDRUnitTests, COMMAND ultrahdr_unit_test) 651*89a0ef05SAndroid Build Coastguard Workerendif() 652*89a0ef05SAndroid Build Coastguard Worker 653*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_BENCHMARK) 654*89a0ef05SAndroid Build Coastguard Worker add_executable(ultrahdr_bm ${UHDR_BM_SRCS_LIST}) 655*89a0ef05SAndroid Build Coastguard Worker add_dependencies(ultrahdr_bm ${BM_TARGET_NAME} ${UHDR_CORE_LIB_NAME}) 656*89a0ef05SAndroid Build Coastguard Worker target_compile_options(ultrahdr_bm PRIVATE ${UHDR_WERROR_FLAGS}) 657*89a0ef05SAndroid Build Coastguard Worker target_include_directories(ultrahdr_bm PRIVATE 658*89a0ef05SAndroid Build Coastguard Worker ${PRIVATE_INCLUDE_DIR} 659*89a0ef05SAndroid Build Coastguard Worker ${BENCHMARK_INCLUDE_DIR} 660*89a0ef05SAndroid Build Coastguard Worker ) 661*89a0ef05SAndroid Build Coastguard Worker if(UHDR_BUILD_FUZZERS) 662*89a0ef05SAndroid Build Coastguard Worker target_link_options(ultrahdr_bm PRIVATE -fsanitize=fuzzer-no-link) 663*89a0ef05SAndroid Build Coastguard Worker endif() 664*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(ultrahdr_bm ${UHDR_CORE_LIB_NAME} ${BENCHMARK_LIBRARIES}) 665*89a0ef05SAndroid Build Coastguard Worker 666*89a0ef05SAndroid Build Coastguard Worker set(RES_FILE "${TESTS_DIR}/data/UltrahdrBenchmarkTestRes-1.2.zip") 667*89a0ef05SAndroid Build Coastguard Worker set(RES_FILE_MD5SUM "31fc352444f95bc1ab4b9d6e397de6c1") 668*89a0ef05SAndroid Build Coastguard Worker set(GET_RES_FILE TRUE) 669*89a0ef05SAndroid Build Coastguard Worker if(EXISTS ${RES_FILE}) 670*89a0ef05SAndroid Build Coastguard Worker file(MD5 ${RES_FILE} CURR_MD5_SUM) 671*89a0ef05SAndroid Build Coastguard Worker if(CURR_MD5_SUM STREQUAL RES_FILE_MD5SUM) 672*89a0ef05SAndroid Build Coastguard Worker message("Zip File already exists: " ${RES_FILE}) 673*89a0ef05SAndroid Build Coastguard Worker set(GET_RES_FILE FALSE) 674*89a0ef05SAndroid Build Coastguard Worker else() 675*89a0ef05SAndroid Build Coastguard Worker file(REMOVE "${RES_FILE}") 676*89a0ef05SAndroid Build Coastguard Worker endif() 677*89a0ef05SAndroid Build Coastguard Worker endif() 678*89a0ef05SAndroid Build Coastguard Worker 679*89a0ef05SAndroid Build Coastguard Worker if(GET_RES_FILE) 680*89a0ef05SAndroid Build Coastguard Worker message("-- Downloading benchmark test resources") 681*89a0ef05SAndroid Build Coastguard Worker set(RES_URL "https://storage.googleapis.com/android_media/external/libultrahdr/benchmark/UltrahdrBenchmarkTestRes-1.2.zip") 682*89a0ef05SAndroid Build Coastguard Worker file(DOWNLOAD ${RES_URL} ${RES_FILE} STATUS result EXPECTED_MD5 ${RES_FILE_MD5SUM}) 683*89a0ef05SAndroid Build Coastguard Worker list(GET result 0 retval) 684*89a0ef05SAndroid Build Coastguard Worker if(retval) 685*89a0ef05SAndroid Build Coastguard Worker file(REMOVE "${RES_FILE}") 686*89a0ef05SAndroid Build Coastguard Worker list(GET result 0 errcode) 687*89a0ef05SAndroid Build Coastguard Worker list(GET result 1 info) 688*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Error downloading ${RES_URL}: ${info} (${errcode})") 689*89a0ef05SAndroid Build Coastguard Worker endif() 690*89a0ef05SAndroid Build Coastguard Worker endif() 691*89a0ef05SAndroid Build Coastguard Worker message("-- Extracting benchmark test resources") 692*89a0ef05SAndroid Build Coastguard Worker execute_process(COMMAND "${CMAKE_COMMAND}" -E tar xf "${RES_FILE}" 693*89a0ef05SAndroid Build Coastguard Worker WORKING_DIRECTORY "${TESTS_DIR}/data/" 694*89a0ef05SAndroid Build Coastguard Worker RESULT_VARIABLE result 695*89a0ef05SAndroid Build Coastguard Worker ERROR_VARIABLE errorinfo) 696*89a0ef05SAndroid Build Coastguard Worker string(FIND "${errorinfo}" "error" errorstatus) 697*89a0ef05SAndroid Build Coastguard Worker if(result GREATER 0 OR errorstatus GREATER -1) 698*89a0ef05SAndroid Build Coastguard Worker message(FATAL_ERROR "Extracting benchmark test resources failed with info ${errorinfo}") 699*89a0ef05SAndroid Build Coastguard Worker endif() 700*89a0ef05SAndroid Build Coastguard Workerendif() 701*89a0ef05SAndroid Build Coastguard Worker 702*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_FUZZERS) 703*89a0ef05SAndroid Build Coastguard Worker add_executable(ultrahdr_enc_fuzzer ${FUZZERS_DIR}/ultrahdr_enc_fuzzer.cpp) 704*89a0ef05SAndroid Build Coastguard Worker add_dependencies(ultrahdr_enc_fuzzer ${UHDR_CORE_LIB_NAME}) 705*89a0ef05SAndroid Build Coastguard Worker target_compile_options(ultrahdr_enc_fuzzer PRIVATE ${UHDR_WERROR_FLAGS}) 706*89a0ef05SAndroid Build Coastguard Worker target_include_directories(ultrahdr_enc_fuzzer PRIVATE ${PRIVATE_INCLUDE_DIR}) 707*89a0ef05SAndroid Build Coastguard Worker if(DEFINED ENV{LIB_FUZZING_ENGINE}) 708*89a0ef05SAndroid Build Coastguard Worker target_link_options(ultrahdr_enc_fuzzer PRIVATE $ENV{LIB_FUZZING_ENGINE}) 709*89a0ef05SAndroid Build Coastguard Worker else() 710*89a0ef05SAndroid Build Coastguard Worker target_link_options(ultrahdr_enc_fuzzer PRIVATE -fsanitize=fuzzer) 711*89a0ef05SAndroid Build Coastguard Worker endif() 712*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(ultrahdr_enc_fuzzer ${UHDR_CORE_LIB_NAME}) 713*89a0ef05SAndroid Build Coastguard Worker 714*89a0ef05SAndroid Build Coastguard Worker add_executable(ultrahdr_dec_fuzzer ${FUZZERS_DIR}/ultrahdr_dec_fuzzer.cpp) 715*89a0ef05SAndroid Build Coastguard Worker add_dependencies(ultrahdr_dec_fuzzer ${UHDR_CORE_LIB_NAME}) 716*89a0ef05SAndroid Build Coastguard Worker target_compile_options(ultrahdr_dec_fuzzer PRIVATE ${UHDR_WERROR_FLAGS}) 717*89a0ef05SAndroid Build Coastguard Worker target_include_directories(ultrahdr_dec_fuzzer PRIVATE ${PRIVATE_INCLUDE_DIR}) 718*89a0ef05SAndroid Build Coastguard Worker if(DEFINED ENV{LIB_FUZZING_ENGINE}) 719*89a0ef05SAndroid Build Coastguard Worker target_link_options(ultrahdr_dec_fuzzer PRIVATE $ENV{LIB_FUZZING_ENGINE}) 720*89a0ef05SAndroid Build Coastguard Worker else() 721*89a0ef05SAndroid Build Coastguard Worker target_link_options(ultrahdr_dec_fuzzer PRIVATE -fsanitize=fuzzer) 722*89a0ef05SAndroid Build Coastguard Worker endif() 723*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(ultrahdr_dec_fuzzer ${UHDR_CORE_LIB_NAME}) 724*89a0ef05SAndroid Build Coastguard Worker 725*89a0ef05SAndroid Build Coastguard Worker add_executable(ultrahdr_legacy_fuzzer ${FUZZERS_DIR}/ultrahdr_legacy_fuzzer.cpp) 726*89a0ef05SAndroid Build Coastguard Worker add_dependencies(ultrahdr_legacy_fuzzer ${UHDR_CORE_LIB_NAME}) 727*89a0ef05SAndroid Build Coastguard Worker target_compile_options(ultrahdr_legacy_fuzzer PRIVATE ${UHDR_WERROR_FLAGS}) 728*89a0ef05SAndroid Build Coastguard Worker target_include_directories(ultrahdr_legacy_fuzzer PRIVATE ${PRIVATE_INCLUDE_DIR}) 729*89a0ef05SAndroid Build Coastguard Worker if(DEFINED ENV{LIB_FUZZING_ENGINE}) 730*89a0ef05SAndroid Build Coastguard Worker target_link_options(ultrahdr_legacy_fuzzer PRIVATE $ENV{LIB_FUZZING_ENGINE}) 731*89a0ef05SAndroid Build Coastguard Worker else() 732*89a0ef05SAndroid Build Coastguard Worker target_link_options(ultrahdr_legacy_fuzzer PRIVATE -fsanitize=fuzzer) 733*89a0ef05SAndroid Build Coastguard Worker endif() 734*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(ultrahdr_legacy_fuzzer ${UHDR_CORE_LIB_NAME}) 735*89a0ef05SAndroid Build Coastguard Workerendif() 736*89a0ef05SAndroid Build Coastguard Worker 737*89a0ef05SAndroid Build Coastguard Workerset(UHDR_TARGET_NAME uhdr) 738*89a0ef05SAndroid Build Coastguard Workeradd_library(${UHDR_TARGET_NAME}) 739*89a0ef05SAndroid Build Coastguard Workeradd_dependencies(${UHDR_TARGET_NAME} ${UHDR_CORE_LIB_NAME}) 740*89a0ef05SAndroid Build Coastguard Workertarget_compile_options(${UHDR_TARGET_NAME} PRIVATE ${UHDR_WERROR_FLAGS}) 741*89a0ef05SAndroid Build Coastguard Workerif(UHDR_ENABLE_GLES) 742*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_TARGET_NAME} PRIVATE ${EGL_LIBRARIES} ${OPENGLES3_LIBRARIES}) 743*89a0ef05SAndroid Build Coastguard Workerendif() 744*89a0ef05SAndroid Build Coastguard Workerif(${CMAKE_SYSTEM_NAME} MATCHES "Android") 745*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_TARGET_NAME} PRIVATE ${log-lib}) 746*89a0ef05SAndroid Build Coastguard Workerendif() 747*89a0ef05SAndroid Build Coastguard Workertarget_link_libraries(${UHDR_TARGET_NAME} PRIVATE ${JPEG_LIBRARIES}) 748*89a0ef05SAndroid Build Coastguard Workerset_target_properties(${UHDR_TARGET_NAME} 749*89a0ef05SAndroid Build Coastguard Worker PROPERTIES PUBLIC_HEADER ultrahdr_api.h) 750*89a0ef05SAndroid Build Coastguard Workerif(BUILD_SHARED_LIBS) 751*89a0ef05SAndroid Build Coastguard Worker # If target is STATIC no need to set VERSION and SOVERSION 752*89a0ef05SAndroid Build Coastguard Worker set_target_properties(${UHDR_TARGET_NAME} 753*89a0ef05SAndroid Build Coastguard Worker PROPERTIES VERSION ${PROJECT_VERSION} 754*89a0ef05SAndroid Build Coastguard Worker SOVERSION ${PROJECT_VERSION_MAJOR}) 755*89a0ef05SAndroid Build Coastguard Workerendif() 756*89a0ef05SAndroid Build Coastguard Workercombine_static_libs(${UHDR_CORE_LIB_NAME} ${UHDR_TARGET_NAME}) 757*89a0ef05SAndroid Build Coastguard Worker 758*89a0ef05SAndroid Build Coastguard Worker# Build static library as well 759*89a0ef05SAndroid Build Coastguard Workerif(BUILD_SHARED_LIBS) 760*89a0ef05SAndroid Build Coastguard Worker set(UHDR_TARGET_NAME_STATIC uhdr-static) 761*89a0ef05SAndroid Build Coastguard Worker add_library(${UHDR_TARGET_NAME_STATIC} STATIC) 762*89a0ef05SAndroid Build Coastguard Worker add_dependencies(${UHDR_TARGET_NAME_STATIC} ${UHDR_CORE_LIB_NAME}) 763*89a0ef05SAndroid Build Coastguard Worker target_compile_options(${UHDR_TARGET_NAME_STATIC} PRIVATE ${UHDR_WERROR_FLAGS}) 764*89a0ef05SAndroid Build Coastguard Worker if(UHDR_ENABLE_GLES) 765*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_TARGET_NAME_STATIC} PRIVATE ${EGL_LIBRARIES} ${OPENGLES3_LIBRARIES}) 766*89a0ef05SAndroid Build Coastguard Worker endif() 767*89a0ef05SAndroid Build Coastguard Worker if(${CMAKE_SYSTEM_NAME} MATCHES "Android") 768*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_TARGET_NAME_STATIC} PRIVATE ${log-lib}) 769*89a0ef05SAndroid Build Coastguard Worker endif() 770*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_TARGET_NAME_STATIC} PRIVATE ${JPEG_LIBRARIES}) 771*89a0ef05SAndroid Build Coastguard Worker combine_static_libs(${UHDR_CORE_LIB_NAME} ${UHDR_TARGET_NAME_STATIC}) 772*89a0ef05SAndroid Build Coastguard Worker if(NOT MSVC) 773*89a0ef05SAndroid Build Coastguard Worker set_target_properties(${UHDR_TARGET_NAME_STATIC} 774*89a0ef05SAndroid Build Coastguard Worker PROPERTIES OUTPUT_NAME ${UHDR_TARGET_NAME}) 775*89a0ef05SAndroid Build Coastguard Worker endif() 776*89a0ef05SAndroid Build Coastguard Workerendif() 777*89a0ef05SAndroid Build Coastguard Worker 778*89a0ef05SAndroid Build Coastguard Workerif(UHDR_BUILD_JAVA) 779*89a0ef05SAndroid Build Coastguard Worker include(UseJava) 780*89a0ef05SAndroid Build Coastguard Worker 781*89a0ef05SAndroid Build Coastguard Worker set(UHDR_JNI_TARGET_NAME uhdrjni) 782*89a0ef05SAndroid Build Coastguard Worker add_library(${UHDR_JNI_TARGET_NAME} SHARED ${UHDR_JNI_SRCS_LIST}) 783*89a0ef05SAndroid Build Coastguard Worker add_dependencies(${UHDR_JNI_TARGET_NAME} ${UHDR_TARGET_NAME}) 784*89a0ef05SAndroid Build Coastguard Worker target_include_directories(${UHDR_JNI_TARGET_NAME} PRIVATE ${UHDR_JNI_INCLUDE_PATH} ${EXPORT_INCLUDE_DIR}) 785*89a0ef05SAndroid Build Coastguard Worker target_compile_options(${UHDR_JNI_TARGET_NAME} PRIVATE ${UHDR_WERROR_FLAGS}) 786*89a0ef05SAndroid Build Coastguard Worker target_link_libraries(${UHDR_JNI_TARGET_NAME} PRIVATE ${UHDR_TARGET_NAME}) 787*89a0ef05SAndroid Build Coastguard Worker 788*89a0ef05SAndroid Build Coastguard Worker add_jar(uhdr-java SOURCES ${UHDR_JAVA_SRCS_LIST} ${UHDR_APP_SRC} ENTRY_POINT UltraHdrApp) 789*89a0ef05SAndroid Build Coastguard Workerendif() 790*89a0ef05SAndroid Build Coastguard Worker 791*89a0ef05SAndroid Build Coastguard Workerif(UHDR_ENABLE_INSTALL) 792*89a0ef05SAndroid Build Coastguard Worker if(NOT(MSVC OR XCODE)) 793*89a0ef05SAndroid Build Coastguard Worker include(GNUInstallDirs) 794*89a0ef05SAndroid Build Coastguard Worker 795*89a0ef05SAndroid Build Coastguard Worker # pkg-config: libuhdr.pc 796*89a0ef05SAndroid Build Coastguard Worker configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/libuhdr.pc.in" 797*89a0ef05SAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/libuhdr.pc" @ONLY NEWLINE_STYLE UNIX) 798*89a0ef05SAndroid Build Coastguard Worker install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libuhdr.pc" 799*89a0ef05SAndroid Build Coastguard Worker DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") 800*89a0ef05SAndroid Build Coastguard Worker install(TARGETS ${UHDR_TARGET_NAME} ${UHDR_TARGET_NAME_STATIC} ${UHDR_SAMPLE_APP} 801*89a0ef05SAndroid Build Coastguard Worker RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" 802*89a0ef05SAndroid Build Coastguard Worker LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" 803*89a0ef05SAndroid Build Coastguard Worker ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" 804*89a0ef05SAndroid Build Coastguard Worker PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") 805*89a0ef05SAndroid Build Coastguard Worker if(BUILD_SHARED_LIBS) 806*89a0ef05SAndroid Build Coastguard Worker if(APPLE) 807*89a0ef05SAndroid Build Coastguard Worker install(CODE "message(STATUS \"You may need to add path \" 808*89a0ef05SAndroid Build Coastguard Worker \"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/ \" 809*89a0ef05SAndroid Build Coastguard Worker \"to DYLD_FALLBACK_LIBRARY_PATH if binaries are unable to load uhdr library \n\" 810*89a0ef05SAndroid Build Coastguard Worker \"e.g. export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH:${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/ \")") 811*89a0ef05SAndroid Build Coastguard Worker elseif(UNIX) 812*89a0ef05SAndroid Build Coastguard Worker install(CODE "message(STATUS \"You may need to add path \" 813*89a0ef05SAndroid Build Coastguard Worker \"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/ \" 814*89a0ef05SAndroid Build Coastguard Worker \"to LD_LIBRARY_PATH if binaries are unable to load uhdr library \n\" 815*89a0ef05SAndroid Build Coastguard Worker \"e.g. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/ \")") 816*89a0ef05SAndroid Build Coastguard Worker endif() 817*89a0ef05SAndroid Build Coastguard Worker endif() 818*89a0ef05SAndroid Build Coastguard Worker 819*89a0ef05SAndroid Build Coastguard Worker configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" 820*89a0ef05SAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) 821*89a0ef05SAndroid Build Coastguard Worker add_custom_target(uninstall 822*89a0ef05SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) 823*89a0ef05SAndroid Build Coastguard Worker 824*89a0ef05SAndroid Build Coastguard Worker # packaging 825*89a0ef05SAndroid Build Coastguard Worker if(UHDR_BUILD_PACKAGING) 826*89a0ef05SAndroid Build Coastguard Worker include(cmake/package.cmake) 827*89a0ef05SAndroid Build Coastguard Worker include(CPack) 828*89a0ef05SAndroid Build Coastguard Worker endif() 829*89a0ef05SAndroid Build Coastguard Worker 830*89a0ef05SAndroid Build Coastguard Worker endif() 831*89a0ef05SAndroid Build Coastguard Workerendif() 832