From ea0e07ec8f079d5dd602eb158d5a8c349f9b2001 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Sun, 13 Aug 2023 19:49:21 -0600 Subject: [PATCH] Meta: Include RPATH rules at top level to share them with Ladybird When using Ladybird/ as CMake source directory, the RPATH rules were left at the default, which is almost never correct. --- Ladybird/CMakeLists.txt | 3 ++- Meta/CMake/lagom_install_options.cmake | 24 ++++++++++++++++++++++++ Meta/CMake/lagom_options.cmake | 1 + Meta/Lagom/CMakeLists.txt | 23 ----------------------- 4 files changed, 27 insertions(+), 24 deletions(-) create mode 100644 Meta/CMake/lagom_install_options.cmake diff --git a/Ladybird/CMakeLists.txt b/Ladybird/CMakeLists.txt index 39378b3c5a3..1314f3b7434 100644 --- a/Ladybird/CMakeLists.txt +++ b/Ladybird/CMakeLists.txt @@ -63,7 +63,8 @@ if (LADYBIRD_IS_TOP_LEVEL) ) list(APPEND CMAKE_MODULE_PATH "${SERENITY_SOURCE_DIR}/Meta/CMake") include(cmake/EnableLagom.cmake) - include(lagom_compile_options NO_POLICY_SCOPE) + include(lagom_compile_options) + include(lagom_install_options) else() # FIXME: Use SERENITY_SOURCE_DIR in Lagom/CMakeLists.txt set(SERENITY_SOURCE_DIR "${SERENITY_PROJECT_ROOT}") diff --git a/Meta/CMake/lagom_install_options.cmake b/Meta/CMake/lagom_install_options.cmake new file mode 100644 index 00000000000..6c96c80e10e --- /dev/null +++ b/Meta/CMake/lagom_install_options.cmake @@ -0,0 +1,24 @@ +include_guard() + +include(GNUInstallDirs) # make sure to include before we mess w/RPATH + +# Mirror the structure of the installed tree to ensure that rpaths +# always remain valid. +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") + +set(CMAKE_SKIP_BUILD_RPATH FALSE) +set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +# See slide 100 of the following ppt :^) +# https://crascit.com/wp-content/uploads/2019/09/Deep-CMake-For-Library-Authors-Craig-Scott-CppCon-2019.pdf +if (APPLE) + set(CMAKE_MACOSX_RPATH TRUE) + set(CMAKE_INSTALL_NAME_DIR "@rpath") + set(CMAKE_INSTALL_RPATH "@executable_path/../lib") +else() + set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") +endif() +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + +set(CMAKE_INSTALL_MESSAGE NEVER) diff --git a/Meta/CMake/lagom_options.cmake b/Meta/CMake/lagom_options.cmake index 04205611196..327b9cceaa4 100644 --- a/Meta/CMake/lagom_options.cmake +++ b/Meta/CMake/lagom_options.cmake @@ -3,6 +3,7 @@ # include(${CMAKE_CURRENT_LIST_DIR}/common_options.cmake NO_POLICY_SCOPE) +include(${CMAKE_CURRENT_LIST_DIR}/lagom_install_options.cmake) serenity_option(ENABLE_ADDRESS_SANITIZER OFF CACHE BOOL "Enable address sanitizer testing in gcc/clang") serenity_option(ENABLE_MEMORY_SANITIZER OFF CACHE BOOL "Enable memory sanitizer testing in gcc/clang") diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index 5d300fe58ba..452e38584a2 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -76,31 +76,8 @@ endif() include(flac_spec_tests) include(lagom_compile_options) -include(GNUInstallDirs) # make sure to include before we mess w/RPATH - -# Mirror the structure of the installed tree to ensure that rpaths -# always remain valid. -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}") -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") - -set(CMAKE_SKIP_BUILD_RPATH FALSE) -set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) -# See slide 100 of the following ppt :^) -# https://crascit.com/wp-content/uploads/2019/09/Deep-CMake-For-Library-Authors-Craig-Scott-CppCon-2019.pdf -if (APPLE) - set(CMAKE_MACOSX_RPATH TRUE) - set(CMAKE_INSTALL_NAME_DIR "@rpath") - set(CMAKE_INSTALL_RPATH "@loader_path/../lib") -else() - set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") -endif() -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_INSTALL_MESSAGE NEVER) - if (EMSCRIPTEN) set(CMAKE_EXECUTABLE_SUFFIX ".js") add_compile_options(-gsource-map)