From db9e40d60fb1f6e58a471d24b802d02291510c34 Mon Sep 17 00:00:00 2001 From: jianda sheng Date: Thu, 10 Aug 2023 01:11:04 +0800 Subject: [PATCH 1/2] metis can be used as submodul, with gklib is also submodule. cmake create the metis.h when generate. --- .gitignore | 2 ++ CMakeLists.txt | 49 +++++++++++++++------------- conf/gkbuild.cmake | 58 ++++++++++++++++----------------- include/{metis.h => metis.h.in} | 4 +-- libmetis/CMakeLists.txt | 15 ++++++--- 5 files changed, 71 insertions(+), 57 deletions(-) rename include/{metis.h => metis.h.in} (99%) diff --git a/.gitignore b/.gitignore index bf123be..1349ce5 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,5 @@ graphs/*.npart.* GKlib .svn/ +include/metis.h + diff --git a/CMakeLists.txt b/CMakeLists.txt index a15d19a..be043fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required(VERSION 2.8) project(METIS C) -set(SHARED FALSE CACHE BOOL "build a shared library") +set(METIS_SHARED FALSE CACHE BOOL "build a shared library") +set(METIS_BUILD_PROGRAMS TRUE CACHE BOOL "build metis programs") if(MSVC) set(METIS_INSTALL FALSE) @@ -10,34 +11,36 @@ else() endif() # Configure libmetis library. -if(SHARED) +if(METIS_SHARED) set(METIS_LIBRARY_TYPE SHARED) else() set(METIS_LIBRARY_TYPE STATIC) -endif(SHARED) +endif(METIS_SHARED) -include(./conf/gkbuild.cmake) +include(conf/gkbuild.cmake) # METIS' custom options -#option(IDX64 "enable 64 bit ints" OFF) -#option(REAL64 "enable 64 bit floats (i.e., double)" OFF) -#if(IDX64) -# set(METIS_COPTIONS "${METIS_COPTIONS} -DIDXTYPEWIDTH=64") -#else() -# set(METIS_COPTIONS "${METIS_COPTIONS} -DIDXTYPEWIDTH=32") -#endif(IDX64) -#if(REAL64) -# set(METIS_COPTIONS "${METIS_COPTIONS} -DREALTYPEWIDTH=64") -#else() -# set(METIS_COPTIONS "${METIS_COPTIONS} -DREALTYPEWIDTH=32") -#endif(REAL64) -# -#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${METIS_COPTIONS}") - +option(METIS_IDX64 "enable 64 bit ints" OFF) +option(METIS_REAL64 "enable 64 bit floats (i.e., double)" OFF) +if(IDX64) + set(IDXTYPEWIDTH 64) +else() + set(IDXTYPEWIDTH 32) +endif(IDX64) +if(REAL64) + set(REALTYPEWIDTH 64) +else() + set(REALTYPEWIDTH 32) +endif(REAL64) +configure_file ( + "${CMAKE_CURRENT_SOURCE_DIR}/include/metis.h.in" + "${CMAKE_CURRENT_SOURCE_DIR}/include/metis.h" + @ONLY +) # Add include directories. # i.e., the -I equivalent -include_directories(build/xinclude) +#include_directories(build/xinclude) include_directories(${GKLIB_PATH}/include) include_directories(${CMAKE_INSTALL_PREFIX}/include) @@ -47,6 +50,8 @@ link_directories(${GKLIB_PATH}/lib) link_directories(${CMAKE_INSTALL_PREFIX}/lib) # Recursively look for CMakeLists.txt in subdirs. -add_subdirectory("build/xinclude") +#add_subdirectory("build/xinclude") add_subdirectory("libmetis") -add_subdirectory("programs") +if(METIS_BUILD_PROGRAMS) + add_subdirectory("programs") +endif(METIS_BUILD_PROGRAMS) diff --git a/conf/gkbuild.cmake b/conf/gkbuild.cmake index 591ece4..174b292 100644 --- a/conf/gkbuild.cmake +++ b/conf/gkbuild.cmake @@ -3,16 +3,16 @@ include(CheckFunctionExists) include(CheckIncludeFile) # Setup options. -option(GDB "enable use of GDB" OFF) -option(ASSERT "turn asserts on" OFF) -option(ASSERT2 "additional assertions" OFF) -option(DEBUG "add debugging support" OFF) -option(GPROF "add gprof support" OFF) -option(VALGRIND "add valgrind support" OFF) -option(OPENMP "enable OpenMP support" OFF) -option(PCRE "enable PCRE support" OFF) -option(GKREGEX "enable GKREGEX support" OFF) -option(GKRAND "enable GKRAND support" OFF) +option(GKLIB_GDB "enable use of GDB" OFF) +option(GKLIB_ASSERT "turn asserts on" OFF) +option(GKLIB_ASSERT2 "additional assertions" OFF) +option(GKLIB_DEBUG "add debugging support" OFF) +option(GKLIB_GPROF "add gprof support" OFF) +option(GKLIB_VALGRIND "add valgrind support" OFF) +option(GKLIB_OPENMP "enable OpenMP support" OFF) +option(GKLIB_PCRE "enable PCRE support" OFF) +option(GKLIB_GKREGEX "enable GKREGEX support" OFF) +option(GKLIB_GKRAND "enable GKRAND support" OFF) # Add compiler flags. if(MSVC) @@ -29,7 +29,7 @@ endif(CYGWIN) if(CMAKE_COMPILER_IS_GNUCC) # GCC opts. set(GK_COPTIONS "${GK_COPTIONS} -std=c99 -fno-strict-aliasing") -if(VALGRIND) +if(GKLIB_VALGRIND) set(GK_COPTIONS "${GK_COPTIONS} -march=x86-64 -mtune=generic") else() # -march=native is not a valid flag on PPC: @@ -38,7 +38,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "power|ppc|powerpc|ppc64|powerpc64" OR (APPLE else() set(GK_COPTIONS "${GK_COPTIONS} -march=native") endif() -endif(VALGRIND) +endif(GKLIB_VALGRIND) if(NOT MINGW) set(GK_COPTIONS "${GK_COPTIONS} -fPIC") endif(NOT MINGW) @@ -60,33 +60,33 @@ if(APPLE) endif(APPLE) # Find OpenMP if it is requested. -if(OPENMP) +if(GKLIB_OPENMP) include(FindOpenMP) - if(OPENMP_FOUND) + if(GKLIB_OPENMP_FOUND) set(GK_COPTIONS "${GK_COPTIONS} -D__OPENMP__ ${OpenMP_C_FLAGS}") else() message(WARNING "OpenMP was requested but support was not found") - endif(OPENMP_FOUND) -endif(OPENMP) + endif(GKLIB_OPENMP_FOUND) +endif(GKLIB_OPENMP) # Add various definitions. -if(GDB) +if(GKLIB_GDB) set(GK_COPTS "${GK_COPTS} -g") set(GK_COPTIONS "${GK_COPTIONS} -Werror") else() set(GK_COPTS "-O3") -endif(GDB) +endif(GKLIB_GDB) -if(DEBUG) +if(GKLIB_DEBUG) set(GK_COPTS "-Og") set(GK_COPTIONS "${GK_COPTIONS} -DDEBUG") -endif(DEBUG) +endif(GKLIB_DEBUG) -if(GPROF) +if(GKLIB_GPROF) set(GK_COPTS "-pg") -endif(GPROF) +endif(GKLIB_GPROF) if(NOT ASSERT) set(GK_COPTIONS "${GK_COPTIONS} -DNDEBUG") @@ -98,17 +98,17 @@ endif(NOT ASSERT2) # Add various options -if(PCRE) +if(GKLIB_PCRE) set(GK_COPTIONS "${GK_COPTIONS} -D__WITHPCRE__") -endif(PCRE) +endif(GKLIB_PCRE) -if(GKREGEX) +if(GKLIB_GKREGEX) set(GK_COPTIONS "${GK_COPTIONS} -DUSE_GKREGEX") -endif(GKREGEX) +endif(GKLIB_GKREGEX) -if(GKRAND) +if(GKLIB_GKRAND) set(GK_COPTIONS "${GK_COPTIONS} -DUSE_GKRAND") -endif(GKRAND) +endif(GKLIB_GKRAND) # Check for features. @@ -131,7 +131,7 @@ if(MSVC) if("${HAVE_THREADLOCALSTORAGE}" MATCHES "^${HAVE_THREADLOCALSTORAGE}$") try_compile(HAVE_THREADLOCALSTORAGE ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/conf/check_thread_storage.c) + ${CMAKE_CURRENT_SOURCE_DIR}/conf/check_thread_storage.c) if(HAVE_THREADLOCALSTORAGE) message(STATUS "checking for thread-local storage - found") else() diff --git a/include/metis.h b/include/metis.h.in similarity index 99% rename from include/metis.h rename to include/metis.h.in index 5000d1b..3cd9bf9 100644 --- a/include/metis.h +++ b/include/metis.h.in @@ -30,7 +30,7 @@ GCC does provides these definitions in stdint.h, but it may require some modifications on other architectures. --------------------------------------------------------------------------*/ -//#define IDXTYPEWIDTH 32 +#define IDXTYPEWIDTH @IDXTYPEWIDTH@ /*-------------------------------------------------------------------------- @@ -40,7 +40,7 @@ 32 : single precision floating point (float) 64 : double precision floating point (double) --------------------------------------------------------------------------*/ -//#define REALTYPEWIDTH 32 +#define REALTYPEWIDTH @REALTYPEWIDTH@ diff --git a/libmetis/CMakeLists.txt b/libmetis/CMakeLists.txt index fc6cec6..8e59f45 100644 --- a/libmetis/CMakeLists.txt +++ b/libmetis/CMakeLists.txt @@ -1,14 +1,21 @@ # Add this directory for internal users. -include_directories(.) +set(METIS_NAME "metis" CACHE INTERNAL "") + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../include) # Find sources. -file(GLOB metis_sources *.c) +file(GLOB metis_sources *.h *.c) # Build libmetis. -add_library(metis ${METIS_LIBRARY_TYPE} ${metis_sources}) +add_library(${METIS_NAME} ${METIS_LIBRARY_TYPE} ${metis_sources}) + +if(GKLIB_NAME) + target_link_libraries(${METIS_NAME} ${GKLIB_NAME}) + add_dependencies(${METIS_NAME} ${GKLIB_NAME}) +endif() if(METIS_INSTALL) - install(TARGETS metis + install(TARGETS ${METIS_NAME} LIBRARY DESTINATION lib RUNTIME DESTINATION lib ARCHIVE DESTINATION lib) From ee28bbeb6a9eed09fac10ea34063f83913439b9a Mon Sep 17 00:00:00 2001 From: jianda sheng Date: Thu, 10 Aug 2023 23:07:38 +0800 Subject: [PATCH 2/2] fix config bug --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index be043fa..8768438 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,16 +22,16 @@ include(conf/gkbuild.cmake) # METIS' custom options option(METIS_IDX64 "enable 64 bit ints" OFF) option(METIS_REAL64 "enable 64 bit floats (i.e., double)" OFF) -if(IDX64) +if(METIS_IDX64) set(IDXTYPEWIDTH 64) else() set(IDXTYPEWIDTH 32) -endif(IDX64) -if(REAL64) +endif(METIS_IDX64) +if(METIS_REAL64) set(REALTYPEWIDTH 64) else() set(REALTYPEWIDTH 32) -endif(REAL64) +endif(METIS_REAL64) configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/include/metis.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/include/metis.h"