# selectively extracted and adapted from the libpng CMakeLists.txt, which has the following copyright notice: # Copyright (C) 2018 Cosmin Truta # Copyright (C) 2007,2009-2018 Glenn Randers-Pehrson # Written by Christian Ehrlicher, 2007 # Revised by Roger Lowman, 2009-2010 # Revised by Clifford Yapp, 2011-2012,2017 # Revised by Roger Leigh, 2016 # Revised by Andreas Franek, 2016 # Revised by Sam Serrels, 2017 # Revised by Vadim Barkov, 2017 # Revised by Vicky Pfau, 2018 # Revised by Cameron Cawley, 2018 # Revised by Cosmin Truta, 2018 # Revised by Kyle Bentley, 2018 # This code is released under the libpng license. # For conditions of distribution and use, see the disclaimer # and license in png.h add_library(png STATIC png.c pngerror.c pngget.c pngmem.c pngpread.c pngread.c pngrio.c pngrtran.c pngrutil.c pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c pngwutil.c ) option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations for libpng" OFF) if(PNG_HARDWARE_OPTIMIZATIONS) message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") # set definitions and sources for arm if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) set(PNG_ARM_NEON "check" CACHE STRING "Enable ARM NEON optimizations: check: (default) use internal checking code; off: disable the optimizations; on: turn on unconditionally.") set_property(CACHE PNG_ARM_NEON PROPERTY STRINGS ${PNG_ARM_NEON_POSSIBLE_VALUES}) list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index) if(index EQUAL -1) message(FATAL_ERROR "PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]") elseif(NOT ${PNG_ARM_NEON} STREQUAL "off") target_sources(png PRIVATE arm/arm_init.c arm/filter_neon.S arm/filter_neon_intrinsics.c arm/palette_neon_intrinsics.c) if(${PNG_ARM_NEON} STREQUAL "on") target_compile_definitions(png PUBLIC -DPNG_ARM_NEON_OPT=2) elseif(${PNG_ARM_NEON} STREQUAL "check") target_compile_definitions(png PUBLIC -DPNG_ARM_NEON_CHECK_SUPPORTED) endif() else() target_compile_definitions(png PUBLIC -DPNG_ARM_NEON_OPT=0) endif() endif() # set definitions and sources for powerpc if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*") set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations: off: disable the optimizations.") set_property(CACHE PNG_POWERPC_VSX PROPERTY STRINGS ${PNG_POWERPC_VSX_POSSIBLE_VALUES}) list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index) if(index EQUAL -1) message(FATAL_ERROR "PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]") elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "off") target_sources(png PRIVATE powerpc/powerpc_init.c powerpc/filter_vsx_intrinsics.c) if(${PNG_POWERPC_VSX} STREQUAL "on") target_compile_definitions(png PUBLIC -DPNG_POWERPC_VSX_OPT=2) endif() else() target_compile_definitions(png PUBLIC -DPNG_POWERPC_VSX_OPT=0) endif() endif() # set definitions and sources for intel if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*") set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations: off: disable the optimizations") set_property(CACHE PNG_INTEL_SSE PROPERTY STRINGS ${PNG_INTEL_SSE_POSSIBLE_VALUES}) list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index) if(index EQUAL -1) message(FATAL_ERROR "PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]") elseif(NOT ${PNG_INTEL_SSE} STREQUAL "off") target_sources(png PRIVATE intel/intel_init.c intel/filter_sse2_intrinsics.c) if(${PNG_INTEL_SSE} STREQUAL "on") target_compile_definitions(png PUBLIC -DPNG_INTEL_SSE_OPT=1) endif() else() target_compile_definitions(png PUBLIC -DPNG_INTEL_SSE_OPT=0) endif() endif() # set definitions and sources for MIPS if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*") set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations: off: disable the optimizations") set_property(CACHE PNG_MIPS_MSA PROPERTY STRINGS ${PNG_MIPS_MSA_POSSIBLE_VALUES}) list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index) if(index EQUAL -1) message(FATAL_ERROR "PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]") elseif(NOT ${PNG_MIPS_MSA} STREQUAL "off") target_sources(png PRIVATE mips/mips_init.c mips/filter_msa_intrinsics.c) if(${PNG_MIPS_MSA} STREQUAL "on") target_compile_definitions(png PUBLIC -DPNG_MIPS_MSA_OPT=2) endif() else() target_compile_definitions(png PUBLIC -DPNG_MIPS_MSA_OPT=0) endif() endif() else(PNG_HARDWARE_OPTIMIZATIONS) # set definitions and sources for arm if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") target_compile_definitions(png PUBLIC -DPNG_ARM_NEON_OPT=0) endif() # set definitions and sources for powerpc if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*") target_compile_definitions(png PUBLIC -DPNG_POWERPC_VSX_OPT=0) endif() # set definitions and sources for intel if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*") target_compile_definitions(png PUBLIC -DPNG_INTEL_SSE_OPT=0) endif() # set definitions and sources for MIPS if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*") target_compile_definitions(png PUBLIC -DPNG_MIPS_MSA_OPT=0) endif() endif(PNG_HARDWARE_OPTIMIZATIONS) target_sources(png PRIVATE # public headers png.h pngconf.h pnglibconf.h # private headers pngpriv.h pngdebug.h pnginfo.h pngstruct.h ) target_include_directories(png PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ) target_link_libraries(png PUBLIC ZLIB::ZLIB) if(NOT MSVC) target_compile_options(png PRIVATE -Wno-self-assign ) endif()