summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarsh Aggarwal (NVIDIA) <haaggarwal@nvidia.com>2025-03-14 17:28:51 +0530
committerGitHub <noreply@github.com>2025-03-14 17:28:51 +0530
commitc2e8f9c1ebe316d7f3b2932fa1c24065fdf83d37 (patch)
treeb951d41b85d4e3c8011583d820e5098ca0dd1be1
parent3431640427e8fa6f81a0b267a6c6cdd9bec38516 (diff)
Fix: Respect user-defined output directory settings for libraries (#6604)
* Fix: Respect user-defined output directory settings for libraries Modified SlangTarget.cmake to properly respect CMAKE_LIBRARY_OUTPUT_DIRECTORY, CMAKE_RUNTIME_OUTPUT_DIRECTORY and CMAKE_ARCHIVE_OUTPUT_DIRECTORY variables when they are explicitly set by the user. This ensures libraries and executables are placed in the directories specified by the user, including handling Multi-Config generators like Visual Studio, Xcode, and Ninja Multi-Config. Fixes #5896: Shared library build output location ignores CMAKE setting * format code --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
-rw-r--r--cmake/SlangTarget.cmake83
1 files changed, 79 insertions, 4 deletions
diff --git a/cmake/SlangTarget.cmake b/cmake/SlangTarget.cmake
index 85d09be89..9e9407ca3 100644
--- a/cmake/SlangTarget.cmake
+++ b/cmake/SlangTarget.cmake
@@ -195,15 +195,90 @@ function(slang_add_target dir type)
if(type STREQUAL "MODULE")
set(library_subdir ${module_subdir})
endif()
+
+ # Respect user-defined CMAKE_*_OUTPUT_DIRECTORY variables if they are set
+ if(DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
+ set(archive_output_dir "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}")
+ else()
+ set(archive_output_dir "${output_dir}/${archive_subdir}")
+ endif()
+
+ if(DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
+ set(library_output_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
+ else()
+ set(library_output_dir "${output_dir}/${library_subdir}")
+ endif()
+
+ if(DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
+ set(runtime_output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
+ set(pdb_output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
+ else()
+ set(runtime_output_dir "${output_dir}/${runtime_subdir}")
+ set(pdb_output_dir "${output_dir}/${runtime_subdir}")
+ endif()
+
set_target_properties(
${target}
PROPERTIES
- ARCHIVE_OUTPUT_DIRECTORY "${output_dir}/${archive_subdir}"
- LIBRARY_OUTPUT_DIRECTORY "${output_dir}/${library_subdir}"
- RUNTIME_OUTPUT_DIRECTORY "${output_dir}/${runtime_subdir}"
- PDB_OUTPUT_DIRECTORY "${output_dir}/${runtime_subdir}"
+ ARCHIVE_OUTPUT_DIRECTORY "${archive_output_dir}"
+ LIBRARY_OUTPUT_DIRECTORY "${library_output_dir}"
+ RUNTIME_OUTPUT_DIRECTORY "${runtime_output_dir}"
+ PDB_OUTPUT_DIRECTORY "${pdb_output_dir}"
)
+ # For Multi-Config generators we also need to set per-config output directories
+ # if user-defined paths are provided
+ if(DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
+ set_target_properties(
+ ${target}
+ PROPERTIES
+ ARCHIVE_OUTPUT_DIRECTORY_DEBUG
+ "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}"
+ ARCHIVE_OUTPUT_DIRECTORY_RELEASE
+ "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}"
+ ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO
+ "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}"
+ ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL
+ "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}"
+ )
+ endif()
+
+ if(DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
+ set_target_properties(
+ ${target}
+ PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY_DEBUG
+ "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
+ LIBRARY_OUTPUT_DIRECTORY_RELEASE
+ "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
+ LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO
+ "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
+ LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL
+ "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
+ )
+ endif()
+
+ if(DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
+ set_target_properties(
+ ${target}
+ PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY_DEBUG
+ "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ RUNTIME_OUTPUT_DIRECTORY_RELEASE
+ "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO
+ "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL
+ "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ PDB_OUTPUT_DIRECTORY_DEBUG "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ PDB_OUTPUT_DIRECTORY_RELEASE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ PDB_OUTPUT_DIRECTORY_RELWITHDEBINFO
+ "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ PDB_OUTPUT_DIRECTORY_MINSIZEREL
+ "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ )
+ endif()
+
set(debug_configs "Debug,RelWithDebInfo")
if(SLANG_ENABLE_RELEASE_DEBUG_INFO)
set(debug_configs "Debug,RelWithDebInfo,Release")