Skip to content

Commit 1d70306

Browse files
committedMar 14, 2024
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 ``$<CONFIG>`` where appropriate.
1 parent 06665cb commit 1d70306

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed
 

‎Ladybird/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ function(set_helper_process_properties)
188188
# Store helper processes in the same bundle directory as the main application
189189
set_target_properties(${targets} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:ladybird>")
190190
else()
191-
set_target_properties(${targets} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBEXECDIR}")
191+
set_target_properties(${targets} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBEXECDIR}")
192192

193193
if (NOT CMAKE_INSTALL_LIBEXECDIR STREQUAL "libexec")
194194
set_source_files_properties(Utilities.cpp PROPERTIES COMPILE_DEFINITIONS LADYBIRD_LIBEXECDIR="${CMAKE_INSTALL_LIBEXECDIR}")
@@ -257,7 +257,7 @@ create_ladybird_bundle(ladybird)
257257
set_helper_process_properties(${ladybird_helper_processes})
258258

259259
include(cmake/ResourceFiles.cmake)
260-
set(resource_base_dir "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Lagom")
260+
set(resource_base_dir "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_DATADIR}/Lagom")
261261
if (APPLE)
262262
set(resource_base_dir "$<TARGET_BUNDLE_DIR:ladybird>/Contents/Resources")
263263
endif()

‎Meta/CMake/lagom_install_options.cmake

+10-3
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,18 @@ endif()
88

99
include(GNUInstallDirs) # make sure to include before we mess w/RPATH
1010

11+
# Handle multi-config generators (e.g. MSVC, Xcode, Ninja Multi-Config)
12+
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
13+
set(IN_BUILD_PREFIX "")
14+
if (is_multi_config)
15+
set(IN_BUILD_PREFIX "$<CONFIG>/")
16+
endif()
17+
1118
# Mirror the structure of the installed tree to ensure that rpaths
1219
# always remain valid.
13-
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
14-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
15-
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
20+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_BINDIR}")
21+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBDIR}")
22+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBDIR}")
1623

1724
set(CMAKE_SKIP_BUILD_RPATH FALSE)
1825
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)

0 commit comments

Comments
 (0)
Please sign in to comment.