From 1d70306c4178a9a5a671d128f14905b1e944239d Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Sat, 24 Feb 2024 22:01:17 -0700 Subject: [PATCH] Meta: Handle output directories for multi-config CMake generators For Ninja Multi-Config, Xcode and Visual Studio, the way we set up our output directories would result in exectuables that can't run from the build directory. Add the same sauce that we added to Jakt to insert ``$`` where appropriate. --- Ladybird/CMakeLists.txt | 4 ++-- Meta/CMake/lagom_install_options.cmake | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Ladybird/CMakeLists.txt b/Ladybird/CMakeLists.txt index 23def84cfc2..2a52717bf08 100644 --- a/Ladybird/CMakeLists.txt +++ b/Ladybird/CMakeLists.txt @@ -188,7 +188,7 @@ function(set_helper_process_properties) # Store helper processes in the same bundle directory as the main application set_target_properties(${targets} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "$") else() - set_target_properties(${targets} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBEXECDIR}") + set_target_properties(${targets} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBEXECDIR}") if (NOT CMAKE_INSTALL_LIBEXECDIR STREQUAL "libexec") set_source_files_properties(Utilities.cpp PROPERTIES COMPILE_DEFINITIONS LADYBIRD_LIBEXECDIR="${CMAKE_INSTALL_LIBEXECDIR}") @@ -257,7 +257,7 @@ create_ladybird_bundle(ladybird) set_helper_process_properties(${ladybird_helper_processes}) include(cmake/ResourceFiles.cmake) -set(resource_base_dir "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Lagom") +set(resource_base_dir "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_DATADIR}/Lagom") if (APPLE) set(resource_base_dir "$/Contents/Resources") endif() diff --git a/Meta/CMake/lagom_install_options.cmake b/Meta/CMake/lagom_install_options.cmake index b9e3baaa666..0c29e14ec8e 100644 --- a/Meta/CMake/lagom_install_options.cmake +++ b/Meta/CMake/lagom_install_options.cmake @@ -8,11 +8,18 @@ endif() include(GNUInstallDirs) # make sure to include before we mess w/RPATH +# Handle multi-config generators (e.g. MSVC, Xcode, Ninja Multi-Config) +get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +set(IN_BUILD_PREFIX "") +if (is_multi_config) + set(IN_BUILD_PREFIX "$/") +endif() + # 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_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_BINDIR}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBDIR}") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBDIR}") set(CMAKE_SKIP_BUILD_RPATH FALSE) set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)