sfizz/cmake/PuredataConfig.cmake
2021-04-30 15:25:00 +02:00

59 lines
2.1 KiB
CMake

find_path(PD_INCLUDE_BASEDIR "m_pd.h" PATH_SUFFIXES "pd")
set(PD_IMP_DEF "${PROJECT_SOURCE_DIR}/plugins/puredata/external/pd/bin/pd.def")
if(PD_INCLUDE_BASEDIR)
message(STATUS "Puredata headers: ${PUREDATA_INCLUDE_DIR}")
else()
message(STATUS "Puredata headers not found, using our own")
set(PD_INCLUDE_BASEDIR "${PROJECT_SOURCE_DIR}/plugins/puredata/external/pd/include")
endif()
if(WIN32)
set(PUREDATA_SUFFIX ".dll")
elseif(APPLE)
set(PUREDATA_SUFFIX ".pd_darwin")
else()
set(PUREDATA_SUFFIX ".pd_linux")
endif()
if(WIN32)
add_library(pdex-implib STATIC IMPORTED)
if(MSVC)
add_custom_command(
OUTPUT "pd.lib"
COMMAND "lib" "/out:pd.lib" "/def:${PD_IMP_DEF}" "/machine:${MSVC_C_ARCHITECTURE_ID}"
DEPENDS "${PD_IMP_DEF}")
add_custom_target(pdex-implib-generated
DEPENDS "pd.lib")
set_target_properties(pdex-implib PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/pd.lib")
else()
find_program(PD_DLLTOOL_PROGRAM "dlltool")
if(NOT PD_DLLTOOL_PROGRAM)
message(FATAL_ERROR "Cannot find dlltool")
endif()
add_custom_command(
OUTPUT "libpd.dll.a"
COMMAND "${PD_DLLTOOL_PROGRAM}" "-l" "libpd.dll.a" "-d" "${PD_IMP_DEF}"
DEPENDS "${PD_IMP_DEF}")
add_custom_target(pdex-implib-generated
DEPENDS "libpd.dll.a")
set_target_properties(pdex-implib PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/libpd.dll.a")
endif()
add_dependencies(pdex-implib pdex-implib-generated)
endif()
function(add_pd_external TARGET)
add_library("${TARGET}" MODULE ${ARGN})
target_include_directories("${TARGET}" PRIVATE "${PD_INCLUDE_BASEDIR}")
set_target_properties("${TARGET}" PROPERTIES
PREFIX ""
SUFFIX "${PUREDATA_SUFFIX}")
if(APPLE)
set_property(TARGET "${TARGET}" APPEND_STRING
PROPERTY LINK_FLAGS " -Wl,-undefined,suppress,-flat_namespace")
elseif(WIN32)
target_link_libraries("${TARGET}" PRIVATE pdex-implib)
endif()
endfunction()