mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Generate *_API compiler definitions for modules...
... So mod-foo defines FOO_API properly on the command line, for use in its public header files; on Windows, appropriately expanding one way when compiling the library, another way when compiling other code that uses it, so that all will link correctly.
This commit is contained in:
parent
5844b2090a
commit
9fb32528d6
@ -221,6 +221,39 @@ function( audacity_append_common_compiler_options var )
|
|||||||
set( ${var} "${${var}}" PARENT_SCOPE )
|
set( ${var} "${${var}}" PARENT_SCOPE )
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function( import_export_symbol var module_name )
|
||||||
|
# compute, e.g. "TRACK_UI_API" from module name "mod-track-ui"
|
||||||
|
string( REGEX REPLACE "^mod-" "" symbol "${module_name}" )
|
||||||
|
string( TOUPPER "${symbol}" symbol )
|
||||||
|
string( REPLACE "-" "_" symbol "${symbol}" )
|
||||||
|
string( APPEND symbol "_API" )
|
||||||
|
set( "${var}" "${symbol}" PARENT_SCOPE )
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function( import_symbol_define var module_name )
|
||||||
|
import_export_symbol( symbol "${module_name}" )
|
||||||
|
if( CMAKE_SYSTEM_NAME MATCHES "Windows" )
|
||||||
|
set( value "_declspec(dllimport)" )
|
||||||
|
elseif( HAVE_VISIBILITY )
|
||||||
|
set( value "__attribute__((visibility(\"default\")))" )
|
||||||
|
else()
|
||||||
|
set( value "" )
|
||||||
|
endif()
|
||||||
|
set( "${var}" "${symbol}=${value}" PARENT_SCOPE )
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function( export_symbol_define var module_name )
|
||||||
|
import_export_symbol( symbol "${module_name}" )
|
||||||
|
if( CMAKE_SYSTEM_NAME MATCHES "Windows" )
|
||||||
|
set( value "_declspec(dllexport)" )
|
||||||
|
elseif( HAVE_VISIBILITY )
|
||||||
|
set( value "__attribute__((visibility(\"default\")))" )
|
||||||
|
else()
|
||||||
|
set( value "" )
|
||||||
|
endif()
|
||||||
|
set( "${var}" "${symbol}=${value}" PARENT_SCOPE )
|
||||||
|
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 )
|
||||||
|
|
||||||
@ -238,6 +271,14 @@ function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
|
|||||||
endif()
|
endif()
|
||||||
add_library( ${TARGET} ${LIBTYPE} )
|
add_library( ${TARGET} ${LIBTYPE} )
|
||||||
|
|
||||||
|
export_symbol_define( export_symbol "${TARGET}" )
|
||||||
|
import_symbol_define( import_symbol "${TARGET}" )
|
||||||
|
set( DEFINES
|
||||||
|
${ADDITIONAL_DEFINES}
|
||||||
|
PRIVATE "${export_symbol}"
|
||||||
|
INTERFACE "${import_symbol}"
|
||||||
|
)
|
||||||
|
|
||||||
set( LOPTS
|
set( LOPTS
|
||||||
PRIVATE
|
PRIVATE
|
||||||
$<$<PLATFORM_ID:Darwin>:-undefined dynamic_lookup>
|
$<$<PLATFORM_ID:Darwin>:-undefined dynamic_lookup>
|
||||||
@ -266,7 +307,7 @@ function( audacity_module_fn NAME SOURCES IMPORT_TARGETS
|
|||||||
|
|
||||||
organize_source( "${TARGET_ROOT}" "" "${SOURCES}" )
|
organize_source( "${TARGET_ROOT}" "" "${SOURCES}" )
|
||||||
target_sources( ${TARGET} PRIVATE ${SOURCES} )
|
target_sources( ${TARGET} PRIVATE ${SOURCES} )
|
||||||
target_compile_definitions( ${TARGET} PRIVATE ${ADDITIONAL_DEFINES} )
|
target_compile_definitions( ${TARGET} PRIVATE ${DEFINES} )
|
||||||
target_compile_options( ${TARGET} ${OPTIONS} )
|
target_compile_options( ${TARGET} ${OPTIONS} )
|
||||||
target_include_directories( ${TARGET} PUBLIC ${TARGET_ROOT} )
|
target_include_directories( ${TARGET} PUBLIC ${TARGET_ROOT} )
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user