xref: /aosp_15_r20/external/tinyalsa_new/CMakeLists.txt (revision 02e95f1a335b55495d41ca67eaf42361f13704fa)
1*02e95f1aSMarcin Radomskicmake_minimum_required(VERSION 3.1)
2*02e95f1aSMarcin Radomski
3*02e95f1aSMarcin Radomskiexecute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/version.sh -s print
4*02e95f1aSMarcin Radomski    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
5*02e95f1aSMarcin Radomski    OUTPUT_VARIABLE TINYALSA_VERSION)
6*02e95f1aSMarcin Radomski
7*02e95f1aSMarcin Radomskiproject("TinyALSA" VERSION ${TINYALSA_VERSION} LANGUAGES C)
8*02e95f1aSMarcin Radomski
9*02e95f1aSMarcin Radomskiset(CMAKE_C_STANDARD 99)
10*02e95f1aSMarcin Radomskiset(CMAKE_C_STANDARD_REQUIRED ON)
11*02e95f1aSMarcin Radomskiset(CMAKE_C_EXTENSIONS OFF)
12*02e95f1aSMarcin Radomski
13*02e95f1aSMarcin Radomski# Options
14*02e95f1aSMarcin Radomskioption(BUILD_SHARED_LIBS "Build shared libraries" ON)
15*02e95f1aSMarcin Radomskioption(TINYALSA_USES_PLUGINS "Whether or not to build with plugin support" OFF)
16*02e95f1aSMarcin Radomskioption(TINYALSA_BUILD_EXAMPLES "Build examples" ON)
17*02e95f1aSMarcin Radomskioption(TINYALSA_BUILD_UTILS "Build utility tools" ON)
18*02e95f1aSMarcin Radomski
19*02e95f1aSMarcin Radomski# Library
20*02e95f1aSMarcin Radomskiadd_library("tinyalsa"
21*02e95f1aSMarcin Radomski    "src/pcm.c"
22*02e95f1aSMarcin Radomski    "src/pcm_hw.c"
23*02e95f1aSMarcin Radomski    "src/pcm_plugin.c"
24*02e95f1aSMarcin Radomski    "src/snd_card_plugin.c"
25*02e95f1aSMarcin Radomski    "src/mixer.c"
26*02e95f1aSMarcin Radomski    "src/mixer_hw.c"
27*02e95f1aSMarcin Radomski    "src/mixer_plugin.c")
28*02e95f1aSMarcin Radomski
29*02e95f1aSMarcin Radomskiset_property(TARGET "tinyalsa" PROPERTY PUBLIC_HEADER
30*02e95f1aSMarcin Radomski    "include/tinyalsa/attributes.h"
31*02e95f1aSMarcin Radomski    "include/tinyalsa/version.h"
32*02e95f1aSMarcin Radomski    "include/tinyalsa/asoundlib.h"
33*02e95f1aSMarcin Radomski    "include/tinyalsa/pcm.h"
34*02e95f1aSMarcin Radomski    "include/tinyalsa/plugin.h"
35*02e95f1aSMarcin Radomski    "include/tinyalsa/mixer.h")
36*02e95f1aSMarcin Radomski
37*02e95f1aSMarcin Radomskiset_target_properties("tinyalsa" PROPERTIES
38*02e95f1aSMarcin Radomski    VERSION ${TinyALSA_VERSION}
39*02e95f1aSMarcin Radomski    SOVERSION ${TinyALSA_VERSION_MAJOR})
40*02e95f1aSMarcin Radomski
41*02e95f1aSMarcin Radomskitarget_include_directories("tinyalsa" PUBLIC
42*02e95f1aSMarcin Radomski    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
43*02e95f1aSMarcin Radomski    $<INSTALL_INTERFACE:include>)
44*02e95f1aSMarcin Radomskitarget_compile_definitions("tinyalsa" PRIVATE
45*02e95f1aSMarcin Radomski    $<$<BOOL:${TINYALSA_USES_PLUGINS}>:TINYALSA_USES_PLUGINS>
46*02e95f1aSMarcin Radomski    PUBLIC _POSIX_C_SOURCE=200809L)
47*02e95f1aSMarcin Radomskitarget_link_libraries("tinyalsa" PUBLIC ${CMAKE_DL_LIBS})
48*02e95f1aSMarcin Radomski
49*02e95f1aSMarcin Radomski# Examples
50*02e95f1aSMarcin Radomskiif(TINYALSA_BUILD_EXAMPLES)
51*02e95f1aSMarcin Radomski    set(TINYALSA_EXAMPLES pcm-readi pcm-writei)
52*02e95f1aSMarcin Radomskielse()
53*02e95f1aSMarcin Radomski    set(TINYALSA_EXAMPLES)
54*02e95f1aSMarcin Radomskiendif()
55*02e95f1aSMarcin Radomski
56*02e95f1aSMarcin Radomskiforeach(EXAMPLE IN LISTS TINYALSA_EXAMPLES)
57*02e95f1aSMarcin Radomski    add_executable("${EXAMPLE}" "examples/${EXAMPLE}.c")
58*02e95f1aSMarcin Radomski    target_link_libraries("${EXAMPLE}" PRIVATE "tinyalsa")
59*02e95f1aSMarcin Radomskiendforeach()
60*02e95f1aSMarcin Radomski
61*02e95f1aSMarcin Radomski# Utilities
62*02e95f1aSMarcin Radomskiif(TINYALSA_BUILD_UTILS)
63*02e95f1aSMarcin Radomski    set(TINYALSA_UTILS tinyplay tinycap tinypcminfo tinymix tinywavinfo)
64*02e95f1aSMarcin Radomskielse()
65*02e95f1aSMarcin Radomski    set(TINYALSA_UTILS)
66*02e95f1aSMarcin Radomskiendif()
67*02e95f1aSMarcin Radomski
68*02e95f1aSMarcin Radomskiforeach(UTIL IN LISTS TINYALSA_UTILS)
69*02e95f1aSMarcin Radomski    add_executable("${UTIL}" "utils/${UTIL}.c")
70*02e95f1aSMarcin Radomski    target_link_libraries("${UTIL}" PRIVATE "tinyalsa")
71*02e95f1aSMarcin Radomskiendforeach()
72*02e95f1aSMarcin Radomski
73*02e95f1aSMarcin Radomskiif(TINYALSA_BUILD_UTILS)
74*02e95f1aSMarcin Radomski    target_link_libraries("tinywavinfo" PRIVATE m)
75*02e95f1aSMarcin Radomskiendif()
76*02e95f1aSMarcin Radomski
77*02e95f1aSMarcin Radomski# Add C warning flags
78*02e95f1aSMarcin Radomskiinclude(CheckCCompilerFlag)
79*02e95f1aSMarcin Radomskiforeach(FLAG IN ITEMS -Wall -Wextra -Wpedantic -Werror -Wfatal-errors)
80*02e95f1aSMarcin Radomski    string(TOUPPER "HAVE${FLAG}" HAVE_VAR)
81*02e95f1aSMarcin Radomski    string(REPLACE "-" "_" HAVE_VAR "${HAVE_VAR}")
82*02e95f1aSMarcin Radomski    check_c_compiler_flag("${FLAG}" "${HAVE_VAR}")
83*02e95f1aSMarcin Radomski    if("${${HAVE_VAR}}")
84*02e95f1aSMarcin Radomski        target_compile_options("tinyalsa" PRIVATE "${FLAG}")
85*02e95f1aSMarcin Radomski        foreach(UTIL IN LISTS TINYALSA_UTILS)
86*02e95f1aSMarcin Radomski            target_compile_options("${UTIL}" PRIVATE "${FLAG}")
87*02e95f1aSMarcin Radomski        endforeach()
88*02e95f1aSMarcin Radomski    endif()
89*02e95f1aSMarcin Radomskiendforeach()
90*02e95f1aSMarcin Radomski
91*02e95f1aSMarcin Radomski# Install
92*02e95f1aSMarcin Radomskiinclude(GNUInstallDirs)
93*02e95f1aSMarcin Radomskiinstall(TARGETS "tinyalsa" ${TINYALSA_UTILS}
94*02e95f1aSMarcin Radomski    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
95*02e95f1aSMarcin Radomski    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
96*02e95f1aSMarcin Radomski    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
97*02e95f1aSMarcin Radomski    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tinyalsa)
98