diff options
Diffstat (limited to 'src/libFLAC')
-rw-r--r-- | src/libFLAC/CMakeLists.txt | 124 | ||||
-rw-r--r-- | src/libFLAC/ia32/CMakeLists.txt | 18 |
2 files changed, 142 insertions, 0 deletions
diff --git a/src/libFLAC/CMakeLists.txt b/src/libFLAC/CMakeLists.txt new file mode 100644 index 00000000..1ea9383a --- /dev/null +++ b/src/libFLAC/CMakeLists.txt @@ -0,0 +1,124 @@ +cmake_minimum_required(VERSION 3.12) + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86(_64)?|(AMD|amd)64|i[346]86") + option(WITH_AVX "Enable AVX, AVX2 optimizations" ON) + option(WITH_SSE "Enable AVX, AVX2 optimizations" ON) +endif() + +check_c_compiler_flag(-msse2 HAVE_MSSE2_FLAG) +if(HAVE_MSSE2_FLAG AND WITH_SSE) + add_compile_options(-msse2) +endif() + +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) + +add_compile_definitions( + $<$<BOOL:${MSVC}>:_USE_MATH_DEFINES> + FLAC__USE_AVX=$<BOOL:${WITH_AVX}> + HAVE_LROUND=$<BOOL:${HAVE_LROUND}> + $<$<BOOL:${HAVE_CPUID_H}>:HAVE_CPUID_H> + $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:FLAC__OVERFLOW_DETECT>) + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86_64|(AMD|amd)64") + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(IA32 TRUE) + endif() + add_compile_definitions( + FLAC__CPU_X86_64 + FLAC__ALIGN_MALLOC_DATA) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "([xX]|i[346])86") + set(IA32 TRUE) + add_compile_definitions( + FLAC__CPU_IA32 + FLAC__ALIGN_MALLOC_DATA) +endif() + +include(CheckLanguage) +check_language(ASM_NASM) +if(CMAKE_ASM_NASM_COMPILER) + enable_language(ASM_NASM) + add_compile_definitions(FLAC__HAS_NASM) +endif() + +if(NOT WITH_ASM) + add_compile_definitions(FLAC__NO_ASM) +endif() + +if(WITH_ASM AND IA32 AND CMAKE_ASM_NASM_COMPILER) + add_subdirectory(ia32) +endif() + +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "${CMAKE_INSTALL_PREFIX}") +set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") +set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") +configure_file(flac.pc.in flac.pc @ONLY) + +set(SOURCES + bitmath.c + bitreader.c + bitwriter.c + cpu.c + crc.c + fixed.c + fixed_intrin_sse2.c + fixed_intrin_ssse3.c + float.c + format.c + lpc.c + lpc_intrin_sse.c + lpc_intrin_sse2.c + lpc_intrin_sse41.c + lpc_intrin_avx2.c + lpc_intrin_vsx.c + md5.c + memory.c + metadata_iterators.c + metadata_object.c + stream_decoder.c + stream_encoder.c + stream_encoder_intrin_sse2.c + stream_encoder_intrin_ssse3.c + stream_encoder_intrin_avx2.c + stream_encoder_framing.c + window.c + $<$<BOOL:${OGG_FOUND}>:ogg_decoder_aspect.c> + $<$<BOOL:${OGG_FOUND}>:ogg_encoder_aspect.c> + $<$<BOOL:${OGG_FOUND}>:ogg_helper.c> + $<$<BOOL:${OGG_FOUND}>:ogg_mapping.c> + $<$<BOOL:${WIN32}>:windows_unicode_filenames.c>) + +include_directories("include") + +add_library(FLAC-static STATIC ${SOURCES}) +target_compile_definitions(FLAC-static PUBLIC FLAC__NO_DLL) +target_include_directories(FLAC-static INTERFACE + "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>") +target_link_libraries(FLAC-static PUBLIC + $<TARGET_NAME_IF_EXISTS:Ogg::Ogg> + $<TARGET_NAME_IF_EXISTS:FLAC-asm> + $<$<BOOL:${HAVE_LROUND}>:m>) + +add_library(FLAC SHARED ${SOURCES}) +target_compile_definitions(FLAC PRIVATE FLAC_API_EXPORTS FLAC__USE_VISIBILITY_ATTR) +target_include_directories(FLAC INTERFACE + "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>") +target_link_libraries(FLAC PRIVATE + $<TARGET_NAME_IF_EXISTS:FLAC-asm> + $<$<BOOL:${HAVE_LROUND}>:m>) +set_target_properties(FLAC PROPERTIES C_VISIBILITY_PRESET hidden) + +install(TARGETS FLAC FLAC-static EXPORT targets + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/flac.pc" + DESTINATION "${CMAKE_INSTALL_DATADIR}/pkgconfig") diff --git a/src/libFLAC/ia32/CMakeLists.txt b/src/libFLAC/ia32/CMakeLists.txt new file mode 100644 index 00000000..94357064 --- /dev/null +++ b/src/libFLAC/ia32/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.12) + +include_directories("${CMAKE_CURRENT_SOURCE_DIR}") + +if(APPLE) + add_compile_options(-dOBJ_FORMAT_macho) +elseif(WIN32) + #add_compile_options(-d OBJ_FORMAT_win32) + # FIXME the command above doesn't seem to work on Windows + set(CMAKE_ASM_NASM_FLAGS -dOBJ_FORMAT_win32) +else() + add_compile_options(-dOBJ_FORMAT_elf) +endif() + +add_library(FLAC-asm STATIC + cpu_asm.nasm + fixed_asm.nasm + lpc_asm.nasm) |