From 762fbe1b37767c417a6cae3c11793508064e8550 Mon Sep 17 00:00:00 2001 From: Samuel Nicholas Date: Thu, 28 Nov 2024 13:44:54 +1030 Subject: [PATCH] CMake add select transitive target properties, and macos rpath handling prepending target properties with INTERFACE_ makes the property transitive to consumers. add INTERFACE_ to BUILD_RPATH_USE_ORIGIN add INTERFACE_ to POSITION_INDEPENDENT_CODE add INTERFACE_ to OSX_ARCHITECTURES enable INTERFACE_MACOSX_RPATH for origin rpath on macos --- cmake/godotcpp.cmake | 6 +++++- cmake/macos.cmake | 5 +++++ test/CMakeLists.txt | 7 ------- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/cmake/godotcpp.cmake b/cmake/godotcpp.cmake index 736d1e3e7..312a61790 100644 --- a/cmake/godotcpp.cmake +++ b/cmake/godotcpp.cmake @@ -264,8 +264,12 @@ function( godotcpp_generate ) CXX_VISIBILITY_PRESET ${GODOT_SYMBOL_VISIBILITY} COMPILE_WARNING_AS_ERROR ${GODOT_WARNING_AS_ERROR} + POSITION_INDEPENDENT_CODE ON - BUILD_RPATH_USE_ORIGIN ON + INTERFACE_POSITION_INDEPENDENT_CODE ON + + # Tell the linker to add the $ORIGIN relative location at build time + INTERFACE_BUILD_RPATH_USE_ORIGIN ON PREFIX lib OUTPUT_NAME "${PROJECT_NAME}.${SYSTEM_NAME}.${TARGET_NAME}.${SYSTEM_ARCH}" diff --git a/cmake/macos.cmake b/cmake/macos.cmake index 1bb4dbcfb..72db94ffe 100644 --- a/cmake/macos.cmake +++ b/cmake/macos.cmake @@ -35,8 +35,13 @@ function( macos_generate TARGET_NAME ) set_target_properties( ${TARGET_NAME} PROPERTIES + # enable RPATH on MACOS, with the BUILD_RPATH_USE_ORIGIN + # this should allow loading libraries from relative paths on macos. + INTERFACE_MACOSX_RPATH ON + # Specify multiple architectures for universal builds OSX_ARCHITECTURES "${OSX_ARCH}" + INTERFACE_OSX_ARCHITECTURES "${OSX_ARCH}" ) target_compile_definitions(${TARGET_NAME} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ab7397fa2..fc93073dd 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -33,8 +33,6 @@ set_target_properties( godot-cpp-test CXX_EXTENSIONS OFF CXX_VISIBILITY_PRESET ${GODOT_SYMBOL_VISIBILITY} - POSITION_INDEPENDENT_CODE ON - BUILD_RPATH_USE_ORIGIN ON LINK_SEARCH_START_STATIC ON LINK_SEARCH_END_STATIC ON @@ -49,8 +47,6 @@ set_target_properties( godot-cpp-test ) if( CMAKE_SYSTEM_NAME STREQUAL Darwin ) - get_target_property( OSX_ARCH godot-cpp::${TEST_TARGET} OSX_ARCHITECTURES ) - set( OUTPUT_DIR "${OUTPUT_DIR}/libgdexample.macos.${TEST_TARGET}.framework") set_target_properties( godot-cpp-test @@ -60,8 +56,5 @@ if( CMAKE_SYSTEM_NAME STREQUAL Darwin ) OUTPUT_NAME "gdexample.macos.${TEST_TARGET}" SUFFIX "" - - #macos options - OSX_ARCHITECTURES "${OSX_ARCH}" ) endif ()