project(libpng C) option(PNG_HARDWARE_OPTIMIZATIONS "Enable Hardware Optimizations" ON) cmake_minimum_required(VERSION 3.0.0) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) set(PNGLIB_MAJOR 1) set(PNGLIB_MINOR 6) set(PNGLIB_RELEASE 18) set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE}) if(PNG_HARDWARE_OPTIMIZATIONS) 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 "no") set(libpng_arm_sources arm/arm_init.c arm/filter_neon.S arm/filter_neon_intrinsics.c) if(${PNG_ARM_NEON} STREQUAL "on") add_definitions(-DPNG_ARM_NEON_OPT=2) elseif(${PNG_ARM_NEON} STREQUAL "check") add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED) endif() else() add_definitions(-DPNG_ARM_NEON_OPT=0) endif() endif() endif(PNG_HARDWARE_OPTIMIZATIONS) # needed packages include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../zlib") if(NOT WIN32) find_library(M_LIBRARY NAMES m PATHS /usr/lib /usr/local/lib ) if(NOT M_LIBRARY) message(STATUS "math lib 'libm' not found; floating point support disabled") endif() else() # not needed on windows set(M_LIBRARY "") endif() # SET LIBNAME set(PNG_LIBRARY png) # Use the prebuilt pnglibconf.h file from the scripts folder # TODO: fix this by building with awk; without this no cmake build can be # configured directly (to do so indirectly use your local awk to build a # pnglibconf.h in the build directory.) #configure_file(${CMAKE_CURRENT_SOURCE_DIR}/pnglibconf.h.prebuilt # ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h) #include_directories(${CMAKE_CURRENT_BINARY_DIR}) # OUR SOURCES set(libpng_public_hdrs png.h pngconf.h # ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h pnglibconf.h ) set(libpng_sources ${libpng_public_hdrs} pngdebug.h pnginfo.h pngpriv.h pngstruct.h 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 ${libpng_arm_sources} ) # SOME NEEDED DEFINITIONS if(MSVC) add_definitions(-D_CRT_SECURE_NO_DEPRECATE) endif(MSVC) add_library(${PNG_LIBRARY} STATIC ${libpng_sources}) target_link_libraries(${PNG_LIBRARY} ${ZLIB_LIBRARY} ${M_LIBRARY}) set_target_properties(${PNG_LIBRARY} PROPERTIES OUTPUT_NAME ${PNG_LIBRARY} FOLDER "3rdparty" ) set(PNG_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}") set(PNG_LIBRARIES "png") set(PNG_INCLUDE_DIRS ${PNG_INCLUDE_DIRS} PARENT_SCOPE) set(PNG_LIBRARIES ${PNG_LIBRARIES} PARENT_SCOPE) # install if (NOT BUILD_SHARED_LIBS) install(TARGETS ${PNG_LIBRARY} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) endif()