1*a67afe4dSAndroid Build Coastguard Worker 2*a67afe4dSAndroid Build Coastguard Worker# CMakeLists.txt - CMake lists for libpng 3*a67afe4dSAndroid Build Coastguard Worker# 4*a67afe4dSAndroid Build Coastguard Worker# Copyright (c) 2018-2024 Cosmin Truta. 5*a67afe4dSAndroid Build Coastguard Worker# Copyright (c) 2007-2018 Glenn Randers-Pehrson. 6*a67afe4dSAndroid Build Coastguard Worker# Originally written by Christian Ehrlicher, 2007. 7*a67afe4dSAndroid Build Coastguard Worker# 8*a67afe4dSAndroid Build Coastguard Worker# Use, modification and distribution are subject to 9*a67afe4dSAndroid Build Coastguard Worker# the same licensing terms and conditions as libpng. 10*a67afe4dSAndroid Build Coastguard Worker# Please see the copyright notice in png.h or visit 11*a67afe4dSAndroid Build Coastguard Worker# http://libpng.org/pub/png/src/libpng-LICENSE.txt 12*a67afe4dSAndroid Build Coastguard Worker# 13*a67afe4dSAndroid Build Coastguard Worker# For copyright and licensing purposes, please see 14*a67afe4dSAndroid Build Coastguard Worker# the accompanying file scripts/cmake/AUTHORS.md 15*a67afe4dSAndroid Build Coastguard Worker# 16*a67afe4dSAndroid Build Coastguard Worker# SPDX-License-Identifier: libpng-2.0 17*a67afe4dSAndroid Build Coastguard Worker 18*a67afe4dSAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.6) 19*a67afe4dSAndroid Build Coastguard Worker 20*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_MAJOR 1) 21*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_MINOR 6) 22*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_REVISION 44) 23*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_SUBREVISION 0) 24*a67afe4dSAndroid Build Coastguard Worker#set(PNGLIB_SUBREVISION "git") 25*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_REVISION}) 26*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_ABI_VERSION ${PNGLIB_MAJOR}${PNGLIB_MINOR}) 27*a67afe4dSAndroid Build Coastguard Workerset(PNGLIB_SHARED_VERSION ${PNGLIB_ABI_VERSION}.${PNGLIB_REVISION}.${PNGLIB_SUBREVISION}) 28*a67afe4dSAndroid Build Coastguard Worker 29*a67afe4dSAndroid Build Coastguard Workerproject(libpng 30*a67afe4dSAndroid Build Coastguard Worker VERSION ${PNGLIB_VERSION} 31*a67afe4dSAndroid Build Coastguard Worker LANGUAGES C ASM) 32*a67afe4dSAndroid Build Coastguard Worker 33*a67afe4dSAndroid Build Coastguard Workerif(POLICY CMP0074) 34*a67afe4dSAndroid Build Coastguard Worker # Allow find_package() to use the ZLIB_ROOT variable, if available. 35*a67afe4dSAndroid Build Coastguard Worker cmake_policy(SET CMP0074 NEW) 36*a67afe4dSAndroid Build Coastguard Workerendif() 37*a67afe4dSAndroid Build Coastguard Worker 38*a67afe4dSAndroid Build Coastguard Workerinclude(CheckCSourceCompiles) 39*a67afe4dSAndroid Build Coastguard Workerinclude(GNUInstallDirs) 40*a67afe4dSAndroid Build Coastguard Worker 41*a67afe4dSAndroid Build Coastguard Worker# Allow the users to specify an application-specific API prefix for libpng 42*a67afe4dSAndroid Build Coastguard Worker# vendoring purposes. A standard libpng build should have no such prefix. 43*a67afe4dSAndroid Build Coastguard Workerset(PNG_PREFIX "" 44*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Prefix to prepend to the API function names") 45*a67afe4dSAndroid Build Coastguard Worker 46*a67afe4dSAndroid Build Coastguard Worker# Allow the users to override the postfix appended to debug library file names. 47*a67afe4dSAndroid Build Coastguard Worker# Previously, we used to set CMAKE_DEBUG_POSTFIX globally. That variable should 48*a67afe4dSAndroid Build Coastguard Worker# not be cached, however, because doing so would affect all projects processed 49*a67afe4dSAndroid Build Coastguard Worker# after libpng, in unexpected and undesirable ways. 50*a67afe4dSAndroid Build Coastguard Workerset(PNG_DEBUG_POSTFIX "d" 51*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Postfix to append to library file names under the Debug configuration") 52*a67afe4dSAndroid Build Coastguard Worker 53*a67afe4dSAndroid Build Coastguard Worker# Allow the users to import their own extra configuration settings. 54*a67afe4dSAndroid Build Coastguard Workerset(DFA_XTRA "" 55*a67afe4dSAndroid Build Coastguard Worker CACHE FILEPATH "File containing extra configuration settings") 56*a67afe4dSAndroid Build Coastguard Worker 57*a67afe4dSAndroid Build Coastguard Worker# Allow the users to switch on/off various library build types. 58*a67afe4dSAndroid Build Coastguard Workeroption(PNG_SHARED "Build libpng as a shared library" ON) 59*a67afe4dSAndroid Build Coastguard Workeroption(PNG_STATIC "Build libpng as a static library" ON) 60*a67afe4dSAndroid Build Coastguard Workerif(APPLE) 61*a67afe4dSAndroid Build Coastguard Worker option(PNG_FRAMEWORK "Build libpng as a framework bundle" ON) 62*a67afe4dSAndroid Build Coastguard Workerendif() 63*a67afe4dSAndroid Build Coastguard Worker 64*a67afe4dSAndroid Build Coastguard Worker# Allow the users to switch on/off the auxiliary build and test artifacts. 65*a67afe4dSAndroid Build Coastguard Worker# These artifacts are NOT part of libpng proper, and are subject to change 66*a67afe4dSAndroid Build Coastguard Worker# at any time. 67*a67afe4dSAndroid Build Coastguard Workeroption(PNG_TESTS "Build the libpng tests" ON) 68*a67afe4dSAndroid Build Coastguard Worker 69*a67afe4dSAndroid Build Coastguard Worker# Same as above, but for the third-party tools. 70*a67afe4dSAndroid Build Coastguard Worker# Although these tools are targetted at development environments only, 71*a67afe4dSAndroid Build Coastguard Worker# the users are allowed to override the option to build by default. 72*a67afe4dSAndroid Build Coastguard Workerif (ANDROID OR IOS) 73*a67afe4dSAndroid Build Coastguard Worker option(PNG_TOOLS "Build the libpng tools" OFF) 74*a67afe4dSAndroid Build Coastguard Workerelse() 75*a67afe4dSAndroid Build Coastguard Worker option(PNG_TOOLS "Build the libpng tools" ON) 76*a67afe4dSAndroid Build Coastguard Workerendif() 77*a67afe4dSAndroid Build Coastguard Worker 78*a67afe4dSAndroid Build Coastguard Worker# Maintain backwards compatibility with the deprecated option PNG_EXECUTABLES. 79*a67afe4dSAndroid Build Coastguard Workeroption(PNG_EXECUTABLES "[Deprecated; please use PNG_TOOLS]" ON) 80*a67afe4dSAndroid Build Coastguard Workerif(NOT PNG_EXECUTABLES) 81*a67afe4dSAndroid Build Coastguard Worker message(DEPRECATION "The option PNG_EXECUTABLES has been deprecated in favour of PNG_TOOLS") 82*a67afe4dSAndroid Build Coastguard Worker if(PNG_TOOLS) 83*a67afe4dSAndroid Build Coastguard Worker message(AUTHOR_WARNING 84*a67afe4dSAndroid Build Coastguard Worker "Setting PNG_TOOLS to ${PNG_EXECUTABLES}, to stay compatible with PNG_EXECUTABLES") 85*a67afe4dSAndroid Build Coastguard Worker set(PNG_TOOLS "${PNG_EXECUTABLES}") 86*a67afe4dSAndroid Build Coastguard Worker endif() 87*a67afe4dSAndroid Build Coastguard Workerendif() 88*a67afe4dSAndroid Build Coastguard Worker 89*a67afe4dSAndroid Build Coastguard Worker# Allow the users to configure various compilation options. 90*a67afe4dSAndroid Build Coastguard Workeroption(PNG_DEBUG "Enable debug output" OFF) 91*a67afe4dSAndroid Build Coastguard Workeroption(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" ON) 92*a67afe4dSAndroid Build Coastguard Worker 93*a67afe4dSAndroid Build Coastguard Worker# Initialize and show the target architecture variable PNG_TARGET_ARCHITECTURE. 94*a67afe4dSAndroid Build Coastguard Worker# 95*a67afe4dSAndroid Build Coastguard Worker# NOTE: 96*a67afe4dSAndroid Build Coastguard Worker# On macOS, CMake sets CMAKE_SYSTEM_PROCESSOR to either "x86_64" or "arm64", 97*a67afe4dSAndroid Build Coastguard Worker# based upon the OS architecture, not the target architecture. As such, we need 98*a67afe4dSAndroid Build Coastguard Worker# to check CMAKE_OSX_ARCHITECTURES to identify which hardware-specific flags to 99*a67afe4dSAndroid Build Coastguard Worker# enable. Note that this will fail if you attempt to build a universal binary 100*a67afe4dSAndroid Build Coastguard Worker# in a single CMake invocation. 101*a67afe4dSAndroid Build Coastguard Workerif (APPLE AND CMAKE_OSX_ARCHITECTURES) 102*a67afe4dSAndroid Build Coastguard Worker string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" PNG_TARGET_ARCHITECTURE) 103*a67afe4dSAndroid Build Coastguard Workerelse() 104*a67afe4dSAndroid Build Coastguard Worker string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" PNG_TARGET_ARCHITECTURE) 105*a67afe4dSAndroid Build Coastguard Workerendif() 106*a67afe4dSAndroid Build Coastguard Workermessage(STATUS "Building for target architecture: ${PNG_TARGET_ARCHITECTURE}") 107*a67afe4dSAndroid Build Coastguard Worker 108*a67afe4dSAndroid Build Coastguard Worker# Allow the users to specify a custom location of zlib. 109*a67afe4dSAndroid Build Coastguard Worker# This option is deprecated, and no longer needed with CMake 3.12 and newer. 110*a67afe4dSAndroid Build Coastguard Worker# Under the CMake policy CMP0074, if zlib is being built alongside libpng as a 111*a67afe4dSAndroid Build Coastguard Worker# subproject, its location can be passed on to CMake via the ZLIB_ROOT variable. 112*a67afe4dSAndroid Build Coastguard Workeroption(PNG_BUILD_ZLIB "Custom zlib location, else find_package is used" OFF) 113*a67afe4dSAndroid Build Coastguard Workerif(NOT PNG_BUILD_ZLIB) 114*a67afe4dSAndroid Build Coastguard Worker find_package(ZLIB REQUIRED) 115*a67afe4dSAndroid Build Coastguard Workerelseif(POLICY CMP0074) 116*a67afe4dSAndroid Build Coastguard Worker if("x${ZLIB_ROOT}" STREQUAL "x") 117*a67afe4dSAndroid Build Coastguard Worker message(DEPRECATION 118*a67afe4dSAndroid Build Coastguard Worker "The option PNG_BUILD_ZLIB has been deprecated; please use ZLIB_ROOT instead") 119*a67afe4dSAndroid Build Coastguard Worker else() 120*a67afe4dSAndroid Build Coastguard Worker message(SEND_ERROR 121*a67afe4dSAndroid Build Coastguard Worker "The option PNG_BUILD_ZLIB=${PNG_BUILD_ZLIB} and " 122*a67afe4dSAndroid Build Coastguard Worker "the variable ZLIB_ROOT=\"${ZLIB_ROOT}\" are mutually exclusive") 123*a67afe4dSAndroid Build Coastguard Worker endif() 124*a67afe4dSAndroid Build Coastguard Workerendif() 125*a67afe4dSAndroid Build Coastguard Worker 126*a67afe4dSAndroid Build Coastguard Workerif(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU AND NOT EMSCRIPTEN) 127*a67afe4dSAndroid Build Coastguard Worker find_library(M_LIBRARY m) 128*a67afe4dSAndroid Build Coastguard Worker if(M_LIBRARY) 129*a67afe4dSAndroid Build Coastguard Worker set(M_LIBRARY m) 130*a67afe4dSAndroid Build Coastguard Worker else() 131*a67afe4dSAndroid Build Coastguard Worker set(M_LIBRARY "") 132*a67afe4dSAndroid Build Coastguard Worker endif() 133*a67afe4dSAndroid Build Coastguard Workerelse() 134*a67afe4dSAndroid Build Coastguard Worker # libm is not available or not needed. 135*a67afe4dSAndroid Build Coastguard Workerendif() 136*a67afe4dSAndroid Build Coastguard Worker 137*a67afe4dSAndroid Build Coastguard Workerif(PNG_HARDWARE_OPTIMIZATIONS) 138*a67afe4dSAndroid Build Coastguard Worker 139*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for ARM. 140*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(arm|aarch)") 141*a67afe4dSAndroid Build Coastguard Worker if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm64|aarch64)") 142*a67afe4dSAndroid Build Coastguard Worker set(PNG_ARM_NEON_POSSIBLE_VALUES on off) 143*a67afe4dSAndroid Build Coastguard Worker set(PNG_ARM_NEON "on" 144*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Enable ARM NEON optimizations: on|off; on is default") 145*a67afe4dSAndroid Build Coastguard Worker else() 146*a67afe4dSAndroid Build Coastguard Worker set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) 147*a67afe4dSAndroid Build Coastguard Worker set(PNG_ARM_NEON "off" 148*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Enable ARM NEON optimizations: check|on|off; off is default") 149*a67afe4dSAndroid Build Coastguard Worker endif() 150*a67afe4dSAndroid Build Coastguard Worker set_property(CACHE PNG_ARM_NEON 151*a67afe4dSAndroid Build Coastguard Worker PROPERTY STRINGS ${PNG_ARM_NEON_POSSIBLE_VALUES}) 152*a67afe4dSAndroid Build Coastguard Worker list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index) 153*a67afe4dSAndroid Build Coastguard Worker if(index EQUAL -1) 154*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]") 155*a67afe4dSAndroid Build Coastguard Worker elseif(NOT PNG_ARM_NEON STREQUAL "off") 156*a67afe4dSAndroid Build Coastguard Worker set(libpng_arm_sources 157*a67afe4dSAndroid Build Coastguard Worker arm/arm_init.c 158*a67afe4dSAndroid Build Coastguard Worker arm/filter_neon_intrinsics.c 159*a67afe4dSAndroid Build Coastguard Worker arm/palette_neon_intrinsics.c) 160*a67afe4dSAndroid Build Coastguard Worker if(PNG_ARM_NEON STREQUAL "on") 161*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_ARM_NEON_OPT=2) 162*a67afe4dSAndroid Build Coastguard Worker elseif(PNG_ARM_NEON STREQUAL "check") 163*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED) 164*a67afe4dSAndroid Build Coastguard Worker endif() 165*a67afe4dSAndroid Build Coastguard Worker else() 166*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_ARM_NEON_OPT=0) 167*a67afe4dSAndroid Build Coastguard Worker endif() 168*a67afe4dSAndroid Build Coastguard Workerendif() 169*a67afe4dSAndroid Build Coastguard Worker 170*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for PowerPC. 171*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(powerpc|ppc64)") 172*a67afe4dSAndroid Build Coastguard Worker set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) 173*a67afe4dSAndroid Build Coastguard Worker set(PNG_POWERPC_VSX "on" 174*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Enable POWERPC VSX optimizations: on|off; on is default") 175*a67afe4dSAndroid Build Coastguard Worker set_property(CACHE PNG_POWERPC_VSX 176*a67afe4dSAndroid Build Coastguard Worker PROPERTY STRINGS ${PNG_POWERPC_VSX_POSSIBLE_VALUES}) 177*a67afe4dSAndroid Build Coastguard Worker list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index) 178*a67afe4dSAndroid Build Coastguard Worker if(index EQUAL -1) 179*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]") 180*a67afe4dSAndroid Build Coastguard Worker elseif(NOT PNG_POWERPC_VSX STREQUAL "off") 181*a67afe4dSAndroid Build Coastguard Worker set(libpng_powerpc_sources 182*a67afe4dSAndroid Build Coastguard Worker powerpc/powerpc_init.c 183*a67afe4dSAndroid Build Coastguard Worker powerpc/filter_vsx_intrinsics.c) 184*a67afe4dSAndroid Build Coastguard Worker if(PNG_POWERPC_VSX STREQUAL "on") 185*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_POWERPC_VSX_OPT=2) 186*a67afe4dSAndroid Build Coastguard Worker endif() 187*a67afe4dSAndroid Build Coastguard Worker else() 188*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_POWERPC_VSX_OPT=0) 189*a67afe4dSAndroid Build Coastguard Worker endif() 190*a67afe4dSAndroid Build Coastguard Workerendif() 191*a67afe4dSAndroid Build Coastguard Worker 192*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for Intel. 193*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(i[3-6]86|x86|amd64)") 194*a67afe4dSAndroid Build Coastguard Worker set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) 195*a67afe4dSAndroid Build Coastguard Worker set(PNG_INTEL_SSE "on" 196*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Enable INTEL_SSE optimizations: on|off; on is default") 197*a67afe4dSAndroid Build Coastguard Worker set_property(CACHE PNG_INTEL_SSE 198*a67afe4dSAndroid Build Coastguard Worker PROPERTY STRINGS ${PNG_INTEL_SSE_POSSIBLE_VALUES}) 199*a67afe4dSAndroid Build Coastguard Worker list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index) 200*a67afe4dSAndroid Build Coastguard Worker if(index EQUAL -1) 201*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]") 202*a67afe4dSAndroid Build Coastguard Worker elseif(NOT PNG_INTEL_SSE STREQUAL "off") 203*a67afe4dSAndroid Build Coastguard Worker set(libpng_intel_sources 204*a67afe4dSAndroid Build Coastguard Worker intel/intel_init.c 205*a67afe4dSAndroid Build Coastguard Worker intel/filter_sse2_intrinsics.c) 206*a67afe4dSAndroid Build Coastguard Worker if(PNG_INTEL_SSE STREQUAL "on") 207*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_INTEL_SSE_OPT=1) 208*a67afe4dSAndroid Build Coastguard Worker endif() 209*a67afe4dSAndroid Build Coastguard Worker else() 210*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_INTEL_SSE_OPT=0) 211*a67afe4dSAndroid Build Coastguard Worker endif() 212*a67afe4dSAndroid Build Coastguard Workerendif() 213*a67afe4dSAndroid Build Coastguard Worker 214*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for MIPS. 215*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(mipsel|mips64el)") 216*a67afe4dSAndroid Build Coastguard Worker set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) 217*a67afe4dSAndroid Build Coastguard Worker set(PNG_MIPS_MSA "on" 218*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Enable MIPS_MSA optimizations: on|off; on is default") 219*a67afe4dSAndroid Build Coastguard Worker set_property(CACHE PNG_MIPS_MSA 220*a67afe4dSAndroid Build Coastguard Worker PROPERTY STRINGS ${PNG_MIPS_MSA_POSSIBLE_VALUES}) 221*a67afe4dSAndroid Build Coastguard Worker list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index_msa) 222*a67afe4dSAndroid Build Coastguard Worker if(index_msa EQUAL -1) 223*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]") 224*a67afe4dSAndroid Build Coastguard Worker endif() 225*a67afe4dSAndroid Build Coastguard Worker 226*a67afe4dSAndroid Build Coastguard Worker set(PNG_MIPS_MMI_POSSIBLE_VALUES on off) 227*a67afe4dSAndroid Build Coastguard Worker set(PNG_MIPS_MMI "on" 228*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Enable MIPS_MMI optimizations: on|off; on is default") 229*a67afe4dSAndroid Build Coastguard Worker set_property(CACHE PNG_MIPS_MMI 230*a67afe4dSAndroid Build Coastguard Worker PROPERTY STRINGS ${PNG_MIPS_MMI_POSSIBLE_VALUES}) 231*a67afe4dSAndroid Build Coastguard Worker list(FIND PNG_MIPS_MMI_POSSIBLE_VALUES ${PNG_MIPS_MMI} index_mmi) 232*a67afe4dSAndroid Build Coastguard Worker if(index_mmi EQUAL -1) 233*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "PNG_MIPS_MMI must be one of [${PNG_MIPS_MMI_POSSIBLE_VALUES}]") 234*a67afe4dSAndroid Build Coastguard Worker endif() 235*a67afe4dSAndroid Build Coastguard Worker 236*a67afe4dSAndroid Build Coastguard Worker if(PNG_MIPS_MSA STREQUAL "on" AND PNG_MIPS_MMI STREQUAL "on") 237*a67afe4dSAndroid Build Coastguard Worker set(libpng_mips_sources 238*a67afe4dSAndroid Build Coastguard Worker mips/mips_init.c 239*a67afe4dSAndroid Build Coastguard Worker mips/filter_msa_intrinsics.c 240*a67afe4dSAndroid Build Coastguard Worker mips/filter_mmi_inline_assembly.c) 241*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MSA_OPT=2) 242*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MMI_OPT=1) 243*a67afe4dSAndroid Build Coastguard Worker elseif(PNG_MIPS_MSA STREQUAL "on") 244*a67afe4dSAndroid Build Coastguard Worker set(libpng_mips_sources 245*a67afe4dSAndroid Build Coastguard Worker mips/mips_init.c 246*a67afe4dSAndroid Build Coastguard Worker mips/filter_msa_intrinsics.c) 247*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MSA_OPT=2) 248*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MMI_OPT=0) 249*a67afe4dSAndroid Build Coastguard Worker elseif(PNG_MIPS_MMI STREQUAL "on") 250*a67afe4dSAndroid Build Coastguard Worker set(libpng_mips_sources 251*a67afe4dSAndroid Build Coastguard Worker mips/mips_init.c 252*a67afe4dSAndroid Build Coastguard Worker mips/filter_mmi_inline_assembly.c) 253*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MSA_OPT=0) 254*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MMI_OPT=1) 255*a67afe4dSAndroid Build Coastguard Worker else() 256*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MSA_OPT=0) 257*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MMI_OPT=0) 258*a67afe4dSAndroid Build Coastguard Worker endif() 259*a67afe4dSAndroid Build Coastguard Workerendif() 260*a67afe4dSAndroid Build Coastguard Worker 261*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for LoongArch. 262*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(loongarch)") 263*a67afe4dSAndroid Build Coastguard Worker include(CheckCCompilerFlag) 264*a67afe4dSAndroid Build Coastguard Worker set(PNG_LOONGARCH_LSX_POSSIBLE_VALUES on off) 265*a67afe4dSAndroid Build Coastguard Worker set(PNG_LOONGARCH_LSX "on" 266*a67afe4dSAndroid Build Coastguard Worker CACHE STRING "Enable LOONGARCH_LSX optimizations: on|off; on is default") 267*a67afe4dSAndroid Build Coastguard Worker set_property(CACHE PNG_LOONGARCH_LSX 268*a67afe4dSAndroid Build Coastguard Worker PROPERTY STRINGS ${PNG_LOONGARCH_LSX_POSSIBLE_VALUES}) 269*a67afe4dSAndroid Build Coastguard Worker list(FIND PNG_LOONGARCH_LSX_POSSIBLE_VALUES ${PNG_LOONGARCH_LSX} index) 270*a67afe4dSAndroid Build Coastguard Worker if(index EQUAL -1) 271*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "PNG_LOONGARCH_LSX must be one of [${PNG_LOONGARCH_LSX_POSSIBLE_VALUES}]") 272*a67afe4dSAndroid Build Coastguard Worker elseif(NOT PNG_LOONGARCH_LSX STREQUAL "off") 273*a67afe4dSAndroid Build Coastguard Worker CHECK_C_COMPILER_FLAG("-mlsx" COMPILER_SUPPORTS_LSX) 274*a67afe4dSAndroid Build Coastguard Worker if(COMPILER_SUPPORTS_LSX) 275*a67afe4dSAndroid Build Coastguard Worker set(libpng_loongarch_sources 276*a67afe4dSAndroid Build Coastguard Worker loongarch/loongarch_lsx_init.c 277*a67afe4dSAndroid Build Coastguard Worker loongarch/filter_lsx_intrinsics.c) 278*a67afe4dSAndroid Build Coastguard Worker set_source_files_properties(${libpng_loongarch_sources} 279*a67afe4dSAndroid Build Coastguard Worker PROPERTIES 280*a67afe4dSAndroid Build Coastguard Worker COMPILE_FLAGS "-mlsx") 281*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_LOONGARCH_LSX_OPT=1) 282*a67afe4dSAndroid Build Coastguard Worker else() 283*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "Compiler does not support -mlsx option") 284*a67afe4dSAndroid Build Coastguard Worker endif() 285*a67afe4dSAndroid Build Coastguard Worker else() 286*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_LOONGARCH_LSX_OPT=0) 287*a67afe4dSAndroid Build Coastguard Worker endif() 288*a67afe4dSAndroid Build Coastguard Workerendif() 289*a67afe4dSAndroid Build Coastguard Worker 290*a67afe4dSAndroid Build Coastguard Workerelse(PNG_HARDWARE_OPTIMIZATIONS) 291*a67afe4dSAndroid Build Coastguard Worker 292*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for ARM. 293*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(arm|aarch)") 294*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_ARM_NEON_OPT=0) 295*a67afe4dSAndroid Build Coastguard Workerendif() 296*a67afe4dSAndroid Build Coastguard Worker 297*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for PowerPC. 298*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(powerpc|ppc64)") 299*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_POWERPC_VSX_OPT=0) 300*a67afe4dSAndroid Build Coastguard Workerendif() 301*a67afe4dSAndroid Build Coastguard Worker 302*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for Intel. 303*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(i[3-6]86|x86|amd64)") 304*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_INTEL_SSE_OPT=0) 305*a67afe4dSAndroid Build Coastguard Workerendif() 306*a67afe4dSAndroid Build Coastguard Worker 307*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for MIPS. 308*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(mipsel|mips64el)") 309*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_MIPS_MSA_OPT=0) 310*a67afe4dSAndroid Build Coastguard Workerendif() 311*a67afe4dSAndroid Build Coastguard Worker 312*a67afe4dSAndroid Build Coastguard Worker# Set definitions and sources for LoongArch. 313*a67afe4dSAndroid Build Coastguard Workerif(PNG_TARGET_ARCHITECTURE MATCHES "^(loongarch)") 314*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_LOONGARCH_LSX_OPT=0) 315*a67afe4dSAndroid Build Coastguard Workerendif() 316*a67afe4dSAndroid Build Coastguard Worker 317*a67afe4dSAndroid Build Coastguard Workerendif(PNG_HARDWARE_OPTIMIZATIONS) 318*a67afe4dSAndroid Build Coastguard Worker 319*a67afe4dSAndroid Build Coastguard Workeroption(ld-version-script "Enable linker version script" ON) 320*a67afe4dSAndroid Build Coastguard Workerif(ld-version-script AND NOT ANDROID AND NOT APPLE) 321*a67afe4dSAndroid Build Coastguard Worker # Check if LD supports linker scripts. 322*a67afe4dSAndroid Build Coastguard Worker file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" " 323*a67afe4dSAndroid Build Coastguard WorkerVERS_1 { global: sym1; local: *; }; 324*a67afe4dSAndroid Build Coastguard WorkerVERS_2 { global: sym2; main; } VERS_1; 325*a67afe4dSAndroid Build Coastguard Worker") 326*a67afe4dSAndroid Build Coastguard Worker set(_SAVED_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) 327*a67afe4dSAndroid Build Coastguard Worker if(NOT CMAKE_HOST_SOLARIS) 328*a67afe4dSAndroid Build Coastguard Worker # Avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script checks on 329*a67afe4dSAndroid Build Coastguard Worker # Solaris, because of an incompatibility with the Solaris link editor. 330*a67afe4dSAndroid Build Coastguard Worker list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) 331*a67afe4dSAndroid Build Coastguard Worker endif() 332*a67afe4dSAndroid Build Coastguard Worker list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'") 333*a67afe4dSAndroid Build Coastguard Worker check_c_source_compiles(" 334*a67afe4dSAndroid Build Coastguard Workervoid sym1(void) {} 335*a67afe4dSAndroid Build Coastguard Workervoid sym2(void) {} 336*a67afe4dSAndroid Build Coastguard Workerint main(void) { return 0; } 337*a67afe4dSAndroid Build Coastguard Worker" HAVE_LD_VERSION_SCRIPT) 338*a67afe4dSAndroid Build Coastguard Worker if(NOT HAVE_LD_VERSION_SCRIPT) 339*a67afe4dSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS}) 340*a67afe4dSAndroid Build Coastguard Worker if(NOT CMAKE_HOST_SOLARIS) 341*a67afe4dSAndroid Build Coastguard Worker # Again, avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script 342*a67afe4dSAndroid Build Coastguard Worker # checks on Solaris. 343*a67afe4dSAndroid Build Coastguard Worker list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) 344*a67afe4dSAndroid Build Coastguard Worker endif() 345*a67afe4dSAndroid Build Coastguard Worker list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map") 346*a67afe4dSAndroid Build Coastguard Worker check_c_source_compiles(" 347*a67afe4dSAndroid Build Coastguard Workervoid sym1(void) {} 348*a67afe4dSAndroid Build Coastguard Workervoid sym2(void) {} 349*a67afe4dSAndroid Build Coastguard Workerint main(void) { return 0; } 350*a67afe4dSAndroid Build Coastguard Worker" HAVE_SOLARIS_LD_VERSION_SCRIPT) 351*a67afe4dSAndroid Build Coastguard Worker endif() 352*a67afe4dSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS}) 353*a67afe4dSAndroid Build Coastguard Worker file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map") 354*a67afe4dSAndroid Build Coastguard Workerendif() 355*a67afe4dSAndroid Build Coastguard Worker 356*a67afe4dSAndroid Build Coastguard Worker# Find an AWK language processor. 357*a67afe4dSAndroid Build Coastguard Worker# Start with specific AWK implementations like gawk and nawk, which are 358*a67afe4dSAndroid Build Coastguard Worker# known to work with our scripts, then fall back to the system awk. 359*a67afe4dSAndroid Build Coastguard Workerfind_program(AWK NAMES gawk nawk awk) 360*a67afe4dSAndroid Build Coastguard Workerif(AWK) 361*a67afe4dSAndroid Build Coastguard Worker message(STATUS "Found AWK program: ${AWK}") 362*a67afe4dSAndroid Build Coastguard Workerelse() 363*a67afe4dSAndroid Build Coastguard Worker message(STATUS "Could not find an AWK-compatible program") 364*a67afe4dSAndroid Build Coastguard Workerendif() 365*a67afe4dSAndroid Build Coastguard Worker 366*a67afe4dSAndroid Build Coastguard Workerif(NOT AWK OR ANDROID OR IOS) 367*a67afe4dSAndroid Build Coastguard Worker # No awk available to generate sources; use pre-built pnglibconf.h 368*a67afe4dSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt 369*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h) 370*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_genfiles) 371*a67afe4dSAndroid Build Coastguard Workerelse() 372*a67afe4dSAndroid Build Coastguard Worker # Copy the awk scripts, converting their line endings to Unix (LF) 373*a67afe4dSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk 374*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk 375*a67afe4dSAndroid Build Coastguard Worker @ONLY 376*a67afe4dSAndroid Build Coastguard Worker NEWLINE_STYLE LF) 377*a67afe4dSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk 378*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk 379*a67afe4dSAndroid Build Coastguard Worker @ONLY 380*a67afe4dSAndroid Build Coastguard Worker NEWLINE_STYLE LF) 381*a67afe4dSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/dfn.awk 382*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/scripts/dfn.awk 383*a67afe4dSAndroid Build Coastguard Worker @ONLY 384*a67afe4dSAndroid Build Coastguard Worker NEWLINE_STYLE LF) 385*a67afe4dSAndroid Build Coastguard Worker 386*a67afe4dSAndroid Build Coastguard Worker # Generate .chk from .out with awk: 387*a67afe4dSAndroid Build Coastguard Worker # generate_chk(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 388*a67afe4dSAndroid Build Coastguard Worker function(generate_chk) 389*a67afe4dSAndroid Build Coastguard Worker set(options) 390*a67afe4dSAndroid Build Coastguard Worker set(oneValueArgs INPUT OUTPUT) 391*a67afe4dSAndroid Build Coastguard Worker set(multiValueArgs DEPENDS) 392*a67afe4dSAndroid Build Coastguard Worker cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 393*a67afe4dSAndroid Build Coastguard Worker if(NOT _GC_INPUT) 394*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "generate_chk: Missing INPUT argument") 395*a67afe4dSAndroid Build Coastguard Worker endif() 396*a67afe4dSAndroid Build Coastguard Worker if(NOT _GC_OUTPUT) 397*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "generate_chk: Missing OUTPUT argument") 398*a67afe4dSAndroid Build Coastguard Worker endif() 399*a67afe4dSAndroid Build Coastguard Worker 400*a67afe4dSAndroid Build Coastguard Worker add_custom_command(OUTPUT "${_GC_OUTPUT}" 401*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 402*a67afe4dSAndroid Build Coastguard Worker "-DINPUT=${_GC_INPUT}" 403*a67afe4dSAndroid Build Coastguard Worker "-DOUTPUT=${_GC_OUTPUT}" 404*a67afe4dSAndroid Build Coastguard Worker -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake" 405*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS} 406*a67afe4dSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 407*a67afe4dSAndroid Build Coastguard Worker endfunction() 408*a67afe4dSAndroid Build Coastguard Worker 409*a67afe4dSAndroid Build Coastguard Worker # Generate .out from .c with awk 410*a67afe4dSAndroid Build Coastguard Worker # generate_out(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 411*a67afe4dSAndroid Build Coastguard Worker function(generate_out) 412*a67afe4dSAndroid Build Coastguard Worker set(options) 413*a67afe4dSAndroid Build Coastguard Worker set(oneValueArgs INPUT OUTPUT) 414*a67afe4dSAndroid Build Coastguard Worker set(multiValueArgs DEPENDS) 415*a67afe4dSAndroid Build Coastguard Worker cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 416*a67afe4dSAndroid Build Coastguard Worker if(NOT _GO_INPUT) 417*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "generate_out: Missing INPUT argument") 418*a67afe4dSAndroid Build Coastguard Worker endif() 419*a67afe4dSAndroid Build Coastguard Worker if(NOT _GO_OUTPUT) 420*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "generate_out: Missing OUTPUT argument") 421*a67afe4dSAndroid Build Coastguard Worker endif() 422*a67afe4dSAndroid Build Coastguard Worker 423*a67afe4dSAndroid Build Coastguard Worker add_custom_command(OUTPUT "${_GO_OUTPUT}" 424*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 425*a67afe4dSAndroid Build Coastguard Worker "-DINPUT=${_GO_INPUT}" 426*a67afe4dSAndroid Build Coastguard Worker "-DOUTPUT=${_GO_OUTPUT}" 427*a67afe4dSAndroid Build Coastguard Worker -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake" 428*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS} 429*a67afe4dSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 430*a67afe4dSAndroid Build Coastguard Worker endfunction() 431*a67afe4dSAndroid Build Coastguard Worker 432*a67afe4dSAndroid Build Coastguard Worker # Generate specific source file with awk 433*a67afe4dSAndroid Build Coastguard Worker # generate_source(OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 434*a67afe4dSAndroid Build Coastguard Worker function(generate_source) 435*a67afe4dSAndroid Build Coastguard Worker set(options) 436*a67afe4dSAndroid Build Coastguard Worker set(oneValueArgs OUTPUT) 437*a67afe4dSAndroid Build Coastguard Worker set(multiValueArgs DEPENDS) 438*a67afe4dSAndroid Build Coastguard Worker cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 439*a67afe4dSAndroid Build Coastguard Worker if(NOT _GSO_OUTPUT) 440*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "generate_source: Missing OUTPUT argument") 441*a67afe4dSAndroid Build Coastguard Worker endif() 442*a67afe4dSAndroid Build Coastguard Worker 443*a67afe4dSAndroid Build Coastguard Worker add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}" 444*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 445*a67afe4dSAndroid Build Coastguard Worker "-DOUTPUT=${_GSO_OUTPUT}" 446*a67afe4dSAndroid Build Coastguard Worker -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" 447*a67afe4dSAndroid Build Coastguard Worker DEPENDS ${_GSO_DEPENDS} 448*a67afe4dSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 449*a67afe4dSAndroid Build Coastguard Worker endfunction() 450*a67afe4dSAndroid Build Coastguard Worker 451*a67afe4dSAndroid Build Coastguard Worker # Copy file 452*a67afe4dSAndroid Build Coastguard Worker # generate_copy(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 453*a67afe4dSAndroid Build Coastguard Worker function(generate_copy) 454*a67afe4dSAndroid Build Coastguard Worker set(options) 455*a67afe4dSAndroid Build Coastguard Worker set(oneValueArgs INPUT OUTPUT) 456*a67afe4dSAndroid Build Coastguard Worker set(multiValueArgs DEPENDS) 457*a67afe4dSAndroid Build Coastguard Worker cmake_parse_arguments(_GCO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 458*a67afe4dSAndroid Build Coastguard Worker if(NOT _GCO_INPUT) 459*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "generate_copy: Missing INPUT argument") 460*a67afe4dSAndroid Build Coastguard Worker endif() 461*a67afe4dSAndroid Build Coastguard Worker if(NOT _GCO_OUTPUT) 462*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "generate_copy: Missing OUTPUT argument") 463*a67afe4dSAndroid Build Coastguard Worker endif() 464*a67afe4dSAndroid Build Coastguard Worker 465*a67afe4dSAndroid Build Coastguard Worker add_custom_command(OUTPUT "${_GCO_OUTPUT}" 466*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 467*a67afe4dSAndroid Build Coastguard Worker -E remove "${_GCO_OUTPUT}" 468*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 469*a67afe4dSAndroid Build Coastguard Worker -E copy "${_GCO_INPUT}" "${_GCO_OUTPUT}" 470*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${source}" ${_GCO_DEPENDS}) 471*a67afe4dSAndroid Build Coastguard Worker endfunction() 472*a67afe4dSAndroid Build Coastguard Worker 473*a67afe4dSAndroid Build Coastguard Worker # Generate scripts/pnglibconf.h 474*a67afe4dSAndroid Build Coastguard Worker generate_source(OUTPUT "scripts/pnglibconf.c" 475*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" 476*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk" 477*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") 478*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_scripts_pnglibconf_c 479*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c") 480*a67afe4dSAndroid Build Coastguard Worker 481*a67afe4dSAndroid Build Coastguard Worker # Generate pnglibconf.c 482*a67afe4dSAndroid Build Coastguard Worker generate_source(OUTPUT "pnglibconf.c" 483*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" 484*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk" 485*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") 486*a67afe4dSAndroid Build Coastguard Worker add_custom_target(pnglibconf_c 487*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c") 488*a67afe4dSAndroid Build Coastguard Worker 489*a67afe4dSAndroid Build Coastguard Worker if(PNG_PREFIX) 490*a67afe4dSAndroid Build Coastguard Worker set(PNGLIBCONF_H_EXTRA_DEPENDS 491*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" 492*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/scripts/macro.lst") 493*a67afe4dSAndroid Build Coastguard Worker set(PNGPREFIX_H_EXTRA_DEPENDS 494*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out") 495*a67afe4dSAndroid Build Coastguard Worker endif() 496*a67afe4dSAndroid Build Coastguard Worker 497*a67afe4dSAndroid Build Coastguard Worker generate_out(INPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" 498*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" 499*a67afe4dSAndroid Build Coastguard Worker DEPENDS pnglibconf_c) 500*a67afe4dSAndroid Build Coastguard Worker add_custom_target(pnglibconf_out 501*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") 502*a67afe4dSAndroid Build Coastguard Worker 503*a67afe4dSAndroid Build Coastguard Worker # Generate pnglibconf.h 504*a67afe4dSAndroid Build Coastguard Worker generate_source(OUTPUT "pnglibconf.h" 505*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out 506*a67afe4dSAndroid Build Coastguard Worker ${PNGLIBCONF_H_EXTRA_DEPENDS}) 507*a67afe4dSAndroid Build Coastguard Worker add_custom_target(pnglibconf_h 508*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") 509*a67afe4dSAndroid Build Coastguard Worker 510*a67afe4dSAndroid Build Coastguard Worker generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/intprefix.c" 511*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" 512*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) 513*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_scripts_intprefix_out 514*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out") 515*a67afe4dSAndroid Build Coastguard Worker 516*a67afe4dSAndroid Build Coastguard Worker generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/prefix.c" 517*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" 518*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 519*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 520*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out) 521*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_scripts_prefix_out 522*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out") 523*a67afe4dSAndroid Build Coastguard Worker 524*a67afe4dSAndroid Build Coastguard Worker # Generate pngprefix.h 525*a67afe4dSAndroid Build Coastguard Worker generate_source(OUTPUT "pngprefix.h" 526*a67afe4dSAndroid Build Coastguard Worker DEPENDS ${PNGPREFIX_H_EXTRA_DEPENDS}) 527*a67afe4dSAndroid Build Coastguard Worker add_custom_target(pngprefix_h 528*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") 529*a67afe4dSAndroid Build Coastguard Worker 530*a67afe4dSAndroid Build Coastguard Worker generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/sym.c" 531*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" 532*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) 533*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_scripts_sym_out 534*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out") 535*a67afe4dSAndroid Build Coastguard Worker 536*a67afe4dSAndroid Build Coastguard Worker generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.c" 537*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" 538*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 539*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 540*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt") 541*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_scripts_symbols_out 542*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out") 543*a67afe4dSAndroid Build Coastguard Worker 544*a67afe4dSAndroid Build Coastguard Worker generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/vers.c" 545*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" 546*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 547*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 548*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) 549*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_scripts_vers_out 550*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out") 551*a67afe4dSAndroid Build Coastguard Worker 552*a67afe4dSAndroid Build Coastguard Worker generate_chk(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" 553*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" 554*a67afe4dSAndroid Build Coastguard Worker DEPENDS png_scripts_symbols_out 555*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk" 556*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def") 557*a67afe4dSAndroid Build Coastguard Worker 558*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_scripts_symbols_chk 559*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk") 560*a67afe4dSAndroid Build Coastguard Worker 561*a67afe4dSAndroid Build Coastguard Worker generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" 562*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" 563*a67afe4dSAndroid Build Coastguard Worker DEPENDS png_scripts_sym_out) 564*a67afe4dSAndroid Build Coastguard Worker generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" 565*a67afe4dSAndroid Build Coastguard Worker OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" 566*a67afe4dSAndroid Build Coastguard Worker DEPENDS png_scripts_vers_out) 567*a67afe4dSAndroid Build Coastguard Worker 568*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_genvers 569*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") 570*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_gensym 571*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") 572*a67afe4dSAndroid Build Coastguard Worker 573*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_genprebuilt 574*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 575*a67afe4dSAndroid Build Coastguard Worker "-DOUTPUT=scripts/pnglibconf.h.prebuilt" 576*a67afe4dSAndroid Build Coastguard Worker -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" 577*a67afe4dSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 578*a67afe4dSAndroid Build Coastguard Worker 579*a67afe4dSAndroid Build Coastguard Worker # A single target handles generation of all generated files. 580*a67afe4dSAndroid Build Coastguard Worker add_custom_target(png_genfiles 581*a67afe4dSAndroid Build Coastguard Worker DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" png_gensym 582*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" png_genvers 583*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" pnglibconf_c 584*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h 585*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out 586*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h" pngprefix_h 587*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" png_scripts_intprefix_out 588*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c" png_scripts_pnglibconf_c 589*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" png_scripts_prefix_out 590*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" png_scripts_sym_out 591*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" png_scripts_symbols_chk 592*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" png_scripts_symbols_out 593*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" png_scripts_vers_out) 594*a67afe4dSAndroid Build Coastguard Workerendif(NOT AWK OR ANDROID OR IOS) 595*a67afe4dSAndroid Build Coastguard Worker 596*a67afe4dSAndroid Build Coastguard Worker# List the source code files. 597*a67afe4dSAndroid Build Coastguard Workerset(libpng_public_hdrs 598*a67afe4dSAndroid Build Coastguard Worker png.h 599*a67afe4dSAndroid Build Coastguard Worker pngconf.h 600*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" 601*a67afe4dSAndroid Build Coastguard Worker) 602*a67afe4dSAndroid Build Coastguard Workerset(libpng_private_hdrs 603*a67afe4dSAndroid Build Coastguard Worker pngpriv.h 604*a67afe4dSAndroid Build Coastguard Worker pngdebug.h 605*a67afe4dSAndroid Build Coastguard Worker pnginfo.h 606*a67afe4dSAndroid Build Coastguard Worker pngstruct.h 607*a67afe4dSAndroid Build Coastguard Worker) 608*a67afe4dSAndroid Build Coastguard Workerif(AWK AND NOT ANDROID AND NOT IOS) 609*a67afe4dSAndroid Build Coastguard Worker list(APPEND libpng_private_hdrs "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") 610*a67afe4dSAndroid Build Coastguard Workerendif() 611*a67afe4dSAndroid Build Coastguard Workerset(libpng_sources 612*a67afe4dSAndroid Build Coastguard Worker ${libpng_public_hdrs} 613*a67afe4dSAndroid Build Coastguard Worker ${libpng_private_hdrs} 614*a67afe4dSAndroid Build Coastguard Worker png.c 615*a67afe4dSAndroid Build Coastguard Worker pngerror.c 616*a67afe4dSAndroid Build Coastguard Worker pngget.c 617*a67afe4dSAndroid Build Coastguard Worker pngmem.c 618*a67afe4dSAndroid Build Coastguard Worker pngpread.c 619*a67afe4dSAndroid Build Coastguard Worker pngread.c 620*a67afe4dSAndroid Build Coastguard Worker pngrio.c 621*a67afe4dSAndroid Build Coastguard Worker pngrtran.c 622*a67afe4dSAndroid Build Coastguard Worker pngrutil.c 623*a67afe4dSAndroid Build Coastguard Worker pngset.c 624*a67afe4dSAndroid Build Coastguard Worker pngtrans.c 625*a67afe4dSAndroid Build Coastguard Worker pngwio.c 626*a67afe4dSAndroid Build Coastguard Worker pngwrite.c 627*a67afe4dSAndroid Build Coastguard Worker pngwtran.c 628*a67afe4dSAndroid Build Coastguard Worker pngwutil.c 629*a67afe4dSAndroid Build Coastguard Worker ${libpng_arm_sources} 630*a67afe4dSAndroid Build Coastguard Worker ${libpng_intel_sources} 631*a67afe4dSAndroid Build Coastguard Worker ${libpng_mips_sources} 632*a67afe4dSAndroid Build Coastguard Worker ${libpng_powerpc_sources} 633*a67afe4dSAndroid Build Coastguard Worker ${libpng_loongarch_sources} 634*a67afe4dSAndroid Build Coastguard Worker) 635*a67afe4dSAndroid Build Coastguard Workerset(pngtest_sources 636*a67afe4dSAndroid Build Coastguard Worker pngtest.c 637*a67afe4dSAndroid Build Coastguard Worker) 638*a67afe4dSAndroid Build Coastguard Workerset(pngvalid_sources 639*a67afe4dSAndroid Build Coastguard Worker contrib/libtests/pngvalid.c 640*a67afe4dSAndroid Build Coastguard Worker) 641*a67afe4dSAndroid Build Coastguard Workerset(pngstest_sources 642*a67afe4dSAndroid Build Coastguard Worker contrib/libtests/pngstest.c 643*a67afe4dSAndroid Build Coastguard Worker) 644*a67afe4dSAndroid Build Coastguard Workerset(pngunknown_sources 645*a67afe4dSAndroid Build Coastguard Worker contrib/libtests/pngunknown.c 646*a67afe4dSAndroid Build Coastguard Worker) 647*a67afe4dSAndroid Build Coastguard Workerset(pngimage_sources 648*a67afe4dSAndroid Build Coastguard Worker contrib/libtests/pngimage.c 649*a67afe4dSAndroid Build Coastguard Worker) 650*a67afe4dSAndroid Build Coastguard Workerset(pngfix_sources 651*a67afe4dSAndroid Build Coastguard Worker contrib/tools/pngfix.c 652*a67afe4dSAndroid Build Coastguard Worker) 653*a67afe4dSAndroid Build Coastguard Workerset(png_fix_itxt_sources 654*a67afe4dSAndroid Build Coastguard Worker contrib/tools/png-fix-itxt.c 655*a67afe4dSAndroid Build Coastguard Worker) 656*a67afe4dSAndroid Build Coastguard Worker 657*a67afe4dSAndroid Build Coastguard Workerif(MSVC OR (WIN32 AND (CMAKE_C_COMPILER_ID MATCHES "Clang"))) 658*a67afe4dSAndroid Build Coastguard Worker add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) 659*a67afe4dSAndroid Build Coastguard Worker add_definitions(-D_CRT_SECURE_NO_DEPRECATE) 660*a67afe4dSAndroid Build Coastguard Workerendif() 661*a67afe4dSAndroid Build Coastguard Worker 662*a67afe4dSAndroid Build Coastguard Workerif(PNG_DEBUG) 663*a67afe4dSAndroid Build Coastguard Worker add_definitions(-DPNG_DEBUG) 664*a67afe4dSAndroid Build Coastguard Workerendif() 665*a67afe4dSAndroid Build Coastguard Worker 666*a67afe4dSAndroid Build Coastguard Worker# Now build our targets. 667*a67afe4dSAndroid Build Coastguard Worker 668*a67afe4dSAndroid Build Coastguard Worker# Initialize the list of libpng library targets. 669*a67afe4dSAndroid Build Coastguard Workerset(PNG_LIBRARY_TARGETS "") 670*a67afe4dSAndroid Build Coastguard Worker 671*a67afe4dSAndroid Build Coastguard Worker# Initialize the libpng library file names. 672*a67afe4dSAndroid Build Coastguard Workerif(UNIX 673*a67afe4dSAndroid Build Coastguard Worker OR (WIN32 AND NOT CMAKE_SHARED_LIBRARY_PREFIX STREQUAL "") 674*a67afe4dSAndroid Build Coastguard Worker OR (WIN32 AND NOT CMAKE_STATIC_LIBRARY_PREFIX STREQUAL "")) 675*a67afe4dSAndroid Build Coastguard Worker # We are on a Unix or Unix-like toolchain like the GNU toolchain on Windows. 676*a67afe4dSAndroid Build Coastguard Worker # Library file names are expected to have an implicit prefix such as "lib". 677*a67afe4dSAndroid Build Coastguard Worker # Let CMake prepend and append its usual prefixes and suffixes by default. 678*a67afe4dSAndroid Build Coastguard Worker set(PNG_SHARED_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}") 679*a67afe4dSAndroid Build Coastguard Worker set(PNG_STATIC_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}") 680*a67afe4dSAndroid Build Coastguard Workerelse() 681*a67afe4dSAndroid Build Coastguard Worker # We are, most likely, on a Windows toolchain like MSVC, Clang on Windows, 682*a67afe4dSAndroid Build Coastguard Worker # Borland/Embarcadero, etc. We need to specify the "libpng" name explicitly. 683*a67afe4dSAndroid Build Coastguard Worker # We also need to use a custom suffix, in order to distinguish between the 684*a67afe4dSAndroid Build Coastguard Worker # shared import library name and the static library name. 685*a67afe4dSAndroid Build Coastguard Worker set(PNG_SHARED_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}") 686*a67afe4dSAndroid Build Coastguard Worker set(PNG_STATIC_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}_static") 687*a67afe4dSAndroid Build Coastguard Workerendif() 688*a67afe4dSAndroid Build Coastguard Worker 689*a67afe4dSAndroid Build Coastguard Workerif(PNG_SHARED) 690*a67afe4dSAndroid Build Coastguard Worker add_library(png_shared SHARED ${libpng_sources}) 691*a67afe4dSAndroid Build Coastguard Worker add_dependencies(png_shared png_genfiles) 692*a67afe4dSAndroid Build Coastguard Worker list(APPEND PNG_LIBRARY_TARGETS png_shared) 693*a67afe4dSAndroid Build Coastguard Worker set_target_properties(png_shared PROPERTIES 694*a67afe4dSAndroid Build Coastguard Worker OUTPUT_NAME "${PNG_SHARED_OUTPUT_NAME}" 695*a67afe4dSAndroid Build Coastguard Worker DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}" 696*a67afe4dSAndroid Build Coastguard Worker VERSION "${PNGLIB_SHARED_VERSION}" 697*a67afe4dSAndroid Build Coastguard Worker SOVERSION "${PNGLIB_ABI_VERSION}") 698*a67afe4dSAndroid Build Coastguard Worker if(UNIX AND AWK) 699*a67afe4dSAndroid Build Coastguard Worker if(HAVE_LD_VERSION_SCRIPT) 700*a67afe4dSAndroid Build Coastguard Worker set_target_properties(png_shared PROPERTIES 701*a67afe4dSAndroid Build Coastguard Worker LINK_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") 702*a67afe4dSAndroid Build Coastguard Worker elseif(HAVE_SOLARIS_LD_VERSION_SCRIPT) 703*a67afe4dSAndroid Build Coastguard Worker set_target_properties(png_shared PROPERTIES 704*a67afe4dSAndroid Build Coastguard Worker LINK_FLAGS "-Wl,-M -Wl,'${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") 705*a67afe4dSAndroid Build Coastguard Worker endif() 706*a67afe4dSAndroid Build Coastguard Worker endif() 707*a67afe4dSAndroid Build Coastguard Worker if(APPLE) 708*a67afe4dSAndroid Build Coastguard Worker # Avoid CMake's implicit compile definition "png_shared_EXPORTS". 709*a67afe4dSAndroid Build Coastguard Worker set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL "") 710*a67afe4dSAndroid Build Coastguard Worker elseif(WIN32) 711*a67afe4dSAndroid Build Coastguard Worker # Use the explicit compile definition "PNG_BUILD_DLL" for Windows DLLs. 712*a67afe4dSAndroid Build Coastguard Worker set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL) 713*a67afe4dSAndroid Build Coastguard Worker endif() 714*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_shared 715*a67afe4dSAndroid Build Coastguard Worker PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) 716*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_shared 717*a67afe4dSAndroid Build Coastguard Worker PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>) 718*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_shared SYSTEM 719*a67afe4dSAndroid Build Coastguard Worker INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}>) 720*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(png_shared PUBLIC ZLIB::ZLIB ${M_LIBRARY}) 721*a67afe4dSAndroid Build Coastguard Workerendif() 722*a67afe4dSAndroid Build Coastguard Worker 723*a67afe4dSAndroid Build Coastguard Workerif(PNG_STATIC) 724*a67afe4dSAndroid Build Coastguard Worker add_library(png_static STATIC ${libpng_sources}) 725*a67afe4dSAndroid Build Coastguard Worker add_dependencies(png_static png_genfiles) 726*a67afe4dSAndroid Build Coastguard Worker list(APPEND PNG_LIBRARY_TARGETS png_static) 727*a67afe4dSAndroid Build Coastguard Worker set_target_properties(png_static PROPERTIES 728*a67afe4dSAndroid Build Coastguard Worker OUTPUT_NAME "${PNG_STATIC_OUTPUT_NAME}" 729*a67afe4dSAndroid Build Coastguard Worker DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}") 730*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_static 731*a67afe4dSAndroid Build Coastguard Worker PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) 732*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_static 733*a67afe4dSAndroid Build Coastguard Worker PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>) 734*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_static SYSTEM 735*a67afe4dSAndroid Build Coastguard Worker INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}>) 736*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(png_static PUBLIC ZLIB::ZLIB ${M_LIBRARY}) 737*a67afe4dSAndroid Build Coastguard Workerendif() 738*a67afe4dSAndroid Build Coastguard Worker 739*a67afe4dSAndroid Build Coastguard Workerif(PNG_FRAMEWORK AND NOT APPLE) 740*a67afe4dSAndroid Build Coastguard Worker message(AUTHOR_WARNING 741*a67afe4dSAndroid Build Coastguard Worker "Setting PNG_FRAMEWORK to OFF, as it only applies to Apple systems") 742*a67afe4dSAndroid Build Coastguard Worker set(PNG_FRAMEWORK OFF) 743*a67afe4dSAndroid Build Coastguard Workerendif() 744*a67afe4dSAndroid Build Coastguard Worker 745*a67afe4dSAndroid Build Coastguard Workerif(PNG_FRAMEWORK) 746*a67afe4dSAndroid Build Coastguard Worker add_library(png_framework SHARED ${libpng_sources}) 747*a67afe4dSAndroid Build Coastguard Worker add_dependencies(png_framework png_genfiles) 748*a67afe4dSAndroid Build Coastguard Worker list(APPEND PNG_LIBRARY_TARGETS png_framework) 749*a67afe4dSAndroid Build Coastguard Worker set_target_properties(png_framework PROPERTIES 750*a67afe4dSAndroid Build Coastguard Worker FRAMEWORK TRUE 751*a67afe4dSAndroid Build Coastguard Worker FRAMEWORK_VERSION "${PNGLIB_VERSION}" 752*a67afe4dSAndroid Build Coastguard Worker MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${PNGLIB_MAJOR}.${PNGLIB_MINOR}" 753*a67afe4dSAndroid Build Coastguard Worker MACOSX_FRAMEWORK_BUNDLE_VERSION "${PNGLIB_VERSION}" 754*a67afe4dSAndroid Build Coastguard Worker MACOSX_FRAMEWORK_IDENTIFIER "org.libpng.libpng" 755*a67afe4dSAndroid Build Coastguard Worker XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" 756*a67afe4dSAndroid Build Coastguard Worker PUBLIC_HEADER "${libpng_public_hdrs}" 757*a67afe4dSAndroid Build Coastguard Worker OUTPUT_NAME "png" 758*a67afe4dSAndroid Build Coastguard Worker DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}") 759*a67afe4dSAndroid Build Coastguard Worker # Avoid CMake's implicit compile definition "-Dpng_framework_EXPORTS". 760*a67afe4dSAndroid Build Coastguard Worker set_target_properties(png_framework PROPERTIES DEFINE_SYMBOL "") 761*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_framework 762*a67afe4dSAndroid Build Coastguard Worker PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) 763*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_framework 764*a67afe4dSAndroid Build Coastguard Worker PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>) 765*a67afe4dSAndroid Build Coastguard Worker target_include_directories(png_framework SYSTEM 766*a67afe4dSAndroid Build Coastguard Worker INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}>) 767*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(png_framework PUBLIC ZLIB::ZLIB ${M_LIBRARY}) 768*a67afe4dSAndroid Build Coastguard Workerendif() 769*a67afe4dSAndroid Build Coastguard Worker 770*a67afe4dSAndroid Build Coastguard Workerif(NOT PNG_LIBRARY_TARGETS) 771*a67afe4dSAndroid Build Coastguard Worker message(SEND_ERROR "No library variant selected to build. " 772*a67afe4dSAndroid Build Coastguard Worker "Please enable at least one of the following options: " 773*a67afe4dSAndroid Build Coastguard Worker "PNG_SHARED, PNG_STATIC, PNG_FRAMEWORK") 774*a67afe4dSAndroid Build Coastguard Workerendif() 775*a67afe4dSAndroid Build Coastguard Worker 776*a67afe4dSAndroid Build Coastguard Workerif(PNG_TESTS AND PNG_SHARED) 777*a67afe4dSAndroid Build Coastguard Worker enable_testing() 778*a67afe4dSAndroid Build Coastguard Worker 779*a67afe4dSAndroid Build Coastguard Worker function(png_add_test) 780*a67afe4dSAndroid Build Coastguard Worker set(options) 781*a67afe4dSAndroid Build Coastguard Worker set(oneValueArgs NAME COMMAND) 782*a67afe4dSAndroid Build Coastguard Worker set(multiValueArgs OPTIONS FILES) 783*a67afe4dSAndroid Build Coastguard Worker cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 784*a67afe4dSAndroid Build Coastguard Worker if(NOT _PAT_NAME) 785*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "png_add_test: Missing NAME argument") 786*a67afe4dSAndroid Build Coastguard Worker endif() 787*a67afe4dSAndroid Build Coastguard Worker if(NOT _PAT_COMMAND) 788*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "png_add_test: Missing COMMAND argument") 789*a67afe4dSAndroid Build Coastguard Worker endif() 790*a67afe4dSAndroid Build Coastguard Worker 791*a67afe4dSAndroid Build Coastguard Worker set(TEST_OPTIONS "${_PAT_OPTIONS}") 792*a67afe4dSAndroid Build Coastguard Worker set(TEST_FILES "${_PAT_FILES}") 793*a67afe4dSAndroid Build Coastguard Worker 794*a67afe4dSAndroid Build Coastguard Worker configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test.cmake.in" 795*a67afe4dSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake" 796*a67afe4dSAndroid Build Coastguard Worker @ONLY) 797*a67afe4dSAndroid Build Coastguard Worker add_test(NAME "${_PAT_NAME}" 798*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 799*a67afe4dSAndroid Build Coastguard Worker "-DLIBPNG=$<TARGET_FILE:png_shared>" 800*a67afe4dSAndroid Build Coastguard Worker "-DTEST_COMMAND=$<TARGET_FILE:${_PAT_COMMAND}>" 801*a67afe4dSAndroid Build Coastguard Worker -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") 802*a67afe4dSAndroid Build Coastguard Worker endfunction() 803*a67afe4dSAndroid Build Coastguard Worker 804*a67afe4dSAndroid Build Coastguard Worker # Find test PNG files by globbing, but sort lists to ensure 805*a67afe4dSAndroid Build Coastguard Worker # consistency between different filesystems. 806*a67afe4dSAndroid Build Coastguard Worker file(GLOB PNGSUITE_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/*.png") 807*a67afe4dSAndroid Build Coastguard Worker list(SORT PNGSUITE_PNGS) 808*a67afe4dSAndroid Build Coastguard Worker file(GLOB TEST_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/testpngs/*.png") 809*a67afe4dSAndroid Build Coastguard Worker list(SORT TEST_PNGS) 810*a67afe4dSAndroid Build Coastguard Worker 811*a67afe4dSAndroid Build Coastguard Worker set(PNGTEST_PNG "${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png") 812*a67afe4dSAndroid Build Coastguard Worker 813*a67afe4dSAndroid Build Coastguard Worker add_executable(pngtest ${pngtest_sources}) 814*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(pngtest PRIVATE png_shared) 815*a67afe4dSAndroid Build Coastguard Worker 816*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngtest 817*a67afe4dSAndroid Build Coastguard Worker COMMAND pngtest 818*a67afe4dSAndroid Build Coastguard Worker FILES "${PNGTEST_PNG}") 819*a67afe4dSAndroid Build Coastguard Worker 820*a67afe4dSAndroid Build Coastguard Worker add_executable(pngvalid ${pngvalid_sources}) 821*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(pngvalid PRIVATE png_shared) 822*a67afe4dSAndroid Build Coastguard Worker 823*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-16-to-8 824*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 825*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-16-to-8) 826*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-alpha-mode 827*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 828*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-alpha-mode) 829*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-background 830*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 831*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-background) 832*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-expand16-alpha-mode 833*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 834*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-alpha-mode --expand16) 835*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-expand16-background 836*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 837*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-background --expand16) 838*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-expand16-transform 839*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 840*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-transform --expand16) 841*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-sbit 842*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 843*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-sbit) 844*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-threshold 845*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 846*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-threshold) 847*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-gamma-transform 848*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 849*a67afe4dSAndroid Build Coastguard Worker OPTIONS --gamma-transform) 850*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-progressive-interlace-standard 851*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 852*a67afe4dSAndroid Build Coastguard Worker OPTIONS --standard --progressive-read --interlace) 853*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-progressive-size 854*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 855*a67afe4dSAndroid Build Coastguard Worker OPTIONS --size --progressive-read) 856*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-progressive-standard 857*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 858*a67afe4dSAndroid Build Coastguard Worker OPTIONS --standard --progressive-read) 859*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-standard 860*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 861*a67afe4dSAndroid Build Coastguard Worker OPTIONS --standard) 862*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngvalid-transform 863*a67afe4dSAndroid Build Coastguard Worker COMMAND pngvalid 864*a67afe4dSAndroid Build Coastguard Worker OPTIONS --transform) 865*a67afe4dSAndroid Build Coastguard Worker 866*a67afe4dSAndroid Build Coastguard Worker add_executable(pngstest ${pngstest_sources}) 867*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(pngstest PRIVATE png_shared) 868*a67afe4dSAndroid Build Coastguard Worker 869*a67afe4dSAndroid Build Coastguard Worker foreach(gamma_type 1.8 linear none sRGB) 870*a67afe4dSAndroid Build Coastguard Worker foreach(alpha_type none alpha) 871*a67afe4dSAndroid Build Coastguard Worker set(PNGSTEST_FILES) 872*a67afe4dSAndroid Build Coastguard Worker foreach(test_png ${TEST_PNGS}) 873*a67afe4dSAndroid Build Coastguard Worker string(REGEX MATCH "-linear[-.]" TEST_PNG_LINEAR "${test_png}") 874*a67afe4dSAndroid Build Coastguard Worker string(REGEX MATCH "-sRGB[-.]" TEST_PNG_SRGB "${test_png}") 875*a67afe4dSAndroid Build Coastguard Worker string(REGEX MATCH "-1.8[-.]" TEST_PNG_G18 "${test_png}") 876*a67afe4dSAndroid Build Coastguard Worker string(REGEX MATCH "-alpha-" TEST_PNG_ALPHA "${test_png}") 877*a67afe4dSAndroid Build Coastguard Worker 878*a67afe4dSAndroid Build Coastguard Worker set(TEST_PNG_VALID TRUE) 879*a67afe4dSAndroid Build Coastguard Worker 880*a67afe4dSAndroid Build Coastguard Worker if(TEST_PNG_ALPHA) 881*a67afe4dSAndroid Build Coastguard Worker if(NOT alpha_type STREQUAL "alpha") 882*a67afe4dSAndroid Build Coastguard Worker set(TEST_PNG_VALID FALSE) 883*a67afe4dSAndroid Build Coastguard Worker endif() 884*a67afe4dSAndroid Build Coastguard Worker else() 885*a67afe4dSAndroid Build Coastguard Worker if(alpha_type STREQUAL "alpha") 886*a67afe4dSAndroid Build Coastguard Worker set(TEST_PNG_VALID FALSE) 887*a67afe4dSAndroid Build Coastguard Worker endif() 888*a67afe4dSAndroid Build Coastguard Worker endif() 889*a67afe4dSAndroid Build Coastguard Worker 890*a67afe4dSAndroid Build Coastguard Worker if(TEST_PNG_LINEAR) 891*a67afe4dSAndroid Build Coastguard Worker if(NOT gamma_type STREQUAL "linear") 892*a67afe4dSAndroid Build Coastguard Worker set(TEST_PNG_VALID FALSE) 893*a67afe4dSAndroid Build Coastguard Worker endif() 894*a67afe4dSAndroid Build Coastguard Worker elseif(TEST_PNG_SRGB) 895*a67afe4dSAndroid Build Coastguard Worker if(NOT gamma_type STREQUAL "sRGB") 896*a67afe4dSAndroid Build Coastguard Worker set(TEST_PNG_VALID FALSE) 897*a67afe4dSAndroid Build Coastguard Worker endif() 898*a67afe4dSAndroid Build Coastguard Worker elseif(TEST_PNG_G18) 899*a67afe4dSAndroid Build Coastguard Worker if(NOT gamma_type STREQUAL "1.8") 900*a67afe4dSAndroid Build Coastguard Worker set(TEST_PNG_VALID FALSE) 901*a67afe4dSAndroid Build Coastguard Worker endif() 902*a67afe4dSAndroid Build Coastguard Worker else() 903*a67afe4dSAndroid Build Coastguard Worker if(NOT gamma_type STREQUAL "none") 904*a67afe4dSAndroid Build Coastguard Worker set(TEST_PNG_VALID FALSE) 905*a67afe4dSAndroid Build Coastguard Worker endif() 906*a67afe4dSAndroid Build Coastguard Worker endif() 907*a67afe4dSAndroid Build Coastguard Worker 908*a67afe4dSAndroid Build Coastguard Worker if(TEST_PNG_VALID) 909*a67afe4dSAndroid Build Coastguard Worker list(APPEND PNGSTEST_FILES "${test_png}") 910*a67afe4dSAndroid Build Coastguard Worker endif() 911*a67afe4dSAndroid Build Coastguard Worker endforeach() 912*a67afe4dSAndroid Build Coastguard Worker # Should already be sorted, but sort anyway to be certain. 913*a67afe4dSAndroid Build Coastguard Worker list(SORT PNGSTEST_FILES) 914*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngstest-${gamma_type}-${alpha_type} 915*a67afe4dSAndroid Build Coastguard Worker COMMAND pngstest 916*a67afe4dSAndroid Build Coastguard Worker OPTIONS --tmpfile "${gamma_type}-${alpha_type}-" --log 917*a67afe4dSAndroid Build Coastguard Worker FILES ${PNGSTEST_FILES}) 918*a67afe4dSAndroid Build Coastguard Worker endforeach() 919*a67afe4dSAndroid Build Coastguard Worker endforeach() 920*a67afe4dSAndroid Build Coastguard Worker 921*a67afe4dSAndroid Build Coastguard Worker add_executable(pngunknown ${pngunknown_sources}) 922*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(pngunknown PRIVATE png_shared) 923*a67afe4dSAndroid Build Coastguard Worker 924*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngunknown-discard 925*a67afe4dSAndroid Build Coastguard Worker COMMAND pngunknown 926*a67afe4dSAndroid Build Coastguard Worker OPTIONS --strict default=discard 927*a67afe4dSAndroid Build Coastguard Worker FILES "${PNGTEST_PNG}") 928*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngunknown-IDAT 929*a67afe4dSAndroid Build Coastguard Worker COMMAND pngunknown 930*a67afe4dSAndroid Build Coastguard Worker OPTIONS --strict default=discard IDAT=save 931*a67afe4dSAndroid Build Coastguard Worker FILES "${PNGTEST_PNG}") 932*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngunknown-if-safe 933*a67afe4dSAndroid Build Coastguard Worker COMMAND pngunknown 934*a67afe4dSAndroid Build Coastguard Worker OPTIONS --strict default=if-safe 935*a67afe4dSAndroid Build Coastguard Worker FILES "${PNGTEST_PNG}") 936*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngunknown-sAPI 937*a67afe4dSAndroid Build Coastguard Worker COMMAND pngunknown 938*a67afe4dSAndroid Build Coastguard Worker OPTIONS --strict bKGD=save cHRM=save gAMA=save all=discard iCCP=save sBIT=save sRGB=save 939*a67afe4dSAndroid Build Coastguard Worker FILES "${PNGTEST_PNG}") 940*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngunknown-save 941*a67afe4dSAndroid Build Coastguard Worker COMMAND pngunknown 942*a67afe4dSAndroid Build Coastguard Worker OPTIONS --strict default=save 943*a67afe4dSAndroid Build Coastguard Worker FILES "${PNGTEST_PNG}") 944*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngunknown-sTER 945*a67afe4dSAndroid Build Coastguard Worker COMMAND pngunknown 946*a67afe4dSAndroid Build Coastguard Worker OPTIONS --strict sTER=if-safe 947*a67afe4dSAndroid Build Coastguard Worker FILES "${PNGTEST_PNG}") 948*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngunknown-vpAg 949*a67afe4dSAndroid Build Coastguard Worker COMMAND pngunknown 950*a67afe4dSAndroid Build Coastguard Worker OPTIONS --strict vpAg=if-safe 951*a67afe4dSAndroid Build Coastguard Worker FILES "${PNGTEST_PNG}") 952*a67afe4dSAndroid Build Coastguard Worker 953*a67afe4dSAndroid Build Coastguard Worker add_executable(pngimage ${pngimage_sources}) 954*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(pngimage PRIVATE png_shared) 955*a67afe4dSAndroid Build Coastguard Worker 956*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngimage-quick 957*a67afe4dSAndroid Build Coastguard Worker COMMAND pngimage 958*a67afe4dSAndroid Build Coastguard Worker OPTIONS --list-combos --log 959*a67afe4dSAndroid Build Coastguard Worker FILES ${PNGSUITE_PNGS}) 960*a67afe4dSAndroid Build Coastguard Worker png_add_test(NAME pngimage-full 961*a67afe4dSAndroid Build Coastguard Worker COMMAND pngimage 962*a67afe4dSAndroid Build Coastguard Worker OPTIONS --exhaustive --list-combos --log 963*a67afe4dSAndroid Build Coastguard Worker FILES ${PNGSUITE_PNGS}) 964*a67afe4dSAndroid Build Coastguard Workerendif() 965*a67afe4dSAndroid Build Coastguard Worker 966*a67afe4dSAndroid Build Coastguard Workerif(PNG_SHARED AND PNG_TOOLS) 967*a67afe4dSAndroid Build Coastguard Worker add_executable(pngfix ${pngfix_sources}) 968*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(pngfix PRIVATE png_shared) 969*a67afe4dSAndroid Build Coastguard Worker set(PNG_BIN_TARGETS pngfix) 970*a67afe4dSAndroid Build Coastguard Worker 971*a67afe4dSAndroid Build Coastguard Worker add_executable(png-fix-itxt ${png_fix_itxt_sources}) 972*a67afe4dSAndroid Build Coastguard Worker target_link_libraries(png-fix-itxt PRIVATE ZLIB::ZLIB ${M_LIBRARY}) 973*a67afe4dSAndroid Build Coastguard Worker list(APPEND PNG_BIN_TARGETS png-fix-itxt) 974*a67afe4dSAndroid Build Coastguard Workerendif() 975*a67afe4dSAndroid Build Coastguard Worker 976*a67afe4dSAndroid Build Coastguard Worker# Create a symlink from src to dest (if possible), or, alternatively, 977*a67afe4dSAndroid Build Coastguard Worker# copy src to dest if different. 978*a67afe4dSAndroid Build Coastguard Workerfunction(create_symlink DEST_FILE) 979*a67afe4dSAndroid Build Coastguard Worker cmake_parse_arguments(_SYM "" "FILE;TARGET" "" ${ARGN}) 980*a67afe4dSAndroid Build Coastguard Worker if(NOT _SYM_FILE AND NOT _SYM_TARGET) 981*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "create_symlink: Missing FILE or TARGET argument") 982*a67afe4dSAndroid Build Coastguard Worker endif() 983*a67afe4dSAndroid Build Coastguard Worker if(_SYM_FILE AND _SYM_TARGET) 984*a67afe4dSAndroid Build Coastguard Worker message(FATAL_ERROR "create_symlink: " 985*a67afe4dSAndroid Build Coastguard Worker "The arguments FILE (${_SYM_FILE}) and TARGET (${_SYM_TARGET}) " 986*a67afe4dSAndroid Build Coastguard Worker "are mutually-exclusive") 987*a67afe4dSAndroid Build Coastguard Worker endif() 988*a67afe4dSAndroid Build Coastguard Worker 989*a67afe4dSAndroid Build Coastguard Worker if(_SYM_FILE) 990*a67afe4dSAndroid Build Coastguard Worker # If we don't need to symlink something that's coming from a build target, 991*a67afe4dSAndroid Build Coastguard Worker # we can go ahead and symlink/copy at configure time. 992*a67afe4dSAndroid Build Coastguard Worker if(CMAKE_HOST_WIN32 AND NOT CYGWIN) 993*a67afe4dSAndroid Build Coastguard Worker execute_process(COMMAND "${CMAKE_COMMAND}" 994*a67afe4dSAndroid Build Coastguard Worker -E copy_if_different 995*a67afe4dSAndroid Build Coastguard Worker ${_SYM_FILE} ${DEST_FILE} 996*a67afe4dSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 997*a67afe4dSAndroid Build Coastguard Worker else() 998*a67afe4dSAndroid Build Coastguard Worker execute_process(COMMAND "${CMAKE_COMMAND}" 999*a67afe4dSAndroid Build Coastguard Worker -E create_symlink 1000*a67afe4dSAndroid Build Coastguard Worker ${_SYM_FILE} ${DEST_FILE} 1001*a67afe4dSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 1002*a67afe4dSAndroid Build Coastguard Worker endif() 1003*a67afe4dSAndroid Build Coastguard Worker endif() 1004*a67afe4dSAndroid Build Coastguard Worker 1005*a67afe4dSAndroid Build Coastguard Worker if(_SYM_TARGET) 1006*a67afe4dSAndroid Build Coastguard Worker # We need to use generator expressions, which can be a bit tricky. 1007*a67afe4dSAndroid Build Coastguard Worker # For simplicity, make the symlink a POST_BUILD step, and use the TARGET 1008*a67afe4dSAndroid Build Coastguard Worker # signature of add_custom_command. 1009*a67afe4dSAndroid Build Coastguard Worker if(CMAKE_HOST_WIN32 AND NOT CYGWIN) 1010*a67afe4dSAndroid Build Coastguard Worker add_custom_command(TARGET ${_SYM_TARGET} 1011*a67afe4dSAndroid Build Coastguard Worker POST_BUILD 1012*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 1013*a67afe4dSAndroid Build Coastguard Worker -E copy_if_different 1014*a67afe4dSAndroid Build Coastguard Worker $<TARGET_LINKER_FILE_DIR:${_SYM_TARGET}>/$<TARGET_LINKER_FILE_NAME:${_SYM_TARGET}> 1015*a67afe4dSAndroid Build Coastguard Worker $<TARGET_LINKER_FILE_DIR:${_SYM_TARGET}>/${DEST_FILE}) 1016*a67afe4dSAndroid Build Coastguard Worker else() 1017*a67afe4dSAndroid Build Coastguard Worker add_custom_command(TARGET ${_SYM_TARGET} 1018*a67afe4dSAndroid Build Coastguard Worker POST_BUILD 1019*a67afe4dSAndroid Build Coastguard Worker COMMAND "${CMAKE_COMMAND}" 1020*a67afe4dSAndroid Build Coastguard Worker -E create_symlink 1021*a67afe4dSAndroid Build Coastguard Worker $<TARGET_LINKER_FILE_NAME:${_SYM_TARGET}> 1022*a67afe4dSAndroid Build Coastguard Worker $<TARGET_LINKER_FILE_DIR:${_SYM_TARGET}>/${DEST_FILE}) 1023*a67afe4dSAndroid Build Coastguard Worker endif() 1024*a67afe4dSAndroid Build Coastguard Worker endif() 1025*a67afe4dSAndroid Build Coastguard Workerendfunction() 1026*a67afe4dSAndroid Build Coastguard Worker 1027*a67afe4dSAndroid Build Coastguard Worker# Create source generation scripts. 1028*a67afe4dSAndroid Build Coastguard Workerconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/genchk.cmake.in 1029*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake 1030*a67afe4dSAndroid Build Coastguard Worker @ONLY) 1031*a67afe4dSAndroid Build Coastguard Workerconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/genout.cmake.in 1032*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake 1033*a67afe4dSAndroid Build Coastguard Worker @ONLY) 1034*a67afe4dSAndroid Build Coastguard Workerconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/gensrc.cmake.in 1035*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake 1036*a67afe4dSAndroid Build Coastguard Worker @ONLY) 1037*a67afe4dSAndroid Build Coastguard Worker 1038*a67afe4dSAndroid Build Coastguard Worker# libpng is a library so default to 'lib' 1039*a67afe4dSAndroid Build Coastguard Workerif(NOT DEFINED CMAKE_INSTALL_LIBDIR) 1040*a67afe4dSAndroid Build Coastguard Worker set(CMAKE_INSTALL_LIBDIR lib) 1041*a67afe4dSAndroid Build Coastguard Workerendif() 1042*a67afe4dSAndroid Build Coastguard Worker 1043*a67afe4dSAndroid Build Coastguard Worker# Create pkgconfig files. 1044*a67afe4dSAndroid Build Coastguard Worker# We use the same files like ./configure, so we have to set its vars. 1045*a67afe4dSAndroid Build Coastguard Worker# Only do this on Windows for Cygwin - the files don't make much sense 1046*a67afe4dSAndroid Build Coastguard Worker# outside of a UNIX look-alike. 1047*a67afe4dSAndroid Build Coastguard Workerif(NOT WIN32 OR CYGWIN OR MINGW) 1048*a67afe4dSAndroid Build Coastguard Worker set(prefix ${CMAKE_INSTALL_PREFIX}) 1049*a67afe4dSAndroid Build Coastguard Worker set(exec_prefix ${CMAKE_INSTALL_PREFIX}) 1050*a67afe4dSAndroid Build Coastguard Worker set(libdir ${CMAKE_INSTALL_FULL_LIBDIR}) 1051*a67afe4dSAndroid Build Coastguard Worker set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR}) 1052*a67afe4dSAndroid Build Coastguard Worker set(LIBS "-lz -lm") 1053*a67afe4dSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in 1054*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc 1055*a67afe4dSAndroid Build Coastguard Worker @ONLY) 1056*a67afe4dSAndroid Build Coastguard Worker create_symlink(libpng.pc FILE libpng${PNGLIB_ABI_VERSION}.pc) 1057*a67afe4dSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in 1058*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config 1059*a67afe4dSAndroid Build Coastguard Worker @ONLY) 1060*a67afe4dSAndroid Build Coastguard Worker create_symlink(libpng-config FILE libpng${PNGLIB_ABI_VERSION}-config) 1061*a67afe4dSAndroid Build Coastguard Workerendif() 1062*a67afe4dSAndroid Build Coastguard Worker 1063*a67afe4dSAndroid Build Coastguard Worker# Install. 1064*a67afe4dSAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) 1065*a67afe4dSAndroid Build Coastguard Worker install(TARGETS ${PNG_LIBRARY_TARGETS} 1066*a67afe4dSAndroid Build Coastguard Worker EXPORT libpng 1067*a67afe4dSAndroid Build Coastguard Worker RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 1068*a67afe4dSAndroid Build Coastguard Worker LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 1069*a67afe4dSAndroid Build Coastguard Worker ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 1070*a67afe4dSAndroid Build Coastguard Worker FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) 1071*a67afe4dSAndroid Build Coastguard Worker 1072*a67afe4dSAndroid Build Coastguard Worker if(PNG_SHARED) 1073*a67afe4dSAndroid Build Coastguard Worker # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin 1074*a67afe4dSAndroid Build Coastguard Worker if(NOT WIN32 OR CYGWIN OR MINGW) 1075*a67afe4dSAndroid Build Coastguard Worker create_symlink(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png_shared) 1076*a67afe4dSAndroid Build Coastguard Worker install(FILES $<TARGET_LINKER_FILE_DIR:png_shared>/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} 1077*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_LIBDIR}) 1078*a67afe4dSAndroid Build Coastguard Worker endif() 1079*a67afe4dSAndroid Build Coastguard Worker endif() 1080*a67afe4dSAndroid Build Coastguard Worker 1081*a67afe4dSAndroid Build Coastguard Worker if(PNG_STATIC) 1082*a67afe4dSAndroid Build Coastguard Worker if(NOT WIN32 OR CYGWIN OR MINGW) 1083*a67afe4dSAndroid Build Coastguard Worker create_symlink(libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static) 1084*a67afe4dSAndroid Build Coastguard Worker install(FILES $<TARGET_LINKER_FILE_DIR:png_static>/libpng${CMAKE_STATIC_LIBRARY_SUFFIX} 1085*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_LIBDIR}) 1086*a67afe4dSAndroid Build Coastguard Worker endif() 1087*a67afe4dSAndroid Build Coastguard Worker endif() 1088*a67afe4dSAndroid Build Coastguard Workerendif() 1089*a67afe4dSAndroid Build Coastguard Worker 1090*a67afe4dSAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL) 1091*a67afe4dSAndroid Build Coastguard Worker install(FILES ${libpng_public_hdrs} 1092*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 1093*a67afe4dSAndroid Build Coastguard Worker install(FILES ${libpng_public_hdrs} 1094*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}) 1095*a67afe4dSAndroid Build Coastguard Workerendif() 1096*a67afe4dSAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL) 1097*a67afe4dSAndroid Build Coastguard Worker if(NOT WIN32 OR CYGWIN OR MINGW) 1098*a67afe4dSAndroid Build Coastguard Worker install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config 1099*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_BINDIR}) 1100*a67afe4dSAndroid Build Coastguard Worker install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config 1101*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_BINDIR}) 1102*a67afe4dSAndroid Build Coastguard Worker endif() 1103*a67afe4dSAndroid Build Coastguard Workerendif() 1104*a67afe4dSAndroid Build Coastguard Worker 1105*a67afe4dSAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL) 1106*a67afe4dSAndroid Build Coastguard Worker install(TARGETS ${PNG_BIN_TARGETS} 1107*a67afe4dSAndroid Build Coastguard Worker RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 1108*a67afe4dSAndroid Build Coastguard Workerendif() 1109*a67afe4dSAndroid Build Coastguard Worker 1110*a67afe4dSAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL) 1111*a67afe4dSAndroid Build Coastguard Worker # Install the man pages. 1112*a67afe4dSAndroid Build Coastguard Worker install(FILES libpng.3 libpngpf.3 1113*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_MANDIR}/man3) 1114*a67afe4dSAndroid Build Coastguard Worker install(FILES png.5 1115*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_MANDIR}/man5) 1116*a67afe4dSAndroid Build Coastguard Worker # Install the pkg-config files. 1117*a67afe4dSAndroid Build Coastguard Worker if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW) 1118*a67afe4dSAndroid Build Coastguard Worker install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc 1119*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) 1120*a67afe4dSAndroid Build Coastguard Worker install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config 1121*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_BINDIR}) 1122*a67afe4dSAndroid Build Coastguard Worker install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc 1123*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) 1124*a67afe4dSAndroid Build Coastguard Worker install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config 1125*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_BINDIR}) 1126*a67afe4dSAndroid Build Coastguard Worker endif() 1127*a67afe4dSAndroid Build Coastguard Workerendif() 1128*a67afe4dSAndroid Build Coastguard Worker 1129*a67afe4dSAndroid Build Coastguard Worker# Create an export file that CMake users can include() to import our targets. 1130*a67afe4dSAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL) 1131*a67afe4dSAndroid Build Coastguard Worker install(EXPORT libpng 1132*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_LIBDIR}/libpng 1133*a67afe4dSAndroid Build Coastguard Worker FILE libpng${PNGLIB_ABI_VERSION}.cmake) 1134*a67afe4dSAndroid Build Coastguard Workerendif() 1135*a67afe4dSAndroid Build Coastguard Worker 1136*a67afe4dSAndroid Build Coastguard Worker# Create a CMake Config File that can be used via find_package(PNG CONFIG) 1137*a67afe4dSAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_CONFIG_FILE AND NOT SKIP_INSTALL_ALL) 1138*a67afe4dSAndroid Build Coastguard Worker install(TARGETS ${PNG_LIBRARY_TARGETS} 1139*a67afe4dSAndroid Build Coastguard Worker EXPORT PNGTargets 1140*a67afe4dSAndroid Build Coastguard Worker RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 1141*a67afe4dSAndroid Build Coastguard Worker LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 1142*a67afe4dSAndroid Build Coastguard Worker ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 1143*a67afe4dSAndroid Build Coastguard Worker FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) 1144*a67afe4dSAndroid Build Coastguard Worker 1145*a67afe4dSAndroid Build Coastguard Worker include(CMakePackageConfigHelpers) 1146*a67afe4dSAndroid Build Coastguard Worker write_basic_package_version_file(PNGConfigVersion.cmake 1147*a67afe4dSAndroid Build Coastguard Worker VERSION ${PNGLIB_VERSION} 1148*a67afe4dSAndroid Build Coastguard Worker COMPATIBILITY SameMinorVersion) 1149*a67afe4dSAndroid Build Coastguard Worker 1150*a67afe4dSAndroid Build Coastguard Worker install(EXPORT PNGTargets 1151*a67afe4dSAndroid Build Coastguard Worker FILE PNGTargets.cmake 1152*a67afe4dSAndroid Build Coastguard Worker NAMESPACE PNG:: 1153*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PNG) 1154*a67afe4dSAndroid Build Coastguard Worker 1155*a67afe4dSAndroid Build Coastguard Worker install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/PNGConfig.cmake 1156*a67afe4dSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/PNGConfigVersion.cmake 1157*a67afe4dSAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PNG) 1158*a67afe4dSAndroid Build Coastguard Workerendif() 1159*a67afe4dSAndroid Build Coastguard Worker 1160*a67afe4dSAndroid Build Coastguard Worker# TODO: Create MSVC import lib for MinGW-compiled shared lib. 1161*a67afe4dSAndroid Build Coastguard Worker# pexports libpng.dll > libpng.def 1162*a67afe4dSAndroid Build Coastguard Worker# lib /def:libpng.def /machine:x86 1163