@@ -58,6 +58,8 @@ macro(umf_option)
58
58
option (${ARGV} )
59
59
endmacro ()
60
60
61
+ # All CMake options have to be explicitly set in the build_umfd target's
62
+ # configuration command
61
63
umf_option(UMF_BUILD_SHARED_LIBRARY "Build UMF as shared library" OFF )
62
64
umf_option(UMF_BUILD_LEVEL_ZERO_PROVIDER "Build Level Zero memory provider" ON )
63
65
umf_option(UMF_BUILD_CUDA_PROVIDER "Build CUDA memory provider" ON )
@@ -148,6 +150,8 @@ if(UMF_DEVELOPER_MODE)
148
150
UMF_DEVELOPER_MODE=1)
149
151
endif ()
150
152
153
+ message (STATUS "CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} " )
154
+
151
155
if (NOT UMF_BUILD_LIBUMF_POOL_JEMALLOC)
152
156
set (UMF_POOL_JEMALLOC_ENABLED FALSE )
153
157
set (JEMALLOC_FOUND FALSE )
@@ -285,6 +289,7 @@ else()
285
289
set (HWLOC_ENABLE_TESTING OFF )
286
290
set (HWLOC_SKIP_LSTOPO ON )
287
291
set (HWLOC_SKIP_TOOLS ON )
292
+ set (HWLOC_SKIP_INCLUDES ON )
288
293
289
294
FetchContent_Declare(
290
295
hwloc_targ
@@ -428,25 +433,72 @@ elseif(UMF_BUILD_CUDA_PROVIDER)
428
433
message (STATUS "CUDA_INCLUDE_DIRS = ${CUDA_INCLUDE_DIRS} " )
429
434
endif ()
430
435
436
+ # Build the umfd target in a separate directory with Debug configuration
431
437
if (WINDOWS AND UMF_USE_DEBUG_POSTFIX )
432
- # Build debug umf library with the d suffix that is compiled with /MDd so
433
- # users can link against it in debug builds.
434
- set (CMAKE_DEBUG_POSTFIX d)
435
-
438
+ # The build_umfd target's configuration command requires to have
439
+ # CMAKE_PREFIX_PATH with semicolons escaped
440
+ string (JOIN "\; " UMFD_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} )
436
441
add_custom_target (
437
- umfd ALL
438
- COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target umf
439
- --config Debug
440
- COMMENT "Building debug umf library with the d suffix" )
442
+ build_umfd ALL
443
+ COMMAND
444
+ ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR} " -S ${UMF_CMAKE_SOURCE_DIR}
445
+ -B ${CMAKE_BINARY_DIR} /umfd_build -DCMAKE_BUILD_TYPE=Debug
446
+ -DCMAKE_DEBUG_POSTFIX =d
447
+ -DCMAKE_PREFIX_PATH="${UMFD_CMAKE_PREFIX_PATH} "
448
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
449
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
450
+ -DUMF_USE_DEBUG_POSTFIX =OFF
451
+ -DUMF_BUILD_SHARED_LIBRARY=${UMF_BUILD_SHARED_LIBRARY}
452
+ -DUMF_BUILD_LEVEL_ZERO_PROVIDER=${UMF_BUILD_LEVEL_ZERO_PROVIDER}
453
+ -DUMF_BUILD_CUDA_PROVIDER=${UMF_BUILD_CUDA_PROVIDER}
454
+ -DUMF_BUILD_LIBUMF_POOL_JEMALLOC=${UMF_BUILD_LIBUMF_POOL_JEMALLOC}
455
+ -DUMF_BUILD_TESTS=OFF -DUMF_BUILD_GPU_TESTS=OFF
456
+ -DUMF_BUILD_BENCHMARKS=OFF -DUMF_BUILD_BENCHMARKS_MT=OFF
457
+ -DUMF_BUILD_EXAMPLES=OFF -DUMF_BUILD_GPU_EXAMPLES=OFF
458
+ -DUMF_BUILD_FUZZTESTS=OFF -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} -DUMF_DEVELOPER_MODE=OFF
462
+ -DUMF_FORMAT_CODE_STYLE=OFF -DUMF_TESTS_FAIL_ON_SKIP=OFF
463
+ -DUMF_USE_ASAN=OFF -DUMF_USE_UBSAN=OFF -DUMF_USE_TSAN=OFF
464
+ -DUMF_USE_MSAN=OFF -DUMF_USE_VALGRIND=OFF -DUMF_USE_COVERAGE=OFF
465
+ -DUMF_PROXY_LIB_BASED_ON_POOL=${UMF_PROXY_LIB_BASED_ON_POOL}
466
+ COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} /umfd_build --target
467
+ umf --config Debug
468
+ COMMENT
469
+ "Configuring and building umfd.dll in a separate directory with Debug configuration"
470
+ )
441
471
442
- # Copy built UMF libraries to the Release build subdirectory
472
+ # Copy built UMF libraries to the main binary directory and remove
473
+ # umfd_build
474
+ if (CMAKE_CONFIGURATION_TYPES )
475
+ # Multi-config generator (e.g., Visual Studio)
476
+ set (UMFD_DLL_SRC "${CMAKE_BINARY_DIR} /umfd_build/bin/Debug/umfd.dll" )
477
+ set (UMFD_LIB_SRC "${CMAKE_BINARY_DIR} /umfd_build/lib/Debug/umfd.lib" )
478
+ set (UMFD_DLL "${CMAKE_BINARY_DIR} /bin/$<CONFIG>/umfd.dll" )
479
+ set (UMFD_LIB "${CMAKE_BINARY_DIR} /lib/$<CONFIG>/umfd.lib" )
480
+ else ()
481
+ # Single-config generator (e.g., Ninja)
482
+ set (UMFD_DLL_SRC "${CMAKE_BINARY_DIR} /umfd_build/bin/umfd.dll" )
483
+ set (UMFD_LIB_SRC "${CMAKE_BINARY_DIR} /umfd_build/lib/umfd.lib" )
484
+ set (UMFD_DLL "${CMAKE_BINARY_DIR} /bin/umfd.dll" )
485
+ set (UMFD_LIB "${CMAKE_BINARY_DIR} /lib/umfd.lib" )
486
+ endif ()
487
+
488
+ if (UMF_BUILD_SHARED_LIBRARY)
489
+ add_custom_command (
490
+ TARGET build_umfd
491
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${UMFD_DLL_SRC}
492
+ ${UMFD_DLL}
493
+ COMMENT "Copying umfd.dll to the main binary directory" )
494
+ endif ()
443
495
add_custom_command (
444
- TARGET umfd
445
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR} /bin/Debug/umfd.dll
446
- ${CMAKE_BINARY_DIR} /bin/Release/umfd.dll
447
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR} /lib/Debug/umfd.lib
448
- ${CMAKE_BINARY_DIR} /lib/Release/umfd.lib
449
- COMMENT "Copying debug libraries to the Release build directory" )
496
+ TARGET build_umfd
497
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${UMFD_LIB_SRC}
498
+ ${UMFD_LIB}
499
+ COMMAND ${CMAKE_COMMAND} -E remove_directory
500
+ ${CMAKE_BINARY_DIR} /umfd_build DEPENDS ${UMFD_DLL}
501
+ COMMENT "Copying umfd.lib to the main library directory" )
450
502
endif ()
451
503
452
504
# This build type check is not possible on Windows when CMAKE_BUILD_TYPE is not
@@ -841,12 +893,18 @@ endif()
841
893
# --------------------------------------------------------------------------- #
842
894
# Configure make install/uninstall and packages
843
895
# --------------------------------------------------------------------------- #
844
- # Install umfd target
896
+ # Install the umfd library files as part of the umfd component
845
897
if (WINDOWS AND UMF_USE_DEBUG_POSTFIX )
846
- install (FILES ${CMAKE_BINARY_DIR} /bin/Debug/umfd.dll
847
- DESTINATION ${CMAKE_INSTALL_BINDIR} )
848
- install (FILES ${CMAKE_BINARY_DIR} /lib/Debug/umfd.lib
849
- DESTINATION ${CMAKE_INSTALL_LIBDIR} )
898
+ if (UMF_BUILD_SHARED_LIBRARY)
899
+ install (
900
+ FILES ${UMFD_DLL}
901
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
902
+ COMPONENT umfd)
903
+ endif ()
904
+ install (
905
+ FILES ${UMFD_LIB}
906
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
907
+ COMPONENT umfd)
850
908
endif ()
851
909
852
910
install (FILES ${PROJECT_SOURCE_DIR} /LICENSE.TXT
0 commit comments