Skip to content

Commit d96c4e5

Browse files
committed
fixed build issues with METIS
1 parent 090b5ae commit d96c4e5

2 files changed

Lines changed: 37 additions & 17 deletions

File tree

CMakeLists.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,12 @@ set(METIS_PATCHES_DIR "${PROJECT_SOURCE_DIR}/metis/metis_patches")
8989
if(NOT DEFINED TPL_ENABLE_METISLIB)
9090
set(TPL_ENABLE_METISLIB ON CACHE BOOL "Enable METIS for SuperLU")
9191
endif()
92+
9293
if(TPL_ENABLE_METISLIB)
9394
if(NOT EXISTS "${GKLIB_DIR}/CMakeLists.txt")
9495
message(FATAL_ERROR "The GKlib submodule was not downloaded.")
9596
endif()
97+
9698
if(NOT EXISTS "${METIS_DIR}/CMakeLists.txt")
9799
message(FATAL_ERROR "The METIS submodule was not downloaded.")
98100
endif()
@@ -199,6 +201,15 @@ if(USE_SUPERLU_MT)
199201

200202
include_directories("${SUPERLU_MT_DIR}/SRC")
201203
add_subdirectory(${SUPERLU_MT_DIR})
204+
205+
if(TPL_ENABLE_METISLIB)
206+
if(PLAT STREQUAL "_PTHREAD")
207+
add_dependencies(superlu_mt_PTHREAD metis GKlib)
208+
elseif(PLAT STREQUAL "_OPENMP")
209+
add_dependencies(superlu_mt_OPENMP metis GKlib)
210+
endif()
211+
endif()
212+
202213
set(SLU_DRIVER "${SUPERLU_MT_DIR}/SRC/c_fortran_pdgssv.c")
203214
else()
204215
message(STATUS "Will link against regular SuperLU.")
@@ -212,9 +223,11 @@ else()
212223

213224
include_directories("${SUPERLU_DIR}/SRC")
214225
add_subdirectory(${SUPERLU_DIR})
226+
215227
if(TPL_ENABLE_METISLIB)
216228
add_dependencies(superlu metis GKlib)
217229
endif()
230+
218231
set(SLU_DRIVER "${SUPERLU_DIR}/FORTRAN/c_fortran_dgssv.c")
219232
endif()
220233

@@ -384,6 +397,10 @@ if(USE_SUPERLU_MT)
384397
endif()
385398

386399
target_compile_definitions(mystran PRIVATE USE_SUPERLU_MT)
400+
401+
if(TPL_ENABLE_METISLIB)
402+
target_compile_definitions(mystran PRIVATE HAVE_METIS)
403+
endif()
387404
else()
388405
target_link_libraries(mystran superlu f2c)
389406
endif()

metis/metis_patches/CMakeLists.txt

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
cmake_minimum_required(VERSION 3.10)
22
project(METIS C)
3+
set(CMAKE_C_STANDARD 99)
34

45
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
56
set(SHARED FALSE CACHE BOOL "build a shared library")
@@ -21,27 +22,28 @@ endif(SHARED)
2122
include(./conf/gkbuild.cmake)
2223

2324
# METIS' custom options
24-
#option(IDX64 "enable 64 bit ints" OFF)
25-
#option(REAL64 "enable 64 bit floats (i.e., double)" OFF)
26-
#if(IDX64)
27-
# set(METIS_COPTIONS "${METIS_COPTIONS} -DIDXTYPEWIDTH=64")
28-
#else()
29-
# set(METIS_COPTIONS "${METIS_COPTIONS} -DIDXTYPEWIDTH=32")
30-
#endif(IDX64)
31-
#if(REAL64)
32-
# set(METIS_COPTIONS "${METIS_COPTIONS} -DREALTYPEWIDTH=64")
33-
#else()
34-
# set(METIS_COPTIONS "${METIS_COPTIONS} -DREALTYPEWIDTH=32")
35-
#endif(REAL64)
36-
#
37-
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${METIS_COPTIONS}")
25+
option(IDX64 "enable 64 bit ints" OFF)
26+
option(REAL64 "enable 64 bit floats (i.e., double)" ON)
3827

28+
if(IDX64)
29+
set(_metis_idxwidth 64)
30+
else()
31+
set(_metis_idxwidth 32)
32+
endif()
33+
34+
if(REAL64)
35+
set(_metis_realwidth 64)
36+
else()
37+
set(_metis_realwidth 32)
38+
endif()
3939

40+
# Generate a metis.h in the build tree that prepends the width defines.
41+
# Read the source header FIRST so an in-source build cannot corrupt the original.
4042
set(METIS_GENERATED_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include")
4143
file(MAKE_DIRECTORY "${METIS_GENERATED_INCLUDE_DIR}")
42-
file(WRITE "${METIS_GENERATED_INCLUDE_DIR}/metis.h" "#define IDXTYPEWIDTH 32\n#define REALTYPEWIDTH 32\n")
43-
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/include/metis.h" METIS_PUBLIC_HEADER)
44-
file(APPEND "${METIS_GENERATED_INCLUDE_DIR}/metis.h" "${METIS_PUBLIC_HEADER}")
44+
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/include/metis.h" _metis_public_header)
45+
file(WRITE "${METIS_GENERATED_INCLUDE_DIR}/metis.h"
46+
"#define IDXTYPEWIDTH ${_metis_idxwidth}\n#define REALTYPEWIDTH ${_metis_realwidth}\n${_metis_public_header}")
4547

4648
# Add include directories.
4749
# i.e., the -I equivalent
@@ -56,6 +58,7 @@ link_directories(${CMAKE_INSTALL_PREFIX}/lib)
5658

5759
# Recursively look for CMakeLists.txt in subdirs.
5860
add_subdirectory("libmetis")
61+
5962
if(METIS_BUILD_PROGRAMS)
6063
add_subdirectory("programs")
6164
endif()

0 commit comments

Comments
 (0)