203 lines
6.6 KiB
CMake
203 lines
6.6 KiB
CMake
# 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()
|