From cdbc78e54f1103cf9abceaed676cee763c9e83da Mon Sep 17 00:00:00 2001 From: Nicholas Appleton Date: Sat, 27 Aug 2016 10:43:42 +1000 Subject: [PATCH] change the compiler flags into a compiler definitions list as we never modify the flags - add some documentation --- CMakeLists.txt | 78 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 71b75c3..3604c6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,37 @@ IF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR}) ENDIF(WIN32 AND MSVC) ENDIF() +# Most of the code from this point onwards is related to populating the +# following variables: +# PA_PUBLIC_INCLUDES - This contains the list of public PortAudio header +# files. These files will be copied into /include paths on Unix'y +# systems when "make install" is invoked. +# PA_PRIVATE_INCLUDES - This contains the list of header files which +# are not part of PortAudio, but are required by the various hostapis. +# It is only used by CMake IDE generators (like Visual Studio) to +# provide quick-links to useful headers. It has no impact on build +# output. +# PA_PRIVATE_INCLUDE_PATHS - This contains the list of include paths which +# will be passed to the compiler while PortAudio is being built which +# are not required by applications using the PortAudio API. +# PA_PRIVATE_COMPILE_DEFINITIONS - This contains a list of preprocessor +# macro definitions which will be set when compiling PortAudio source +# files. +# PA_SOURCES - This contains the list of source files which will be built +# into the static and shared PortAudio libraries. +# PA_NON_UNICODE_SOURCES - This also contains a list of source files which +# will be build into the static and shared PortAudio libraries. However, +# these sources will not have any unicode compiler definitions added +# to them. This list should only contain external source dependencies. +# PA_EXTRA_SHARED_SOURCES - Contains a list of extra files which will be +# associated only with the shared PortAudio library. This only seems +# relevant for Windows shared libraries which require a list of export +# symbols. +# Where other PA_* variables are set, these are almost always only used to +# preserve the historic SOURCE_GROUP behavior (which again only has an impact +# on IDE-style generators for visual appearance) or store the output of +# find_library() calls. + SET(PA_COMMON_INCLUDES src/common/pa_allocation.h src/common/pa_converters.h @@ -80,7 +111,7 @@ SET(PA_PRIVATE_INCLUDE_PATHS src/common ${CMAKE_CURRENT_BINARY_DIR}) IF(WIN32) IF(MSVC) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -D_CRT_SECURE_NO_WARNINGS") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} _CRT_SECURE_NO_WARNINGS) ENDIF(MSVC) SET(PA_PLATFORM_SOURCES @@ -117,7 +148,7 @@ IF(WIN32) SOURCE_GROUP("hostapi\\ASIO\\ASIOSDK" FILES ${PA_ASIOSDK_SOURCES}) SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_asio.h) SET(PA_SOURCES ${PA_SOURCES} ${PA_ASIO_SOURCES}) - SET(PA_EXTERN_SOURCES ${PA_EXTERN_SOURCES} ${PA_ASIOSDK_SOURCES}) + SET(PA_NON_UNICODE_SOURCES ${PA_NON_UNICODE_SOURCES} ${PA_ASIOSDK_SOURCES}) ELSE() # Set variables for DEF file expansion SET(DEF_EXCLUDE_ASIO_SYMBOLS ";") @@ -134,7 +165,7 @@ IF(WIN32) OPTION(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE "Use DirectSound full duplex create" ON) MARK_AS_ADVANCED(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE) IF(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE) ENDIF(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE) SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} ${DXSDK_INCLUDE_DIR}) SET(PA_DS_INCLUDES src/hostapi/dsound/pa_win_ds_dynlink.h) @@ -181,21 +212,16 @@ IF(WIN32) OPTION(PA_USE_WDMKS_DEVICE_INFO "Use WDM/KS API for device info" ON) MARK_AS_ADVANCED(PA_USE_WDMKS_DEVICE_INFO) IF(PA_USE_WDMKS_DEVICE_INFO) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPAWIN_USE_WDMKS_DEVICE_INFO") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PAWIN_USE_WDMKS_DEVICE_INFO) ENDIF(PA_USE_WDMKS_DEVICE_INFO) SET(GENERATED_MESSAGE "CMake generated file, do NOT edit! Use CMake-GUI to change configuration instead.") - CONFIGURE_FILE( cmake_support/template_portaudio.def ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def @ONLY ) - CONFIGURE_FILE( cmake_support/options_cmake.h.in ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h @ONLY ) - SET(PA_EXTERN_SOURCES ${PA_EXTERN_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPORTAUDIO_CMAKE_GENERATED") + CONFIGURE_FILE(cmake_support/template_portaudio.def ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def @ONLY) + CONFIGURE_FILE(cmake_support/options_cmake.h.in ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h @ONLY) + SET(PA_PRIVATE_INCLUDES ${PA_PRIVATE_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h) + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PORTAUDIO_CMAKE_GENERATED) SOURCE_GROUP("cmake_generated" FILES ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h) - OPTION(PA_UNICODE_BUILD "Enable Portaudio Unicode build" ON) - IF(PA_UNICODE_BUILD) - SET_SOURCE_FILES_PROPERTIES(${PA_SOURCES} PROPERTIES COMPILE_DEFINITIONS "UNICODE;_UNICODE") - ENDIF(PA_UNICODE_BUILD) - SET(PA_EXTRA_SHARED_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def) ELSE() @@ -228,7 +254,7 @@ ELSE() FIND_LIBRARY(CARBON_LIBRARY Carbon REQUIRED) MARK_AS_ADVANCED(COREAUDIO_LIBRARY AUDIOTOOLBOX_LIBRARY AUDIOUNIT_LIBRARY CARBON_LIBRARY) SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${COREAUDIO_LIBRARY} ${AUDIOTOOLBOX_LIBRARY} ${AUDIOUNIT_LIBRARY} ${CARBON_LIBRARY}) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPA_USE_COREAUDIO") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_USE_COREAUDIO) SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon") ENDIF() @@ -246,7 +272,7 @@ ELSE() SOURCE_GROUP("hostapi\\JACK" FILES ${PA_JACK_SOURCES}) SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_jack.h) SET(PA_SOURCES ${PA_SOURCES} ${PA_JACK_SOURCES}) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPA_USE_JACK") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_USE_JACK) SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${JACK_LIBRARIES}) SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -ljack") ENDIF(PA_USE_JACK) @@ -263,7 +289,7 @@ ELSE() SOURCE_GROUP("hostapi\\ALSA" FILES ${PA_ALSA_SOURCES}) SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_linux_alsa.h) SET(PA_SOURCES ${PA_SOURCES} ${PA_ALSA_SOURCES}) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPA_USE_ALSA") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_USE_ALSA) SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${ALSA_LIBRARIES}) SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -lasound") ENDIF(PA_USE_ALSA) @@ -279,28 +305,34 @@ SOURCE_GROUP("include" FILES ${PA_PUBLIC_INCLUDES}) SET(PA_INCLUDES ${PA_PRIVATE_INCLUDES} ${PA_PUBLIC_INCLUDES}) -ADD_LIBRARY(portaudio SHARED ${PA_INCLUDES} ${PA_COMMON_INCLUDES} ${PA_SOURCES} ${PA_EXTERN_SOURCES} ${PA_EXTRA_SHARED_SOURCES}) -ADD_LIBRARY(portaudio_static STATIC ${PA_INCLUDES} ${PA_COMMON_INCLUDES} ${PA_SOURCES} ${PA_EXTERN_SOURCES}) +IF(WIN32) + OPTION(PA_UNICODE_BUILD "Enable Portaudio Unicode build" ON) + IF(PA_UNICODE_BUILD) + SET_SOURCE_FILES_PROPERTIES(${PA_SOURCES} PROPERTIES COMPILE_DEFINITIONS "UNICODE;_UNICODE") + ENDIF(PA_UNICODE_BUILD) +ENDIF() OPTION(PA_ENABLE_DEBUG_OUTPUT "Enable debug output for Portaudio" OFF) IF(PA_ENABLE_DEBUG_OUTPUT) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPA_ENABLE_DEBUG_OUTPUT") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_ENABLE_DEBUG_OUTPUT) ENDIF() INCLUDE(TestBigEndian) TEST_BIG_ENDIAN(IS_BIG_ENDIAN) IF(IS_BIG_ENDIAN) - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPA_BIG_ENDIAN") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_BIG_ENDIAN) ELSE() - SET(PA_PRIVATE_COMPILE_FLAGS "${PA_PRIVATE_COMPILE_FLAGS} -DPA_LITTLE_ENDIAN") + SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_LITTLE_ENDIAN) ENDIF() -SET_PROPERTY(TARGET portaudio APPEND_STRING PROPERTY COMPILE_FLAGS ${PA_PRIVATE_COMPILE_FLAGS}) +ADD_LIBRARY(portaudio SHARED ${PA_INCLUDES} ${PA_COMMON_INCLUDES} ${PA_SOURCES} ${PA_NON_UNICODE_SOURCES} ${PA_EXTRA_SHARED_SOURCES}) +SET_PROPERTY(TARGET portaudio APPEND_STRING PROPERTY COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS}) TARGET_INCLUDE_DIRECTORIES(portaudio PRIVATE ${PA_PRIVATE_INCLUDE_PATHS}) TARGET_INCLUDE_DIRECTORIES(portaudio PUBLIC include) TARGET_LINK_LIBRARIES(portaudio ${PA_LIBRARY_DEPENDENCIES}) -SET_PROPERTY(TARGET portaudio_static APPEND_STRING PROPERTY COMPILE_FLAGS ${PA_PRIVATE_COMPILE_FLAGS}) +ADD_LIBRARY(portaudio_static STATIC ${PA_INCLUDES} ${PA_COMMON_INCLUDES} ${PA_SOURCES} ${PA_NON_UNICODE_SOURCES}) +SET_PROPERTY(TARGET portaudio_static APPEND_STRING PROPERTY COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS}) TARGET_INCLUDE_DIRECTORIES(portaudio_static PRIVATE ${PA_PRIVATE_INCLUDE_PATHS}) TARGET_INCLUDE_DIRECTORIES(portaudio_static PUBLIC include) TARGET_LINK_LIBRARIES(portaudio_static ${PA_LIBRARY_DEPENDENCIES}) -- 2.43.0