diff options
| author | Harsh Aggarwal (NVIDIA) <haaggarwal@nvidia.com> | 2025-03-14 17:28:51 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-14 17:28:51 +0530 |
| commit | c2e8f9c1ebe316d7f3b2932fa1c24065fdf83d37 (patch) | |
| tree | b951d41b85d4e3c8011583d820e5098ca0dd1be1 | |
| parent | 3431640427e8fa6f81a0b267a6c6cdd9bec38516 (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.cmake | 83 |
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") |
