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