2021-10-25 05:45:51 +01:00
# 3.1 is OK for most parts. However:
# 3.3 is needed in src/libFLAC
# 3.5 is needed in src/libFLAC/ia32
# 3.9 is needed in 'doc' because of doxygen_add_docs()
2021-11-12 04:20:16 +00:00
#cmake_minimum_required(VERSION 3.5)
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
#if(NOT (CMAKE_BUILD_TYPE OR CMAKE_CONFIGURATION_TYPES OR DEFINED ENV{CFLAGS} OR DEFINED ENV{CXXFLAGS}))
# set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo")
#endif()
2021-10-25 05:45:51 +01:00
2023-09-24 02:39:02 +01:00
set ( FLAC_VERSION 1.4.3 ) # HOMEPAGE_URL "https://www.xiph.org/flac/")
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
message ( STATUS "FLAC VERSION: ${FLAC_VERSION}" )
2021-10-25 05:45:51 +01:00
set ( BUILD_SHARED_LIBS BOOL OFF )
2021-11-12 04:20:16 +00:00
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/flac/cmake" )
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
set ( VERSION ${ FLAC_VERSION } )
2021-10-25 05:45:51 +01:00
2021-11-12 06:15:33 +00:00
set ( OLD_PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" )
set ( PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/3rdparty/flac/" )
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
#find_package(Iconv)
#set(HAVE_ICONV ${Iconv_FOUND})
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
#if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
2023-09-24 02:39:02 +01:00
# set(CMAKE_C_FLAGS_RELEASE "-O3 -funroll-loops ${CMAKE_C_FLAGS_RELEASE}")
# set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG ${CMAKE_C_FLAGS_RELEASE}")
#endif()
#if(MSVC)
# set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /Oi /Ot /Oy ${CMAKE_C_FLAGS_RELEASE}")
2021-11-12 04:20:16 +00:00
#endif()
2021-10-25 05:45:51 +01:00
include ( CMakePackageConfigHelpers )
include ( CPack )
include ( CTest )
include ( CheckCCompilerFlag )
include ( CheckCXXCompilerFlag )
include ( CheckSymbolExists )
include ( CheckFunctionExists )
include ( CheckIncludeFile )
include ( CheckCSourceCompiles )
include ( CheckCXXSourceCompiles )
include ( UseSystemExtensions )
include ( TestBigEndian )
check_include_file ( "byteswap.h" HAVE_BYTESWAP_H )
check_include_file ( "inttypes.h" HAVE_INTTYPES_H )
check_include_file ( "stdint.h" HAVE_STDINT_H )
2023-09-24 02:39:02 +01:00
check_include_file ( "stdbool.h" HAVE_STDBOOL_H )
check_include_file ( "arm_neon.h" FLAC__HAS_NEONINTRIN )
check_include_file ( "semaphore.h" HAVE_SEMAPHORE_H )
2023-09-24 17:20:53 +01:00
if ( NOT HAVE_STDINT_H OR NOT HAVE_STDBOOL_H )
2024-04-30 15:37:29 +01:00
message ( SEND_ERROR "Header stdint.h and/or stdbool.h not found" )
2023-09-24 17:20:53 +01:00
endif ( )
2023-09-24 02:39:02 +01:00
2023-09-24 17:20:53 +01:00
if ( MSVC )
2024-04-30 15:37:29 +01:00
check_include_file ( "intrin.h" FLAC__HAS_X86INTRIN )
2023-09-24 17:20:53 +01:00
else ( )
2024-04-30 15:37:29 +01:00
check_include_file ( "x86intrin.h" FLAC__HAS_X86INTRIN )
2023-09-24 17:20:53 +01:00
endif ( )
2021-10-25 05:45:51 +01:00
2023-09-24 05:10:42 +01:00
check_function_exists ( fseeko HAVE_FSEEKO )
2021-10-25 05:45:51 +01:00
check_c_source_compiles ( "int main() { return __builtin_bswap16 (0) ; }" HAVE_BSWAP16 )
check_c_source_compiles ( "int main() { return __builtin_bswap32 (0) ; }" HAVE_BSWAP32 )
2023-09-24 17:20:53 +01:00
if ( NOT "${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW" OR ( NOT ${ CMAKE_SYSTEM_PROCESSOR } MATCHES "arm" AND NOT ${ CMAKE_SYSTEM_PROCESSOR } MATCHES "aarch64" ) )
2024-04-30 15:37:29 +01:00
test_big_endian ( CPU_IS_BIG_ENDIAN )
2023-09-24 17:20:53 +01:00
endif ( )
2021-10-25 05:45:51 +01:00
check_c_compiler_flag ( -mstackrealign HAVE_STACKREALIGN_FLAG )
2023-09-24 17:20:53 +01:00
if ( CMAKE_SYSTEM_PROCESSOR STREQUAL "i686" AND HAVE_STACKREALIGN_FLAG )
2024-04-30 15:37:29 +01:00
add_compile_options ( -mstackrealign )
add_compile_options ( $< $<OR:$<COMPILE_LANGUAGE:C > , $< COMPILE_LANGUAGE:CXX > >:-mstackrealign> )
2023-09-24 17:20:53 +01:00
endif ( )
2023-09-24 02:39:02 +01:00
2021-11-12 04:20:16 +00:00
include_directories ( "3rdparty/flac/include" )
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
include_directories ( "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/flac" )
2021-10-25 05:45:51 +01:00
add_definitions ( -DHAVE_CONFIG_H )
2023-09-24 17:20:53 +01:00
if ( MSVC )
2024-04-30 15:37:29 +01:00
add_definitions (
- D _ C R T _ S E C U R E _ N O _ W A R N I N G S
- D _ U S E _ M A T H _ D E F I N E S )
2023-09-24 17:20:53 +01:00
endif ( )
2021-10-25 05:45:51 +01:00
option ( WITH_ASM "Use any assembly optimization routines" ON )
check_include_file ( "cpuid.h" HAVE_CPUID_H )
check_include_file ( "sys/param.h" HAVE_SYS_PARAM_H )
set ( CMAKE_REQUIRED_LIBRARIES m )
check_function_exists ( lround HAVE_LROUND )
include ( CheckCSourceCompiles )
include ( CheckCPUArch )
2023-09-24 02:39:02 +01:00
include ( CheckA64NEON )
2021-10-25 05:45:51 +01:00
check_cpu_arch_x64 ( FLAC__CPU_X86_64 )
2023-09-24 17:20:53 +01:00
if ( NOT FLAC__CPU_X86_64 )
2024-04-30 15:37:29 +01:00
check_cpu_arch_x86 ( FLAC__CPU_IA32 )
2023-09-24 17:20:53 +01:00
endif ( )
2021-10-25 05:45:51 +01:00
2023-09-24 17:20:53 +01:00
if ( FLAC__CPU_X86_64 OR FLAC__CPU_IA32 )
2024-04-30 15:37:29 +01:00
set ( FLAC__ALIGN_MALLOC_DATA 1 )
option ( WITH_AVX "Enable AVX, AVX2 optimizations (with runtime detection, resulting binary does not require AVX2, so only necessary when a compiler doesn't know about AVX)" ON )
if ( WITH_AVX AND MSVC )
set_source_files_properties ( fixed_intrin_avx2.c lpc_intrin_avx2.c stream_encoder_intrin_avx2.c PROPERTIES COMPILE_FLAGS /arch:AVX2 )
set_source_files_properties ( lpc_intrin_fma.c PROPERTIES COMPILE_FLAGS "/arch:AVX2 /fp:fast" )
endif ( )
if ( WITH_AVX AND ( CMAKE_C_COMPILER_ID MATCHES "Clang" ) )
set_source_files_properties ( lpc_intrin_fma.c PROPERTIES COMPILE_FLAGS "-ffast-math" )
endif ( )
2023-09-24 17:20:53 +01:00
else ( )
2024-04-30 15:37:29 +01:00
if ( FLAC__CPU_ARM64 )
check_a64neon ( FLAC__HAS_A64NEONINTRIN )
endif ( )
2023-09-24 17:20:53 +01:00
endif ( )
2023-09-24 02:39:02 +01:00
2023-09-24 17:20:53 +01:00
if ( NOT WITH_ASM )
2024-04-30 15:37:29 +01:00
add_definitions ( -DFLAC__NO_ASM )
2023-09-24 17:20:53 +01:00
endif ( )
2023-09-24 02:39:02 +01:00
2023-09-24 17:20:53 +01:00
if ( HAVE_SEMAPHORE_H )
2024-04-30 15:37:29 +01:00
set ( CMAKE_THREAD_PREFER_PTHREAD TRUE )
set ( THREADS_PREFER_PTHREAD_FLAG TRUE )
find_package ( Threads )
if ( CMAKE_USE_PTHREADS_INIT )
set ( HAVE_PTHREAD 1 )
endif ( )
2023-09-24 17:20:53 +01:00
endif ( )
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
include_directories ( "3rdparty/flac/src/libFLAC/include" )
target_sources ( "Aaru.Compression.Native" PRIVATE
2023-09-24 17:20:53 +01:00
3 r d p a r t y / f l a c / s r c / l i b F L A C / b i t m a t h . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / b i t r e a d e r . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / b i t w r i t e r . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / c p u . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / c r c . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / f i x e d . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / f i x e d _ i n t r i n _ s s e 2 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / f i x e d _ i n t r i n _ s s s e 3 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / f i x e d _ i n t r i n _ s s e 4 2 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / f i x e d _ i n t r i n _ a v x 2 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / f l o a t . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / f o r m a t . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / l p c . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / l p c _ i n t r i n _ n e o n . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / l p c _ i n t r i n _ s s e 2 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / l p c _ i n t r i n _ s s e 4 1 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / l p c _ i n t r i n _ a v x 2 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / l p c _ i n t r i n _ f m a . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / m d 5 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / m e m o r y . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / m e t a d a t a _ i t e r a t o r s . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / m e t a d a t a _ o b j e c t . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / s t r e a m _ d e c o d e r . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / s t r e a m _ e n c o d e r . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / s t r e a m _ e n c o d e r _ i n t r i n _ s s e 2 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / s t r e a m _ e n c o d e r _ i n t r i n _ s s s e 3 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / s t r e a m _ e n c o d e r _ i n t r i n _ a v x 2 . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / s t r e a m _ e n c o d e r _ f r a m i n g . c
3 r d p a r t y / f l a c / s r c / l i b F L A C / w i n d o w . c
$ < $ < B O O L : $ { WIN32 } > : 3 r d p a r t y / f l a c / i n c l u d e / s h a r e / w i n _ u t f 8 _ i o . h >
$ < $ < B O O L : $ { WIN32 } > : 3 r d p a r t y / f l a c / s r c / s h a r e / w i n _ u t f 8 _ i o / w i n _ u t f 8 _ i o . c >
$ < $ < B O O L : $ { O G G _ F O U N D } > : o g g _ d e c o d e r _ a s p e c t . c >
$ < $ < B O O L : $ { O G G _ F O U N D } > : o g g _ e n c o d e r _ a s p e c t . c >
$ < $ < B O O L : $ { O G G _ F O U N D } > : o g g _ h e l p e r . c >
$ < $ < B O O L : $ { O G G _ F O U N D } > : o g g _ m a p p i n g . c > )
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
target_compile_definitions ( "Aaru.Compression.Native" PUBLIC FLAC__NO_DLL )
2021-11-12 07:57:06 +00:00
target_compile_definitions ( "Aaru.Compression.Native" PUBLIC FLAC__NO_FILEIO )
2021-10-25 05:45:51 +01:00
# Disable fortify source when not-release or when cross-building with MingW for WoA
2023-09-24 17:20:53 +01:00
if ( CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo OR "${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW" )
2024-04-30 15:37:29 +01:00
set ( DODEFINE_FORTIFY_SOURCE 0 )
2023-09-24 17:20:53 +01:00
endif ( )
2021-10-25 05:45:51 +01:00
2021-11-12 04:20:16 +00:00
set_property ( TARGET "Aaru.Compression.Native" PROPERTY C_VISIBILITY_PRESET hidden )
2021-10-30 21:33:51 +01:00
2023-09-24 17:20:53 +01:00
if ( ARCHITECTURE_IS_64BIT )
2024-04-30 15:37:29 +01:00
set ( ENABLE_64_BIT_WORDS 1 )
2023-09-24 17:20:53 +01:00
endif ( )
2021-10-31 17:05:32 +00:00
2021-11-12 06:15:33 +00:00
configure_file ( 3rdparty/flac/config.cmake.h.in 3rdparty/flac/config.h )
set ( PROJECT_SOURCE_DIR "${OLD_PROJECT_SOURCE_DIR}" )