Mercurial > hg > orthanc-stone
view OrthancStone/Resources/CMake/PixmanConfiguration.cmake @ 2073:ae56f7ea0e90
todo
author | Alain Mazy <am@osimis.io> |
---|---|
date | Thu, 29 Jun 2023 12:38:32 +0200 |
parents | 7053b8a0aaec |
children | 07964689cb0b |
line wrap: on
line source
# Stone of Orthanc # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2022 Osimis S.A., Belgium # Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License # as published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program. If not, see # <http://www.gnu.org/licenses/>. if (STATIC_BUILD OR NOT USE_SYSTEM_PIXMAN) SET(PIXMAN_SOURCES_DIR ${CMAKE_BINARY_DIR}/pixman-0.34.0) SET(PIXMAN_URL "http://orthanc.osimis.io/ThirdPartyDownloads/pixman-0.34.0.tar.gz") SET(PIXMAN_MD5 "e80ebae4da01e77f68744319f01d52a3") if (IS_DIRECTORY "${PIXMAN_SOURCES_DIR}") set(FirstRun OFF) else() set(FirstRun ON) endif() DownloadPackage(${PIXMAN_MD5} ${PIXMAN_URL} "${PIXMAN_SOURCES_DIR}") # Apply a patch for NaCl32: This bypasses the custom implementation of # "cpuid" that makes use of assembly code leading to "unrecognized # instruction" when validating ".nexe" files using "ncval" execute_process( COMMAND ${PATCH_EXECUTABLE} -p0 -N -i ${CMAKE_CURRENT_LIST_DIR}/PixmanConfiguration.patch WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE Failure ) if (Failure AND FirstRun) message(FATAL_ERROR "Error while patching a file") endif() set(PIXMAN_VERSION_MAJOR 0) set(PIXMAN_VERSION_MINOR 34) set(PIXMAN_VERSION_MICRO 0) configure_file( ${PIXMAN_SOURCES_DIR}/pixman/pixman-version.h.in ${PIXMAN_SOURCES_DIR}/pixman/pixman-version.h) list(APPEND PIXMAN_SOURCES ${PIXMAN_SOURCES_DIR}/pixman/pixman-access-accessors.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-access.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-arm.c #${PIXMAN_SOURCES_DIR}/pixman/pixman-arm-neon.c #${PIXMAN_SOURCES_DIR}/pixman/pixman-arm-simd.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-bits-image.c ${PIXMAN_SOURCES_DIR}/pixman/pixman.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-combine32.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-combine-float.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-conical-gradient.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-edge-accessors.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-edge.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-fast-path.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-filter.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-general.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-glyph.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-gradient-walker.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-image.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-implementation.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-linear-gradient.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-matrix.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-mips.c #${PIXMAN_SOURCES_DIR}/pixman/pixman-mips-dspr2.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-mmx.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-noop.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-ppc.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-radial-gradient.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-region16.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-region32.c #${PIXMAN_SOURCES_DIR}/pixman/pixman-region.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-solid-fill.c #${PIXMAN_SOURCES_DIR}/pixman/pixman-sse2.c #${PIXMAN_SOURCES_DIR}/pixman/pixman-ssse3.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-timer.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-trap.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-utils.c #${PIXMAN_SOURCES_DIR}/pixman/pixman-vmx.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-x86.c ) set(PIXMAN_DEFINITIONS "PACKAGE=\"pixman\"") if (CMAKE_SYSTEM_PROCESSOR) message("Processor: ${CMAKE_SYSTEM_PROCESSOR}") else() message("Processor: Not applicable") endif() ########################## ## Portable Google NaCl ########################## if (CMAKE_SYSTEM_NAME STREQUAL "PNaCl") # No hardware acceleration set(PIXMAN_DEFINITIONS "${PIXMAN_DEFINITIONS};TLS=__thread") elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten" OR CMAKE_SYSTEM_NAME STREQUAL "Android") ########################## ## Emscripten (asm.js) ########################## # No threading support set(PIXMAN_DEFINITIONS "${PIXMAN_DEFINITIONS};PIXMAN_NO_TLS=1;HAVE_GCC_VECTOR_EXTENSIONS") elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows") ########################## ## Windows 32 or 64 ########################## if (CMAKE_COMPILER_IS_GNUCXX) set(PIXMAN_DEFINITIONS "${PIXMAN_DEFINITIONS};TLS=__thread;HAVE_GCC_VECTOR_EXTENSIONS;HAVE_BUILTIN_CLZ;HAVE_FEDIVBYZERO=1;HAVE_FENV_H=1;HAVE_MPROTECT=1;HAVE_FLOAT128;HAVE_POSIX_MEMALIGN;USE_GCC_INLINE_ASM=1;HAVE_GETPAGESIZE=1") # The option "-mstackrealign" is necessary to avoid a crash on # Windows if enabling SSE2. As an alternative, it is possible to # fully disable hardware acceleration. # https://bugs.freedesktop.org/show_bug.cgi?id=68300#c4 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2 -mssse3 -mstackrealign") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -mssse3 -mstackrealign") endif() list(APPEND PIXMAN_SOURCES ${PIXMAN_SOURCES_DIR}/pixman/pixman-sse2.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-ssse3.c ) if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") # Only enable MMX on Windows 32 add_definitions( -DUSE_X86_MMX=1 ) endif() add_definitions( -DUSE_SSE2=1 -DUSE_SSSE3=1 ) ########################## ## Generic x86 processor ########################## elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_NAME STREQUAL "NaCl32" OR CMAKE_SYSTEM_NAME STREQUAL "NaCl64" OR CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(PIXMAN_DEFINITIONS "${PIXMAN_DEFINITIONS};TLS=__thread;HAVE_GCC_VECTOR_EXTENSIONS;HAVE_BUILTIN_CLZ;HAVE_MPROTECT=1;HAVE_FLOAT128;HAVE_POSIX_MEMALIGN;USE_GCC_INLINE_ASM;HAVE_GETPAGESIZE=1") if (${CMAKE_SYSTEM_NAME} STREQUAL "NaCl32" OR ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl64") # The MMX instructions lead to "unrecognized instruction" when # validating ".nexe" files using "ncval", disable them else() #add_definitions(-DUSE_X86_MMX=1) endif() list(APPEND PIXMAN_SOURCES ${PIXMAN_SOURCES_DIR}/pixman/pixman-sse2.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-ssse3.c ) add_definitions( -DUSE_SSE2=1 -DUSE_SSSE3=1 ) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2 -mssse3") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -mssse3") ########################## ## ARM processor ########################## elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv5te" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv6" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") set(PIXMAN_DEFINITIONS "${PIXMAN_DEFINITIONS};TLS=__thread") if (NEON) message("Processor with NEON instructions") list(APPEND PIXMAN_SOURCES ${PIXMAN_SOURCES_DIR}/pixman/pixman-arm-neon.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-arm-neon-asm.S ${PIXMAN_SOURCES_DIR}/pixman/pixman-arm-neon-asm-bilinear.S ) add_definitions( -DUSE_ARM_NEON=1 ) elseif() message("Processor without NEON instructions") endif() add_definitions( -DUSE_ARM_SIMD=1 ) list(APPEND PIXMAN_SOURCES ${PIXMAN_SOURCES_DIR}/pixman/pixman-arm.c ${PIXMAN_SOURCES_DIR}/pixman/pixman-arm-simd-asm.S ${PIXMAN_SOURCES_DIR}/pixman/pixman-arm-simd-asm-scaled.S ${PIXMAN_SOURCES_DIR}/pixman/pixman-arm-simd.c ) else() message(FATAL_ERROR "Support your platform here") endif() include_directories( ${PIXMAN_SOURCES_DIR}/pixman ) set_property( SOURCE ${PIXMAN_SOURCES} PROPERTY COMPILE_DEFINITIONS ${PIXMAN_DEFINITIONS} ) else() pkg_search_module(PIXMAN REQUIRED pixman-1) include_directories(${PIXMAN_INCLUDE_DIRS}) link_libraries(${PIXMAN_LIBRARIES}) endif()