Mercurial > hg > orthanc-stone
diff OrthancStone/Resources/CMake/PixmanConfiguration.cmake @ 1512:244ad1e4e76a
reorganization of folders
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 07 Jul 2020 16:21:02 +0200 |
parents | Resources/CMake/PixmanConfiguration.cmake@2d8ab34c8c91 |
children | f9e3a9c21c0f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Resources/CMake/PixmanConfiguration.cmake Tue Jul 07 16:21:02 2020 +0200 @@ -0,0 +1,243 @@ +# Stone of Orthanc +# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics +# Department, University Hospital of Liege, Belgium +# Copyright (C) 2017-2020 Osimis S.A., Belgium +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU Affero 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 +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero 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()