11cmake_minimum_required (VERSION 3.10 )
22project (METIS C )
3+ set (CMAKE_C_STANDARD 99)
34
45set (CMAKE_POSITION_INDEPENDENT_CODE ON )
56set (SHARED FALSE CACHE BOOL "build a shared library" )
@@ -21,27 +22,28 @@ endif(SHARED)
2122include (./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.
4042set (METIS_GENERATED_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR} /include" )
4143file (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.
5860add_subdirectory ("libmetis" )
61+
5962if (METIS_BUILD_PROGRAMS)
6063 add_subdirectory ("programs" )
6164endif ()
0 commit comments