if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86(_64)?|(AMD|amd)64|i[346]86") option(WITH_AVX "Enable AVX, AVX2 optimizations" ON) 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) if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86_64|(AMD|amd)64") if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(IA32 TRUE) endif() add_definitions(-DFLAC__CPU_X86_64 -DFLAC__ALIGN_MALLOC_DATA) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "([xX]|i[346])86") set(IA32 TRUE) add_definitions(-DFLAC__CPU_IA32 -DFLAC__ALIGN_MALLOC_DATA) endif() include(CheckLanguage) check_language(ASM_NASM) if(CMAKE_ASM_NASM_COMPILER) enable_language(ASM_NASM) add_definitions(-DFLAC__HAS_NASM) endif() if(NOT WITH_ASM) add_definitions(-DFLAC__NO_ASM) endif() if(IA32) if(WITH_ASM AND CMAKE_ASM_NASM_COMPILER) add_subdirectory(ia32) endif() option(WITH_SSE "Enable SSE2 optimizations" ON) check_c_compiler_flag(-msse2 HAVE_MSSE2_FLAG) if(WITH_SSE) add_compile_options( $<$:-msse2> $<$:/arch:SSE2>) endif() endif() include_directories("include") add_library(FLAC 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 $<$:ogg_decoder_aspect.c> $<$:ogg_encoder_aspect.c> $<$:ogg_helper.c> $<$:ogg_mapping.c>) if(TARGET FLAC-asm) target_sources(FLAC PRIVATE $) endif() if(WIN32) target_sources(FLAC PUBLIC $) endif() target_compile_definitions(FLAC PRIVATE $<$:FLAC_API_EXPORTS> PUBLIC $<$>:FLAC__NO_DLL>) if(NOT WIN32) target_compile_definitions(FLAC PRIVATE $<$:FLAC__USE_VISIBILITY_ATTR>) endif() target_include_directories(FLAC INTERFACE "$" "$") target_link_libraries(FLAC PUBLIC $<$:m>) if(TARGET Ogg::ogg) target_link_libraries(FLAC PUBLIC Ogg::ogg) endif() if(BUILD_SHARED_LIBS) set_target_properties(FLAC PROPERTIES VERSION 8.3.0 SOVERSION 8) if(NOT WIN32) set_target_properties(FLAC PROPERTIES C_VISIBILITY_PRESET hidden) endif() endif() install(TARGETS FLAC EXPORT targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/") if(INSTALL_PKGCONFIG_MODULES) 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) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/flac.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") endif()