@@ -89,7 +89,8 @@ set(UMF_INSTALL_RPATH
89
89
"Set the runtime search path to the directory with dependencies (e.g. hwloc)"
90
90
)
91
91
92
- umf_option(UMF_USE_DEBUG_POSTFIX "Add a 'd' postfix to Windows debug libraries" OFF )
92
+ umf_option(UMF_USE_DEBUG_POSTFIX "Add a 'd' postfix to Windows debug libraries"
93
+ OFF )
93
94
umf_option(UMF_DEVELOPER_MODE "Enable additional developer checks" OFF )
94
95
umf_option(
95
96
UMF_FORMAT_CODE_STYLE
@@ -427,6 +428,57 @@ elseif(UMF_BUILD_CUDA_PROVIDER)
427
428
message (STATUS "CUDA_INCLUDE_DIRS = ${CUDA_INCLUDE_DIRS} " )
428
429
endif ()
429
430
431
+ if (WINDOWS)
432
+ # Build debug libraries with the d suffix that are compiled with /MDd so
433
+ # users can link against these in debug builds.
434
+ include (ExternalProject)
435
+ set (UMFD_BINARY_DIR ${CMAKE_BINARY_DIR} /umfd)
436
+ set (UMFD_INSTALL_DIR ${UMFD_BINARY_DIR} /install )
437
+
438
+ ExternalProject_Add(
439
+ umfd
440
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}
441
+ BINARY_DIR ${UMFD_BINARY_DIR}
442
+ INSTALL_DIR ${UMFD_INSTALL_DIR}
443
+ INSTALL_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target
444
+ install -umf-libraries
445
+ CMAKE_CACHE_ARGS
446
+ -DCMAKE_BUILD_TYPE=DEBUG
447
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
448
+ # Enable d suffix on libraries
449
+ -DUMF_USE_DEBUG_POSTFIX =ON
450
+ # Don't build unnecessary targets in subbuild.
451
+ -DUMF_BUILD_EXAMPLES=OFF
452
+ -DUMF_BUILD_TESTS=OFF
453
+ # Inherit settings from parent build.
454
+ -DUMF_BUILD_SHARED_LIBRARY=${UMF_BUILD_SHARED_LIBRARY}
455
+ -DUMF_BUILD_LEVEL_ZERO_PROVIDER=${UMF_BUILD_LEVEL_ZERO_PROVIDER}
456
+ -DUMF_BUILD_CUDA_PROVIDER=${UMF_BUILD_CUDA_PROVIDER}
457
+ -DUMF_BUILD_LIBUMF_POOL_JEMALLOC=${UMF_BUILD_LIBUMF_POOL_JEMALLOC}
458
+ -DUMF_DISABLE_HWLOC=${UMF_DISABLE_HWLOC}
459
+ -DUMF_LINK_HWLOC_STATICALLY=${UMF_LINK_HWLOC_STATICALLY}
460
+ -DUMF_HWLOC_NAME=${UMF_HWLOC_NAME}
461
+ -DUMF_INSTALL_RPATH=${UMF_INSTALL_RPATH} )
462
+
463
+ # Copy debug runtime libraries to the parent build directory
464
+ set (UMFD_FILES_TO_COPY)
465
+ list (APPEND UMFD_COPY_FILES ${PROJECT_BINARY_DIR} /bin/umfd.dll
466
+ ${PROJECT_BINARY_DIR} /lib/umfd.lib)
467
+ add_custom_command (
468
+ OUTPUT ${PROJECT_BINARY_DIR} /bin/umfd.dll
469
+ ${PROJECT_BINARY_DIR} /lib/umfd.lib
470
+ COMMAND ${CMAKE_COMMAND} -E copy ${UMFD_INSTALL_DIR} /bin/umfd.dll
471
+ ${PROJECT_BINARY_DIR} /bin/umfd.dll
472
+ COMMAND ${CMAKE_COMMAND} -E copy ${UMFD_INSTALL_DIR} /lib/umfd.lib
473
+ ${PROJECT_BINARY_DIR} /lib/umfd.lib)
474
+
475
+ add_custom_target (copy-umfd-files DEPENDS ${UMFD_COPY_FILES} )
476
+ add_dependencies (copy-umfd-files umfd)
477
+ endif ()
478
+
479
+ # Target with all UMF libraries added with add_umf_library()
480
+ add_custom_target (umf-libraries)
481
+
430
482
# This build type check is not possible on Windows when CMAKE_BUILD_TYPE is not
431
483
# set, because in this case the build type is determined after a CMake
432
484
# configuration is done (at the build time)
@@ -859,6 +911,12 @@ install(FILES ${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}-config.cmake
859
911
${PROJECT_BINARY_DIR} /cmake/${PROJECT_NAME} -config-version .cmake
860
912
DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} )
861
913
914
+ # Install Windows debug libraries
915
+ add_custom_target (
916
+ install -umf-libraries
917
+ COMMAND ${CMAKE_COMMAND} --install ${UMFD_INSTALL_DIR}
918
+ DEPENDS umf-libraries)
919
+
862
920
# Configure uninstall commands
863
921
configure_file ("${PROJECT_SOURCE_DIR} /cmake/cmake_uninstall.cmake.in"
864
922
"${PROJECT_BINARY_DIR} /cmake_uninstall.cmake" IMMEDIATE @ONLY)
0 commit comments