@@ -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,59 @@ 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 --config Debug
445
+ CMAKE_CACHE_ARGS
446
+ -DCMAKE_INSTALL_PREFIX:STRING =<INSTALL_DIR>
447
+ -DCMAKE_PREFIX_PATH:STRING =${CMAKE_PREFIX_PATH}
448
+ # Enable d suffix on libraries
449
+ -DUMF_USE_DEBUG_POSTFIX :BOOL =ON
450
+ # Don't build unnecessary targets in subbuild.
451
+ -DUMF_BUILD_EXAMPLES:BOOL =OFF
452
+ -DUMF_BUILD_TESTS:BOOL =OFF
453
+ # Inherit settings from parent build.
454
+ -DUMF_BUILD_SHARED_LIBRARY:BOOL =${UMF_BUILD_SHARED_LIBRARY}
455
+ -DUMF_BUILD_LEVEL_ZERO_PROVIDER:BOOL =${UMF_BUILD_LEVEL_ZERO_PROVIDER}
456
+ -DUMF_BUILD_CUDA_PROVIDER:BOOL =${UMF_BUILD_CUDA_PROVIDER}
457
+ -DUMF_BUILD_LIBUMF_POOL_JEMALLOC:BOOL =${UMF_BUILD_LIBUMF_POOL_JEMALLOC}
458
+ -DUMF_DISABLE_HWLOC:BOOL =${UMF_DISABLE_HWLOC}
459
+ -DUMF_LINK_HWLOC_STATICALLY:BOOL =${UMF_LINK_HWLOC_STATICALLY}
460
+ -DUMF_HWLOC_NAME:STRING =${UMF_HWLOC_NAME}
461
+ -DUMF_INSTALL_RPATH:STRING =${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
+ if (NOT TARGET umf-libraries)
481
+ add_custom_target (umf-libraries)
482
+ endif ()
483
+
430
484
# This build type check is not possible on Windows when CMAKE_BUILD_TYPE is not
431
485
# set, because in this case the build type is determined after a CMake
432
486
# configuration is done (at the build time)
@@ -859,6 +913,14 @@ install(FILES ${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}-config.cmake
859
913
${PROJECT_BINARY_DIR} /cmake/${PROJECT_NAME} -config-version .cmake
860
914
DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} )
861
915
916
+ # Install Windows debug libraries
917
+ if (NOT TARGET install -umf-libraries)
918
+ add_custom_target (
919
+ install -umf-libraries
920
+ COMMAND ${CMAKE_COMMAND} --install ${UMFD_INSTALL_DIR}
921
+ DEPENDS umf-libraries)
922
+ endif ()
923
+
862
924
# Configure uninstall commands
863
925
configure_file ("${PROJECT_SOURCE_DIR} /cmake/cmake_uninstall.cmake.in"
864
926
"${PROJECT_BINARY_DIR} /cmake_uninstall.cmake" IMMEDIATE @ONLY)
0 commit comments