mirror of
https://github.com/cookiengineer/audacity
synced 2026-01-20 15:55:45 +01:00
Support for our own libraries, distinct from modules
This commit is contained in:
@@ -433,6 +433,7 @@ include( "src/Experimental.cmake" )
|
|||||||
add_subdirectory( "cmake-proxies" )
|
add_subdirectory( "cmake-proxies" )
|
||||||
add_subdirectory( "help" )
|
add_subdirectory( "help" )
|
||||||
add_subdirectory( "images" )
|
add_subdirectory( "images" )
|
||||||
|
add_subdirectory( "libraries" )
|
||||||
add_subdirectory( "locale" )
|
add_subdirectory( "locale" )
|
||||||
add_subdirectory( "src" )
|
add_subdirectory( "src" )
|
||||||
add_subdirectory( "modules" )
|
add_subdirectory( "modules" )
|
||||||
|
|||||||
@@ -270,6 +270,7 @@ endfunction()
|
|||||||
function( import_export_symbol var module_name )
|
function( import_export_symbol var module_name )
|
||||||
# compute, e.g. "TRACK_UI_API" from module name "mod-track-ui"
|
# compute, e.g. "TRACK_UI_API" from module name "mod-track-ui"
|
||||||
string( REGEX REPLACE "^mod-" "" symbol "${module_name}" )
|
string( REGEX REPLACE "^mod-" "" symbol "${module_name}" )
|
||||||
|
string( REGEX REPLACE "^lib-" "" symbol "${symbol}" )
|
||||||
string( TOUPPER "${symbol}" symbol )
|
string( TOUPPER "${symbol}" symbol )
|
||||||
string( REPLACE "-" "_" symbol "${symbol}" )
|
string( REPLACE "-" "_" symbol "${symbol}" )
|
||||||
string( APPEND symbol "_API" )
|
string( APPEND symbol "_API" )
|
||||||
@@ -301,7 +302,7 @@ function( export_symbol_define var module_name )
|
|||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
|
function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
|
||||||
ADDITIONAL_DEFINES ADDITIONAL_LIBRARIES )
|
ADDITIONAL_DEFINES ADDITIONAL_LIBRARIES LIBTYPE )
|
||||||
|
|
||||||
set( TARGET ${NAME} )
|
set( TARGET ${NAME} )
|
||||||
set( TARGET_ROOT ${CMAKE_CURRENT_SOURCE_DIR} )
|
set( TARGET_ROOT ${CMAKE_CURRENT_SOURCE_DIR} )
|
||||||
@@ -310,12 +311,30 @@ function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
|
|||||||
|
|
||||||
def_vars()
|
def_vars()
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
if (LIBTYPE STREQUAL "MODULE" AND CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||||
set( LIBTYPE SHARED )
|
set( REAL_LIBTYPE SHARED )
|
||||||
else()
|
else()
|
||||||
set( LIBTYPE MODULE )
|
set( REAL_LIBTYPE "${LIBTYPE}" )
|
||||||
|
endif()
|
||||||
|
add_library( ${TARGET} ${REAL_LIBTYPE} )
|
||||||
|
|
||||||
|
if (LIBTYPE STREQUAL "MODULE")
|
||||||
|
set( SHAPE "box" )
|
||||||
|
set_target_property_all( ${TARGET} LIBRARY_OUTPUT_DIRECTORY "${_MODDIR}" )
|
||||||
|
set_target_properties( ${TARGET}
|
||||||
|
PROPERTIES
|
||||||
|
PREFIX ""
|
||||||
|
FOLDER "modules" # for IDE organization
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set( SHAPE "octagon" )
|
||||||
|
set_target_property_all( ${TARGET} LIBRARY_OUTPUT_DIRECTORY "${_EXEDIR}" )
|
||||||
|
set_target_properties( ${TARGET}
|
||||||
|
PROPERTIES
|
||||||
|
PREFIX ""
|
||||||
|
FOLDER "libraries" # for IDE organization
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
add_library( ${TARGET} ${LIBTYPE} )
|
|
||||||
|
|
||||||
export_symbol_define( export_symbol "${TARGET}" )
|
export_symbol_define( export_symbol "${TARGET}" )
|
||||||
import_symbol_define( import_symbol "${TARGET}" )
|
import_symbol_define( import_symbol "${TARGET}" )
|
||||||
@@ -337,13 +356,6 @@ function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
|
|||||||
endforeach()
|
endforeach()
|
||||||
list( APPEND LIBRARIES ${ADDITIONAL_LIBRARIES} )
|
list( APPEND LIBRARIES ${ADDITIONAL_LIBRARIES} )
|
||||||
|
|
||||||
set_target_property_all( ${TARGET} LIBRARY_OUTPUT_DIRECTORY "${_MODDIR}" )
|
|
||||||
set_target_properties( ${TARGET}
|
|
||||||
PROPERTIES
|
|
||||||
PREFIX ""
|
|
||||||
FOLDER "modules"
|
|
||||||
)
|
|
||||||
|
|
||||||
# list( TRANSFORM SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/" )
|
# list( TRANSFORM SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/" )
|
||||||
|
|
||||||
# Compute compilation options.
|
# Compute compilation options.
|
||||||
@@ -362,7 +374,7 @@ function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
|
|||||||
|
|
||||||
# define an additional interface library target
|
# define an additional interface library target
|
||||||
set(INTERFACE_TARGET "${TARGET}-interface")
|
set(INTERFACE_TARGET "${TARGET}-interface")
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
if (NOT REAL_LIBTYPE STREQUAL "MODULE")
|
||||||
add_library("${INTERFACE_TARGET}" ALIAS "${TARGET}")
|
add_library("${INTERFACE_TARGET}" ALIAS "${TARGET}")
|
||||||
else()
|
else()
|
||||||
add_library("${INTERFACE_TARGET}" INTERFACE)
|
add_library("${INTERFACE_TARGET}" INTERFACE)
|
||||||
@@ -377,7 +389,10 @@ function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# collect dependency information
|
# collect dependency information
|
||||||
list( APPEND GRAPH_EDGES "\"${TARGET}\" [shape=box]" )
|
list( APPEND GRAPH_EDGES "\"${TARGET}\" [shape=${SHAPE}]" )
|
||||||
|
if (NOT LIBTYPE STREQUAL "MODULE")
|
||||||
|
list( APPEND GRAPH_EDGES "\"Audacity\" -> \"${TARGET}\"" )
|
||||||
|
endif ()
|
||||||
set(ACCESS PUBLIC PRIVATE INTERFACE)
|
set(ACCESS PUBLIC PRIVATE INTERFACE)
|
||||||
foreach( IMPORT ${IMPORT_TARGETS} )
|
foreach( IMPORT ${IMPORT_TARGETS} )
|
||||||
if(IMPORT IN_LIST ACCESS)
|
if(IMPORT IN_LIST ACCESS)
|
||||||
@@ -409,10 +424,35 @@ macro( audacity_module NAME SOURCES IMPORT_TARGETS
|
|||||||
"${IMPORT_TARGETS}"
|
"${IMPORT_TARGETS}"
|
||||||
"${ADDITIONAL_DEFINES}"
|
"${ADDITIONAL_DEFINES}"
|
||||||
"${ADDITIONAL_LIBRARIES}"
|
"${ADDITIONAL_LIBRARIES}"
|
||||||
|
"MODULE"
|
||||||
)
|
)
|
||||||
set( GRAPH_EDGES "${GRAPH_EDGES}" PARENT_SCOPE )
|
set( GRAPH_EDGES "${GRAPH_EDGES}" PARENT_SCOPE )
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
# Set up for defining a library target.
|
||||||
|
# The application depends on all libraries.
|
||||||
|
# Pass a name and sources, and a list of other targets.
|
||||||
|
# Use the interface compile definitions and include directories of the
|
||||||
|
# other targets, and link to them.
|
||||||
|
# More defines, and more target libraries (maybe generator expressions)
|
||||||
|
# may be given too.
|
||||||
|
macro( audacity_library NAME SOURCES IMPORT_TARGETS
|
||||||
|
ADDITIONAL_DEFINES ADDITIONAL_LIBRARIES )
|
||||||
|
# ditto comment in the previous macro
|
||||||
|
audacity_module_fn(
|
||||||
|
"${NAME}"
|
||||||
|
"${SOURCES}"
|
||||||
|
"${IMPORT_TARGETS}"
|
||||||
|
"${ADDITIONAL_DEFINES}"
|
||||||
|
"${ADDITIONAL_LIBRARIES}"
|
||||||
|
"SHARED"
|
||||||
|
)
|
||||||
|
set( GRAPH_EDGES "${GRAPH_EDGES}" PARENT_SCOPE )
|
||||||
|
# Collect list of libraries for the executable to declare dependency on
|
||||||
|
list( APPEND AUDACITY_LIBRARIES "${NAME}" )
|
||||||
|
set( AUDACITY_LIBRARIES "${AUDACITY_LIBRARIES}" PARENT_SCOPE )
|
||||||
|
endmacro()
|
||||||
|
|
||||||
#
|
#
|
||||||
# Add individual library targets
|
# Add individual library targets
|
||||||
#
|
#
|
||||||
|
|||||||
13
libraries/CMakeLists.txt
Normal file
13
libraries/CMakeLists.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Include the libraries that we'll build
|
||||||
|
|
||||||
|
# The list of modules is ordered so that each library occurs after any others
|
||||||
|
# that it depends on
|
||||||
|
set( LIBRARIES
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach( LIBRARY ${LIBRARIES} )
|
||||||
|
add_subdirectory("${LIBRARY}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set( GRAPH_EDGES "${GRAPH_EDGES}" PARENT_SCOPE )
|
||||||
|
set( AUDACITY_LIBRARIES "${AUDACITY_LIBRARIES}" PARENT_SCOPE )
|
||||||
@@ -1321,6 +1321,7 @@ target_compile_options( ${TARGET} PRIVATE ${OPTIONS} )
|
|||||||
target_include_directories( ${TARGET} PRIVATE ${INCLUDES} )
|
target_include_directories( ${TARGET} PRIVATE ${INCLUDES} )
|
||||||
target_link_options( ${TARGET} PRIVATE ${LDFLAGS} )
|
target_link_options( ${TARGET} PRIVATE ${LDFLAGS} )
|
||||||
target_link_libraries( ${TARGET} ${LIBRARIES} )
|
target_link_libraries( ${TARGET} ${LIBRARIES} )
|
||||||
|
target_link_libraries( ${TARGET} PUBLIC ${AUDACITY_LIBRARIES} )
|
||||||
|
|
||||||
if( CMAKE_VERSION VERSION_GREATER_EQUAL "3.16" AND NOT CCACHE_PROGRAM )
|
if( CMAKE_VERSION VERSION_GREATER_EQUAL "3.16" AND NOT CCACHE_PROGRAM )
|
||||||
if( ${_OPT}use_pch )
|
if( ${_OPT}use_pch )
|
||||||
|
|||||||
Reference in New Issue
Block a user