CMake: Handier way to find Iconv
[flac.git] / src / libFLAC / CMakeLists.txt
blobad9405e71a478002fbd28ad112a012413d03871d
1 if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86(_64)?|(AMD|amd)64|i[346]86")
2     option(WITH_AVX "Enable AVX, AVX2 optimizations" ON)
3 endif()
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)
15         set(IA32 TRUE)
16     endif()
17     add_definitions(-DFLAC__CPU_X86_64 -DFLAC__ALIGN_MALLOC_DATA)
18 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "([xX]|i[346])86")
19     set(IA32 TRUE)
20     add_definitions(-DFLAC__CPU_IA32 -DFLAC__ALIGN_MALLOC_DATA)
21 endif()
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)
28 endif()
30 if(NOT WITH_ASM)
31     add_definitions(-DFLAC__NO_ASM)
32 endif()
34 if(IA32)
35     if(WITH_ASM AND CMAKE_ASM_NASM_COMPILER)
36         add_subdirectory(ia32)
37     endif()
39     option(WITH_SSE "Enable SSE2 optimizations" ON)
40     check_c_compiler_flag(-msse2 HAVE_MSSE2_FLAG)
41     if(WITH_SSE)
42         add_compile_options(
43             $<$<BOOL:${HAVE_MSSE2_FLAG}>:-msse2>
44             $<$<BOOL:${MSVC}>:/arch:SSE2>)
45     endif()
46 endif()
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")
57 add_library(FLAC
58     bitmath.c
59     bitreader.c
60     bitwriter.c
61     cpu.c
62     crc.c
63     fixed.c
64     fixed_intrin_sse2.c
65     fixed_intrin_ssse3.c
66     float.c
67     format.c
68     lpc.c
69     lpc_intrin_sse.c
70     lpc_intrin_sse2.c
71     lpc_intrin_sse41.c
72     lpc_intrin_avx2.c
73     lpc_intrin_vsx.c
74     md5.c
75     memory.c
76     metadata_iterators.c
77     metadata_object.c
78     stream_decoder.c
79     stream_encoder.c
80     stream_encoder_intrin_sse2.c
81     stream_encoder_intrin_ssse3.c
82     stream_encoder_intrin_avx2.c
83     stream_encoder_framing.c
84     window.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>)
89 if(TARGET FLAC-asm)
90     target_sources(FLAC PRIVATE $<TARGET_OBJECTS:FLAC-asm>)
91 endif()
92 if(WIN32)
93     target_sources(FLAC PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/windows_unicode_filenames.c>)
94 endif()
96 target_compile_definitions(FLAC
97     PRIVATE $<$<BOOL:${BUILD_SHARED_LIBS}>:FLAC_API_EXPORTS>
98     PUBLIC $<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:FLAC__NO_DLL>)
99 if(NOT WIN32)
100     target_compile_definitions(FLAC PRIVATE $<$<BOOL:${BUILD_SHARED_LIBS}>:FLAC__USE_VISIBILITY_ATTR>)
101 endif()
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>)
106 if(TARGET Ogg::ogg)
107     target_link_libraries(FLAC PUBLIC Ogg::ogg)
108 endif()
109 if(BUILD_SHARED_LIBS)
110     set_target_properties(FLAC PROPERTIES
111         VERSION 8.3.0
112         SOVERSION 8)
113     if(NOT WIN32)
114         set_target_properties(FLAC PROPERTIES C_VISIBILITY_PRESET hidden)
115     endif()
116 endif()
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")