1 if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86(_64)?|(AMD|amd)64|i[346]86")
2 option(WITH_AVX "Enable AVX, AVX2 optimizations" ON)
5 option(WITH_ASM "Use any assembly optimization routines" ON)
7 check_include_file("cpuid.h" HAVE_CPUID_H)
8 check_include_file("sys/param.h" HAVE_SYS_PARAM_H)
10 set(CMAKE_REQUIRED_LIBRARIES m)
11 check_function_exists(lround HAVE_LROUND)
13 if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86_64|(AMD|amd)64")
14 if(CMAKE_SIZEOF_VOID_P EQUAL 4)
17 add_definitions(-DFLAC__CPU_X86_64 -DFLAC__ALIGN_MALLOC_DATA)
18 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "([xX]|i[346])86")
20 add_definitions(-DFLAC__CPU_IA32 -DFLAC__ALIGN_MALLOC_DATA)
23 include(CheckLanguage)
24 check_language(ASM_NASM)
25 if(CMAKE_ASM_NASM_COMPILER)
26 enable_language(ASM_NASM)
27 add_definitions(-DFLAC__HAS_NASM)
31 add_definitions(-DFLAC__NO_ASM)
35 if(WITH_ASM AND CMAKE_ASM_NASM_COMPILER)
36 add_subdirectory(ia32)
39 option(WITH_SSE "Enable SSE2 optimizations" ON)
40 check_c_compiler_flag(-msse2 HAVE_MSSE2_FLAG)
43 $<$<BOOL:${HAVE_MSSE2_FLAG}>:-msse2>
44 $<$<BOOL:${MSVC}>:/arch:SSE2>)
49 set(prefix "${CMAKE_INSTALL_PREFIX}")
50 set(exec_prefix "${CMAKE_INSTALL_PREFIX}")
51 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
52 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
53 configure_file(flac.pc.in flac.pc @ONLY)
55 include_directories("include")
80 stream_encoder_intrin_sse2.c
81 stream_encoder_intrin_ssse3.c
82 stream_encoder_intrin_avx2.c
83 stream_encoder_framing.c
85 $<$<BOOL:${OGG_FOUND}>:ogg_decoder_aspect.c>
86 $<$<BOOL:${OGG_FOUND}>:ogg_encoder_aspect.c>
87 $<$<BOOL:${OGG_FOUND}>:ogg_helper.c>
88 $<$<BOOL:${OGG_FOUND}>:ogg_mapping.c>)
90 target_sources(FLAC PRIVATE $<TARGET_OBJECTS:FLAC-asm>)
93 target_sources(FLAC PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/windows_unicode_filenames.c>)
96 target_compile_definitions(FLAC
97 PRIVATE $<$<BOOL:${BUILD_SHARED_LIBS}>:FLAC_API_EXPORTS>
98 PUBLIC $<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:FLAC__NO_DLL>)
100 target_compile_definitions(FLAC PRIVATE $<$<BOOL:${BUILD_SHARED_LIBS}>:FLAC__USE_VISIBILITY_ATTR>)
102 target_include_directories(FLAC INTERFACE
103 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
104 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
105 target_link_libraries(FLAC PRIVATE $<$<BOOL:${HAVE_LROUND}>:m>)
107 target_link_libraries(FLAC PUBLIC Ogg::ogg)
109 if(BUILD_SHARED_LIBS)
110 set_target_properties(FLAC PROPERTIES
114 set_target_properties(FLAC PROPERTIES C_VISIBILITY_PRESET hidden)
119 install(TARGETS FLAC EXPORT targets
120 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/"
121 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/"
122 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/")
123 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/flac.pc"
124 DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")