Skip to content

Commit 3d074bd

Browse files
committed
Add option to link with hwloc statically on linux
1 parent bb07950 commit 3d074bd

File tree

3 files changed

+46
-9
lines changed

3 files changed

+46
-9
lines changed

CMakeLists.txt

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,7 @@ if(NOT UMF_LINK_HWLOC_STATICALLY)
103103
set(DLL_PATH_LIST
104104
"${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}/../bin"
105105
)
106-
else()
107-
if(NOT WINDOWS)
108-
message(FATAL_ERROR "hwloc can be statically linked only on Windows")
109-
endif()
106+
elseif(WINDOWS)
110107
include(FetchContent)
111108
set(HWLOC_ENABLE_TESTING OFF)
112109
set(HWLOC_SKIP_LSTOPO ON)
@@ -130,6 +127,46 @@ else()
130127
message(STATUS " LIBHWLOC_LIBRARIES = ${LIBHWLOC_LIBRARIES}")
131128
message(STATUS " LIBHWLOC_INCLUDE_DIRS = ${LIBHWLOC_INCLUDE_DIRS}")
132129
message(STATUS " LIBHWLOC_LIBRARY_DIRS = ${LIBHWLOC_LIBRARY_DIRS}")
130+
else()
131+
include(FetchContent)
132+
FetchContent_Declare(
133+
hwloc_targ
134+
GIT_REPOSITORY "https://github.com/open-mpi/hwloc.git"
135+
GIT_TAG hwloc-2.10.0)
136+
137+
FetchContent_GetProperties(hwloc_targ)
138+
if(NOT hwloc_targ_POPULATED)
139+
FetchContent_MakeAvailable(hwloc_targ)
140+
endif()
141+
142+
add_custom_command(
143+
COMMAND ./autogen.sh
144+
WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
145+
OUTPUT ${hwloc_targ_SOURCE_DIR}/configure)
146+
add_custom_command(
147+
COMMAND
148+
./configure --prefix=${hwloc_targ_BINARY_DIR} --enable-static=yes
149+
--enable-shared=no --disable-libxml2 --disable-levelzero
150+
WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
151+
OUTPUT ${hwloc_targ_SOURCE_DIR}/Makefile
152+
DEPENDS ${hwloc_targ_SOURCE_DIR}/configure)
153+
154+
add_custom_command(
155+
COMMAND make
156+
WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
157+
OUTPUT ${hwloc_targ_SOURCE_DIR}/libhwloc.la
158+
DEPENDS ${hwloc_targ_SOURCE_DIR}/Makefile)
159+
add_custom_command(
160+
COMMAND make install
161+
WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR}
162+
OUTPUT ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a
163+
DEPENDS ${hwloc_targ_SOURCE_DIR}/Makefile)
164+
165+
add_custom_target(hwloc DEPENDS ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a)
166+
167+
set(LIBHWLOC_LIBRARY_DIRS ${hwloc_targ_BINARY_DIR}/lib)
168+
set(LIBHWLOC_INCLUDE_DIRS ${hwloc_targ_BINARY_DIR}/include)
169+
set(LIBHWLOC_LIBRARIES ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a)
133170
endif()
134171

135172
# This build type check is not possible on Windows when CMAKE_BUILD_TYPE is not

examples/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ set(EXAMPLE_NAME umf_example_basic)
1818
add_umf_executable(
1919
NAME ${EXAMPLE_NAME}
2020
SRCS basic/basic.c
21-
LIBS umf hwloc)
21+
LIBS umf ${LIBHWLOC_LIBRARIES})
2222

2323
target_include_directories(
2424
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils
@@ -172,7 +172,7 @@ if(LINUX)
172172
add_umf_executable(
173173
NAME ${EXAMPLE_NAME}
174174
SRCS memspace/memspace_numa.c
175-
LIBS umf hwloc numa)
175+
LIBS umf ${LIBHWLOC_LIBRARIES} numa)
176176

177177
target_include_directories(
178178
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils
@@ -190,7 +190,7 @@ if(LINUX)
190190
add_umf_executable(
191191
NAME ${EXAMPLE_NAME}
192192
SRCS memspace/memspace_hmat.c
193-
LIBS umf hwloc numa)
193+
LIBS umf ${LIBHWLOC_LIBRARIES} numa)
194194

195195
target_include_directories(
196196
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils
@@ -209,7 +209,7 @@ if(LINUX)
209209
add_umf_executable(
210210
NAME ${EXAMPLE_NAME}
211211
SRCS custom_provider/file_provider.c
212-
LIBS umf hwloc)
212+
LIBS umf ${LIBHWLOC_LIBRARIES})
213213

214214
target_include_directories(
215215
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils

src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ if(UMF_BUILD_SHARED_LIBRARY)
125125
NAME umf
126126
TYPE SHARED
127127
SRCS ${UMF_SOURCES}
128-
LIBS ${UMF_LIBS} hwloc
128+
LIBS ${UMF_LIBS}
129129
LINUX_MAP_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libumf.map
130130
WINDOWS_DEF_FILE ${CMAKE_CURRENT_BINARY_DIR}/libumf.def)
131131
set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS}

0 commit comments

Comments
 (0)