xref: /aosp_15_r20/external/flac/src/libFLAC/CMakeLists.txt (revision 600f14f40d737144c998e2ec7a483122d3776fbc)
1*600f14f4SXin Lioption(WITH_ASM "Use any assembly optimization routines" ON)
2*600f14f4SXin Li
3*600f14f4SXin Licheck_include_file("cpuid.h" HAVE_CPUID_H)
4*600f14f4SXin Licheck_include_file("sys/param.h" HAVE_SYS_PARAM_H)
5*600f14f4SXin Li
6*600f14f4SXin Liset(CMAKE_REQUIRED_LIBRARIES m)
7*600f14f4SXin Licheck_function_exists(lround HAVE_LROUND)
8*600f14f4SXin Li
9*600f14f4SXin Liinclude(CheckCSourceCompiles)
10*600f14f4SXin Liinclude(CheckCPUArch)
11*600f14f4SXin Liinclude(CheckA64NEON)
12*600f14f4SXin Li
13*600f14f4SXin Licheck_cpu_arch_x64(FLAC__CPU_X86_64)
14*600f14f4SXin Liif(NOT FLAC__CPU_X86_64)
15*600f14f4SXin Li    check_cpu_arch_x86(FLAC__CPU_IA32)
16*600f14f4SXin Liendif()
17*600f14f4SXin Li
18*600f14f4SXin Liif(FLAC__CPU_X86_64 OR FLAC__CPU_IA32)
19*600f14f4SXin Li    set(FLAC__ALIGN_MALLOC_DATA 1)
20*600f14f4SXin Li    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)
21*600f14f4SXin Li    if(WITH_AVX AND MSVC)
22*600f14f4SXin Li        set_source_files_properties(fixed_intrin_avx2.c lpc_intrin_avx2.c stream_encoder_intrin_avx2.c lpc_intrin_fma.c PROPERTIES COMPILE_FLAGS /arch:AVX2)
23*600f14f4SXin Li    endif()
24*600f14f4SXin Lielse()
25*600f14f4SXin Li    check_cpu_arch_arm64(FLAC__CPU_ARM64)
26*600f14f4SXin Li    if(FLAC__CPU_ARM64)
27*600f14f4SXin Li         check_a64neon(FLAC__HAS_A64NEONINTRIN)
28*600f14f4SXin Li    endif()
29*600f14f4SXin Liendif()
30*600f14f4SXin Li
31*600f14f4SXin Liif(NOT WITH_ASM)
32*600f14f4SXin Li    add_definitions(-DFLAC__NO_ASM)
33*600f14f4SXin Liendif()
34*600f14f4SXin Li
35*600f14f4SXin Liinclude_directories("include")
36*600f14f4SXin Li
37*600f14f4SXin Liadd_library(FLAC
38*600f14f4SXin Li    bitmath.c
39*600f14f4SXin Li    bitreader.c
40*600f14f4SXin Li    bitwriter.c
41*600f14f4SXin Li    cpu.c
42*600f14f4SXin Li    crc.c
43*600f14f4SXin Li    fixed.c
44*600f14f4SXin Li    fixed_intrin_sse2.c
45*600f14f4SXin Li    fixed_intrin_ssse3.c
46*600f14f4SXin Li    fixed_intrin_sse42.c
47*600f14f4SXin Li    fixed_intrin_avx2.c
48*600f14f4SXin Li    float.c
49*600f14f4SXin Li    format.c
50*600f14f4SXin Li    lpc.c
51*600f14f4SXin Li    lpc_intrin_neon.c
52*600f14f4SXin Li    lpc_intrin_sse2.c
53*600f14f4SXin Li    lpc_intrin_sse41.c
54*600f14f4SXin Li    lpc_intrin_avx2.c
55*600f14f4SXin Li    lpc_intrin_fma.c
56*600f14f4SXin Li    md5.c
57*600f14f4SXin Li    memory.c
58*600f14f4SXin Li    metadata_iterators.c
59*600f14f4SXin Li    metadata_object.c
60*600f14f4SXin Li    stream_decoder.c
61*600f14f4SXin Li    stream_encoder.c
62*600f14f4SXin Li    stream_encoder_intrin_sse2.c
63*600f14f4SXin Li    stream_encoder_intrin_ssse3.c
64*600f14f4SXin Li    stream_encoder_intrin_avx2.c
65*600f14f4SXin Li    stream_encoder_framing.c
66*600f14f4SXin Li    version.rc
67*600f14f4SXin Li    window.c
68*600f14f4SXin Li    $<$<BOOL:${WIN32}>:../../include/share/win_utf8_io.h>
69*600f14f4SXin Li    $<$<BOOL:${WIN32}>:../share/win_utf8_io/win_utf8_io.c>
70*600f14f4SXin Li    $<$<BOOL:${OGG_FOUND}>:ogg_decoder_aspect.c>
71*600f14f4SXin Li    $<$<BOOL:${OGG_FOUND}>:ogg_encoder_aspect.c>
72*600f14f4SXin Li    $<$<BOOL:${OGG_FOUND}>:ogg_helper.c>
73*600f14f4SXin Li    $<$<BOOL:${OGG_FOUND}>:ogg_mapping.c>)
74*600f14f4SXin Liset_property(TARGET FLAC PROPERTY PROJECT_LABEL "libFLAC")
75*600f14f4SXin Liif(TARGET FLAC-asm)
76*600f14f4SXin Li    target_sources(FLAC PRIVATE $<TARGET_OBJECTS:FLAC-asm>)
77*600f14f4SXin Liendif()
78*600f14f4SXin Li
79*600f14f4SXin Litarget_compile_definitions(FLAC
80*600f14f4SXin Li    PRIVATE $<$<BOOL:${BUILD_SHARED_LIBS}>:FLAC_API_EXPORTS>
81*600f14f4SXin Li    PUBLIC $<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:FLAC__NO_DLL>)
82*600f14f4SXin Liif(NOT WIN32)
83*600f14f4SXin Li    target_compile_definitions(FLAC PRIVATE $<$<BOOL:${BUILD_SHARED_LIBS}>:FLAC__USE_VISIBILITY_ATTR>)
84*600f14f4SXin Liendif()
85*600f14f4SXin Litarget_include_directories(FLAC INTERFACE
86*600f14f4SXin Li    "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
87*600f14f4SXin Li    "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
88*600f14f4SXin Litarget_link_libraries(FLAC PUBLIC $<$<BOOL:${HAVE_LROUND}>:m>)
89*600f14f4SXin Liif(TARGET Ogg::ogg)
90*600f14f4SXin Li    target_link_libraries(FLAC PUBLIC Ogg::ogg)
91*600f14f4SXin Liendif()
92*600f14f4SXin Liif(BUILD_SHARED_LIBS)
93*600f14f4SXin Li    set_target_properties(FLAC PROPERTIES
94*600f14f4SXin Li        VERSION 12.1.0
95*600f14f4SXin Li        SOVERSION 12)
96*600f14f4SXin Li    if(NOT WIN32)
97*600f14f4SXin Li        set_target_properties(FLAC PROPERTIES C_VISIBILITY_PRESET hidden)
98*600f14f4SXin Li    endif()
99*600f14f4SXin Liendif()
100*600f14f4SXin Li
101*600f14f4SXin Licheck_c_compiler_flag("-fassociative-math -fno-signed-zeros -fno-trapping-math -freciprocal-math" HAVE_ASSOC_MATH)
102*600f14f4SXin Li
103*600f14f4SXin Liif(MSVC)
104*600f14f4SXin Li        target_compile_options(FLAC BEFORE PRIVATE "/fp:fast")
105*600f14f4SXin Lielse()
106*600f14f4SXin Li    if(HAVE_ASSOC_MATH)
107*600f14f4SXin Li        target_compile_options(FLAC BEFORE PRIVATE -fassociative-math -fno-signed-zeros -fno-trapping-math -freciprocal-math)
108*600f14f4SXin Li    endif()
109*600f14f4SXin Liendif()
110*600f14f4SXin Li
111*600f14f4SXin Liadd_library(FLAC::FLAC ALIAS FLAC)
112*600f14f4SXin Li
113*600f14f4SXin Liinstall(TARGETS FLAC EXPORT targets
114*600f14f4SXin Li    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/"
115*600f14f4SXin Li    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/"
116*600f14f4SXin Li    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/")
117*600f14f4SXin Li
118*600f14f4SXin Liif(INSTALL_PKGCONFIG_MODULES)
119*600f14f4SXin Li    set(prefix "${CMAKE_INSTALL_PREFIX}")
120*600f14f4SXin Li    set(exec_prefix "${CMAKE_INSTALL_PREFIX}")
121*600f14f4SXin Li    set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
122*600f14f4SXin Li    set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
123*600f14f4SXin Li    configure_file(flac.pc.in flac.pc @ONLY)
124*600f14f4SXin Li    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/flac.pc"
125*600f14f4SXin Li        DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
126*600f14f4SXin Liendif()
127