cmake_minimum_required(VERSION 3.15) # This file is part of the Aaru Data Preservation Suite. # Copyright (c) 2019-2023 Natalia Portillo. # # This library 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 2.1 of the # License, or (at your option) any later version. # # This library 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 library; if not, see . IF(APPLE) IF("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "") SET(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "Build architectures for Mac OS X" FORCE) ENDIF() ENDIF(APPLE) project("Aaru.Compression.Native" C) if("${CMAKE_C_COMPILER_ID}" MATCHES "MSVC" AND "${CMAKE_C_COMPILER_ARCHITECTURE_ID}" MATCHES "ARMV7") set(CMAKE_C_STANDARD 11) else() set(CMAKE_C_STANDARD 99) endif() if("${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW") if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm") set(WIN32 TRUE) endif() add_link_options(-static-libgcc) endif() message("Detected system processor: ${CMAKE_SYSTEM_PROCESSOR}") message("Detected vs platform name: ${CMAKE_C_COMPILER_ARCHITECTURE_ID}") message("Detected compiler: ${CMAKE_C_COMPILER_ID}") message("Detected build type: ${CMAKE_BUILD_TYPE}") message("Detected platform: ${CMAKE_C_PLATFORM_ID}") message("Size of (void*): ${CMAKE_SIZEOF_VOID_P}") # Check if target is 64-bit if("${CMAKE_SIZEOF_VOID_P}" MATCHES "8" OR "${CMAKE_C_COMPILER_ARCHITECTURE_ID}" MATCHES "x64" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "AMD64" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64") set(ARCHITECTURE_IS_64BIT TRUE) endif() if("${CMAKE_BUILD_TYPE}" MATCHES "Release") add_compile_definitions(NDEBUG) if("${CMAKE_C_COMPILER_ID}" MATCHES "MSVC") add_compile_options("/O2" "/fp:fast") if(${CMAKE_C_COMPILER_ARCHITECTURE_ID} MATCHES "X86" OR ${CMAKE_C_COMPILER_ARCHITECTURE_ID} MATCHES "x64") add_compile_options("/arch:SSE2") endif() else() add_compile_options(-ffast-math -O3) if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "i686" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "AMD64") if(NOT "${CMAKE_C_COMPILER_ID}" MATCHES "AppleClang") add_compile_options(-march=core2 -mtune=westmere -mfpmath=sse) endif() add_compile_options(-msse3) if(NOT "${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW") add_compile_options(-flto) endif() elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64") if(NOT "${CMAKE_C_COMPILER_ID}" MATCHES "AppleClang") add_compile_options(-march=armv8-a) endif() if(NOT "${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW") add_compile_options(-flto) endif() elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv7l" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") if(NOT "${CMAKE_C_COMPILER_ID}" MATCHES "AppleClang") add_compile_options(-march=armv7+fp -mfpu=vfpv3-d16) endif() elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "mips") if(NOT "${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW") add_compile_options(-flto) endif() endif() endif() endif() add_subdirectory(3rdparty) add_library("Aaru.Compression.Native" SHARED library.c apple_rle.c apple_rle.h adc.c adc.h lzip.c flac.c flac.h) include(3rdparty/bzip2.cmake) include(3rdparty/flac.cmake) include(3rdparty/lzfse.cmake) include(3rdparty/lzip.cmake) include(3rdparty/lzma.cmake) MACRO(TARGET_LINK_LIBRARIES_WHOLE_ARCHIVE target) if("${CMAKE_C_COMPILER_ID}" MATCHES "MSVC") FOREACH(arg IN LISTS ARGN) SET_TARGET_PROPERTIES( ${target} PROPERTIES LINK_FLAGS "/WHOLEARCHIVE:${lib}" ) ENDFOREACH() ELSE() if("${CMAKE_C_COMPILER_ID}" MATCHES "AppleClang") SET(LINK_FLAGS "-Wl,-all_load") SET(UNDO_FLAGS "-Wl,-noall_load") ELSE() SET(LINK_FLAGS "-Wl,--whole-archive") SET(UNDO_FLAGS "-Wl,--no-whole-archive") ENDIF() TARGET_LINK_LIBRARIES(${target} ${LINK_FLAGS} ${ARGN} ${UNDO_FLAGS}) ENDIF() ENDMACRO() TARGET_LINK_LIBRARIES_WHOLE_ARCHIVE("Aaru.Compression.Native" libzstd_static m) if(NOT "${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW" OR (NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" AND NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")) set_property(TARGET "Aaru.Compression.Native" PROPERTY POSITION_INDEPENDENT_CODE TRUE) else() set_property(TARGET "Aaru.Compression.Native" PROPERTY POSITION_INDEPENDENT_CODE FALSE) endif() add_subdirectory(tests)