@@ -257,126 +257,96 @@ else()
257257 if (NOT UMF_LINK_HWLOC_STATICALLY)
258258 pkg_check_modules(LIBHWLOC hwloc>=2.3.0)
259259 if (NOT LIBHWLOC_FOUND)
260- find_package (LIBHWLOC 2.3.0 REQUIRED hwloc)
260+ find_package (LIBHWLOC 2.3.0 COMPONENTS hwloc)
261+ if (LIBHWLOC_LIBRARIES)
262+ set (LIBHWLOC_AVAILABLE TRUE )
263+ endif ()
261264 endif ()
262265
263- # add PATH to DLL on Windows
264- set (DLL_PATH_LIST
265- "${DLL_PATH_LIST} ;PATH=path_list_append:${LIBHWLOC_DLL_DIRS} " )
266- elseif (WINDOWS)
267- include (FetchContent)
268- set (HWLOC_ENABLE_TESTING OFF )
269- set (HWLOC_SKIP_LSTOPO ON )
270- set (HWLOC_SKIP_TOOLS ON )
266+ if (LIBHWLOC_AVAILABLE OR LIBHWLOC_FOUND)
267+ # add PATH to DLL on Windows
268+ set (DLL_PATH_LIST
269+ "${DLL_PATH_LIST} ;PATH=path_list_append:${LIBHWLOC_DLL_DIRS} " )
270+ message (STATUS " LIBHWLOC_LIBRARIES = ${LIBHWLOC_LIBRARIES} " )
271+ else ()
272+ set (UMF_LINK_HWLOC_STATICALLY ON )
273+ endif ()
274+ endif ()
271275
276+ if (UMF_LINK_HWLOC_STATICALLY)
277+ include (FetchContent)
272278 message (
273279 STATUS
274280 "Will fetch hwloc from ${UMF_HWLOC_REPO} (tag: ${UMF_HWLOC_TAG} )"
275281 )
276282
277- FetchContent_Declare(
278- hwloc_targ
279- GIT_REPOSITORY ${UMF_HWLOC_REPO}
280- GIT_TAG ${UMF_HWLOC_TAG}
281- SOURCE_SUBDIR contrib/windows-cmake/ FIND_PACKAGE_ARGS)
282- FetchContent_MakeAvailable(hwloc_targ)
283+ if (WINDOWS)
284+ set (HWLOC_ENABLE_TESTING OFF )
285+ set (HWLOC_SKIP_LSTOPO ON )
286+ set (HWLOC_SKIP_TOOLS ON )
287+
288+ FetchContent_Declare(
289+ hwloc_targ
290+ GIT_REPOSITORY ${UMF_HWLOC_REPO}
291+ GIT_TAG ${UMF_HWLOC_TAG}
292+ SOURCE_SUBDIR contrib/windows-cmake/)
293+ FetchContent_MakeAvailable(hwloc_targ)
294+
295+ set (HWLOC_LIB_PATH "" )
296+ if (CMAKE_GENERATOR STREQUAL "NMake Makefiles" )
297+ set (HWLOC_LIB_PATH "${hwloc_targ_BINARY_DIR} /hwloc.lib" )
298+ else ()
299+ set (HWLOC_LIB_PATH "${hwloc_targ_BINARY_DIR} /lib/hwloc.lib" )
300+ endif ()
301+
302+ get_filename_component (LIBHWLOC_LIBRARY_DIRS ${HWLOC_LIB_PATH}
303+ DIRECTORY )
304+ set (LIBHWLOC_LIBRARIES ${HWLOC_LIB_PATH} )
305+ set (LIBHWLOC_INCLUDE_DIRS ${hwloc_targ_BINARY_DIR} /include )
306+ else () # not Windows
307+ FetchContent_Declare(
308+ hwloc_targ
309+ GIT_REPOSITORY ${UMF_HWLOC_REPO}
310+ GIT_TAG ${UMF_HWLOC_TAG} )
311+ FetchContent_MakeAvailable(hwloc_targ)
283312
284- message (STATUS "hwloc CMAKE_GENERATOR: ${CMAKE_GENERATOR} " )
285-
286- if (CMAKE_GENERATOR STREQUAL "Ninja" OR CMAKE_GENERATOR STREQUAL
287- "Unix Makefiles" )
288313 add_custom_command (
289- COMMAND ${CMAKE_COMMAND}
290- -DCMAKE_INSTALL_PREFIX=${hwloc_targ_BINARY_DIR} -B build
291- WORKING_DIRECTORY
292- ${hwloc_targ_SOURCE_DIR} /contrib/windows-cmake/
293- OUTPUT
294- ${hwloc_targ_SOURCE_DIR} /contrib/windows-cmake/CMakeCache.txt
295- )
314+ COMMAND ./autogen.sh
315+ WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
316+ OUTPUT ${hwloc_targ_SOURCE_DIR} /configure)
296317 add_custom_command (
297- COMMAND ${CMAKE_COMMAND} --build build
298- WORKING_DIRECTORY
299- ${hwloc_targ_SOURCE_DIR} /contrib/windows-cmake/
300- OUTPUT
301- ${hwloc_targ_SOURCE_DIR} /contrib/windows-cmake/build /lib/hwloc.lib
302- DEPENDS
303- ${hwloc_targ_SOURCE_DIR} /contrib/windows-cmake/CMakeCache.txt
304- )
318+ COMMAND
319+ ./configure --prefix =${hwloc_targ_BINARY_DIR}
320+ --enable-static =yes --enable-shared=no --disable-libxml2
321+ --disable-pci --disable-levelzero --disable-opencl
322+ --disable-cuda --disable-nvml --disable-libudev
323+ --disable-rsmi CFLAGS=-fPIC CXXFLAGS=-fPIC
324+ WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
325+ OUTPUT ${hwloc_targ_SOURCE_DIR} /Makefile
326+ DEPENDS ${hwloc_targ_SOURCE_DIR} /configure)
305327 add_custom_command (
306- COMMAND ${CMAKE_COMMAND} --build build --target INSTALL
307- WORKING_DIRECTORY
308- ${hwloc_targ_SOURCE_DIR} /contrib/windows-cmake/
309- OUTPUT ${hwloc_targ_BINARY_DIR} /lib/hwloc.lib
310- DEPENDS
311- ${hwloc_targ_SOURCE_DIR} /contrib/windows-cmake/build /lib/hwloc.lib
312- )
328+ COMMAND make
329+ WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
330+ OUTPUT ${hwloc_targ_SOURCE_DIR} /lib/libhwloc.la
331+ DEPENDS ${hwloc_targ_SOURCE_DIR} /Makefile)
332+ add_custom_command (
333+ COMMAND make install
334+ WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
335+ OUTPUT ${hwloc_targ_BINARY_DIR} /lib/libhwloc.a
336+ DEPENDS ${hwloc_targ_SOURCE_DIR} /lib/libhwloc.la)
337+
313338 add_custom_target (hwloc_prod
314- DEPENDS ${hwloc_targ_BINARY_DIR} /lib/hwloc.lib)
339+ DEPENDS ${hwloc_targ_BINARY_DIR} /lib/libhwloc.a)
340+ add_library (hwloc INTERFACE )
315341 target_link_libraries (
316- hwloc INTERFACE ${hwloc_targ_BINARY_DIR} /lib/hwloc.lib )
342+ hwloc INTERFACE ${hwloc_targ_BINARY_DIR} /lib/libhwloc.a )
317343 add_dependencies (hwloc hwloc_prod)
318344
319345 set (LIBHWLOC_LIBRARY_DIRS ${hwloc_targ_BINARY_DIR} /lib)
320- set (LIBHWLOC_LIBRARIES ${hwloc_targ_BINARY_DIR} /lib/hwloc.lib)
321- elseif (CMAKE_GENERATOR STREQUAL "NMake Makefiles" )
322- set (LIBHWLOC_LIBRARY_DIRS ${hwloc_targ_BINARY_DIR} /)
323- set (LIBHWLOC_LIBRARIES ${hwloc_targ_BINARY_DIR} /hwloc.lib)
324- else ()
325- set (LIBHWLOC_LIBRARY_DIRS ${hwloc_targ_BINARY_DIR} /$<CONFIG>)
326- set (LIBHWLOC_LIBRARIES ${hwloc_targ_BINARY_DIR} /$<CONFIG>/hwloc.lib)
346+ set (LIBHWLOC_INCLUDE_DIRS ${hwloc_targ_BINARY_DIR} /include )
347+ set (LIBHWLOC_LIBRARIES ${hwloc_targ_BINARY_DIR} /lib/libhwloc.a)
327348 endif ()
328-
329- set (LIBHWLOC_INCLUDE_DIRS
330- ${hwloc_targ_SOURCE_DIR} /include ;${hwloc_targ_BINARY_DIR} /include )
331- else ()
332- include (FetchContent)
333- message (
334- STATUS
335- "Will fetch hwloc from ${UMF_HWLOC_REPO} (tag: ${UMF_HWLOC_TAG} )"
336- )
337-
338- FetchContent_Declare(
339- hwloc_targ
340- GIT_REPOSITORY ${UMF_HWLOC_REPO}
341- GIT_TAG ${UMF_HWLOC_TAG} )
342- FetchContent_MakeAvailable(hwloc_targ)
343-
344- add_custom_command (
345- COMMAND ./autogen.sh
346- WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
347- OUTPUT ${hwloc_targ_SOURCE_DIR} /configure)
348- add_custom_command (
349- COMMAND
350- ./configure --prefix =${hwloc_targ_BINARY_DIR}
351- --enable-static =yes --enable-shared=no --disable-libxml2
352- --disable-pci --disable-levelzero --disable-opencl
353- --disable-cuda --disable-nvml --disable-libudev --disable-rsmi
354- CFLAGS=-fPIC CXXFLAGS=-fPIC
355- WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
356- OUTPUT ${hwloc_targ_SOURCE_DIR} /Makefile
357- DEPENDS ${hwloc_targ_SOURCE_DIR} /configure)
358- add_custom_command (
359- COMMAND make
360- WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
361- OUTPUT ${hwloc_targ_SOURCE_DIR} /lib/libhwloc.la
362- DEPENDS ${hwloc_targ_SOURCE_DIR} /Makefile)
363- add_custom_command (
364- COMMAND make install
365- WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
366- OUTPUT ${hwloc_targ_BINARY_DIR} /lib/libhwloc.a
367- DEPENDS ${hwloc_targ_SOURCE_DIR} /lib/libhwloc.la)
368-
369- add_custom_target (hwloc_prod
370- DEPENDS ${hwloc_targ_BINARY_DIR} /lib/libhwloc.a)
371- add_library (hwloc INTERFACE )
372- target_link_libraries (hwloc
373- INTERFACE ${hwloc_targ_BINARY_DIR} /lib/libhwloc.a)
374- add_dependencies (hwloc hwloc_prod)
375-
376- set (LIBHWLOC_LIBRARY_DIRS ${hwloc_targ_BINARY_DIR} /lib)
377- set (LIBHWLOC_INCLUDE_DIRS ${hwloc_targ_BINARY_DIR} /include )
378- set (LIBHWLOC_LIBRARIES ${hwloc_targ_BINARY_DIR} /lib/libhwloc.a)
379- endif ()
349+ endif () # UMF_LINK_HWLOC_STATICALLY
380350
381351 message (STATUS " LIBHWLOC_LIBRARIES = ${LIBHWLOC_LIBRARIES} " )
382352 message (STATUS " LIBHWLOC_INCLUDE_DIRS = ${LIBHWLOC_INCLUDE_DIRS} " )
@@ -388,7 +358,7 @@ else()
388358endif ()
389359
390360if (hwloc_targ_SOURCE_DIR)
391- # apply security patch for HWLOC
361+ # Apply security patch for HWLOC
392362 execute_process (
393363 COMMAND git apply ${PROJECT_SOURCE_DIR} /cmake/fix_coverity_issues.patch
394364 WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
0 commit comments