summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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")