X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=CMakeLists.txt;h=b88963ff7c26ab940eab9041aa381dd59d7611d2;hb=896623a4775363c48648fdf3d88e8928040285ee;hp=d220bc7500f8b943ecbfeb503281e1941411d4a0;hpb=4690b26068191afa44dc8a872e250990acb1d175;p=rtaudio.git diff --git a/CMakeLists.txt b/CMakeLists.txt index d220bc7..b88963f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # Set minimum CMake required version for this project. -cmake_minimum_required(VERSION 3.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.10 FATAL_ERROR) # Define a C++ project. project(RtAudio LANGUAGES CXX) @@ -24,17 +24,23 @@ elseif(UNIX AND NOT APPLE) endif() # Necessary for Windows -if(WIN32) +if(MINGW) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) - set(CMAKE_DEBUG_POSTFIX "d") +endif() + +# Standard CMake options +option(BUILD_SHARED_LIBS "Build as shared library" ON) + +if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release;RelWithDebInfo;MinSizeRel") +endif() +if(WINDOWS) + set(CMAKE_DEBUG_POSTFIX d CACHE STRING "Postfix for debug version of library") endif() # Build Options -option(BUILD_SHARED_LIBS "Compile library shared lib." TRUE) -option(BUILD_STATIC_LIBS "Compile library static lib." TRUE) -option(BUILD_TESTING "Compile test programs." TRUE) -option(BUILD_PYTHON "Build PyRtAudio python bindings" OFF) -set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type (Release,Debug)") +option(RTAUDIO_BUILD_PYTHON "Build PyRtAudio python bindings" OFF) +set(RTAUDIO_TARGETNAME_UNINSTALL "uninstall" CACHE STRING "Name of 'uninstall' build target") # API Options option(RTAUDIO_API_DS "Build DirectSound API" OFF) @@ -177,6 +183,7 @@ endif() # WASAPI if (RTAUDIO_API_WASAPI) + include_directories(include) set(NEED_WIN32LIBS ON) list(APPEND LINKLIBS ksuser mfplat mfuuid wmcodecdspuuid) list(APPEND API_DEFS "-D__WINDOWS_WASAPI__") @@ -199,57 +206,55 @@ endif() # Create library targets. cmake_policy(SET CMP0042 OLD) set(LIB_TARGETS) -if(BUILD_SHARED_LIBS) - add_library(rtaudio SHARED ${rtaudio_SOURCES}) - list(APPEND LIB_TARGETS rtaudio) - - # Add headers destination for install rule. - set_target_properties(rtaudio PROPERTIES PUBLIC_HEADER RtAudio.h - SOVERSION ${SO_VER} - VERSION ${FULL_VER}) - - # Set include paths, populate target interface. - target_include_directories(rtaudio PRIVATE - $ - $ - ${INCDIRS}) - - # Set compile-time definitions - target_compile_definitions(rtaudio PRIVATE ${API_DEFS}) - target_compile_definitions(rtaudio PRIVATE RTAUDIO_EXPORT) - - target_link_libraries(rtaudio ${LINKLIBS}) -endif() -if(BUILD_STATIC_LIBS) - add_library(rtaudio_static STATIC ${rtaudio_SOURCES}) - list(APPEND LIB_TARGETS rtaudio_static) +# Use RTAUDIO_BUILD_SHARED_LIBS / RTAUDIO_BUILD_STATIC_LIBS if they +# are defined, otherwise default to standard BUILD_SHARED_LIBS. +if (DEFINED RTAUDIO_BUILD_SHARED_LIBS) + if (RTAUDIO_BUILD_SHARED_LIBS) + add_library(rtaudio SHARED ${rtaudio_SOURCES}) + else() + add_library(rtaudio STATIC ${rtaudio_SOURCES}) + endif() +elseif (DEFINED RTAUDIO_BUILD_STATIC_LIBS) + if (RTAUDIO_BUILD_STATIC_LIBS) + add_library(rtaudio STATIC ${rtaudio_SOURCES}) + else() + add_library(rtaudio SHARED ${rtaudio_SOURCES}) + endif() +else() + add_library(rtaudio ${rtaudio_SOURCES}) +endif() +list(APPEND LIB_TARGETS rtaudio) - # Add headers destination for install rule. - set_target_properties(rtaudio_static PROPERTIES PUBLIC_HEADER RtAudio.h - SOVERSION ${SO_VER} - VERSION ${FULL_VER}) +# Add headers destination for install rule. +set_target_properties(rtaudio PROPERTIES PUBLIC_HEADER RtAudio.h + SOVERSION ${SO_VER} + VERSION ${FULL_VER}) - # Set include paths, populate target interface. - target_include_directories(rtaudio_static PRIVATE - $ - $ - ${INCDIRS}) +# Set include paths, populate target interface. +target_include_directories(rtaudio PRIVATE + $ + $ + ${INCDIRS}) - # Set compile-time definitions - target_compile_definitions(rtaudio_static PRIVATE ${API_DEFS}) +# Set compile-time definitions +target_compile_definitions(rtaudio PRIVATE ${API_DEFS}) +target_compile_definitions(rtaudio PRIVATE RTAUDIO_EXPORT) +target_link_libraries(rtaudio ${LINKLIBS}) - target_link_libraries(rtaudio_static ${LINKLIBS}) -endif() # Set standard installation directories. include(GNUInstallDirs) # Subdirs -if (BUILD_TESTING) - include(CTest) +include(CTest) + +if (NOT DEFINED RTAUDIO_BUILD_TESTING OR RTAUDIO_BUILD_TESTING STREQUAL "") + set(RTAUDIO_BUILD_TESTING ${BUILD_TESTING}) +endif() +if (RTAUDIO_BUILD_TESTING) add_subdirectory(tests) -endif (BUILD_TESTING) +endif() # Message string(REPLACE ";" " " apilist "${API_LIST}") @@ -259,7 +264,7 @@ message(STATUS "Compiling with support for: ${apilist}") string(REPLACE ";" " " req "${PKGCONFIG_REQUIRES}") string(REPLACE ";" " " api "${API_DEFS}") set(prefix ${CMAKE_INSTALL_PREFIX}) -configure_file("rtaudio.pc.in" "rtaudio.pc" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/rtaudio.pc.in" "rtaudio.pc" @ONLY) # Add install rule. install(TARGETS ${LIB_TARGETS} @@ -273,14 +278,14 @@ install(TARGETS ${LIB_TARGETS} export(PACKAGE RtAudio) # Set installation path for CMake files. -if(WIN32) - set(RTAUDIO_CMAKE_DESTINATION cmake) -else() - set(RTAUDIO_CMAKE_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/RtAudio) -endif() +set(RTAUDIO_CMAKE_DESTINATION share/rtaudio) # Create CMake configuration export file. -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/RtAudioConfig.cmake "include(\${CMAKE_CURRENT_LIST_DIR}/RtAudioTargets.cmake)") +if(NEED_PTHREAD) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/RtAudioConfig.cmake "find_package(Threads REQUIRED)\n") +endif() + +file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/RtAudioConfig.cmake "include(\${CMAKE_CURRENT_LIST_DIR}/RtAudioTargets.cmake)") # Install CMake configuration export file. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/RtAudioConfig.cmake @@ -301,7 +306,7 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/RtAudioConfigUninstall.cmake" @ONLY) # Create uninstall target. -add_custom_target(uninstall +add_custom_target(${RTAUDIO_TARGETNAME_UNINSTALL} COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/RtAudioConfigUninstall.cmake) install(