329 lines
9.6 KiB
Diff
329 lines
9.6 KiB
Diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -1,25 +1,10 @@
|
|
-cmake_minimum_required(VERSION 2.8)
|
|
-project(METIS)
|
|
+cmake_minimum_required(VERSION 3.0)
|
|
+project(METIS VERSION 5.1.0 LANGUAGES C)
|
|
|
|
-set(GKLIB_PATH "GKlib" CACHE PATH "path to GKlib")
|
|
-set(SHARED FALSE CACHE BOOL "build a shared library")
|
|
-
|
|
-if(MSVC)
|
|
- set(METIS_INSTALL FALSE)
|
|
-else()
|
|
- set(METIS_INSTALL TRUE)
|
|
-endif()
|
|
-
|
|
-# Configure libmetis library.
|
|
-if(SHARED)
|
|
- set(METIS_LIBRARY_TYPE SHARED)
|
|
-else()
|
|
- set(METIS_LIBRARY_TYPE STATIC)
|
|
-endif(SHARED)
|
|
-
|
|
-include(${GKLIB_PATH}/GKlibSystem.cmake)
|
|
+include(GNUInstallDirs)
|
|
+include(GKlib/GKlibSystem.cmake)
|
|
# Add include directories.
|
|
-include_directories(${GKLIB_PATH})
|
|
+include_directories(GKlib)
|
|
include_directories(include)
|
|
# Recursively look for CMakeLists.txt in subdirs.
|
|
add_subdirectory("include")
|
|
diff --git a/GKlib/CMakeLists.txt b/GKlib/CMakeLists.txt
|
|
--- a/GKlib/CMakeLists.txt
|
|
+++ b/GKlib/CMakeLists.txt
|
|
@@ -1,21 +1,23 @@
|
|
-cmake_minimum_required(VERSION 2.8)
|
|
-project(GKlib)
|
|
+cmake_minimum_required(VERSION 3.0)
|
|
+project(GKlib LANGUAGES C)
|
|
|
|
-get_filename_component(abs "." ABSOLUTE)
|
|
-set(GKLIB_PATH ${abs})
|
|
-unset(abs)
|
|
+include(GNUInstallDirs)
|
|
include(GKlibSystem.cmake)
|
|
|
|
include_directories(".")
|
|
-add_library(GKlib STATIC ${GKlib_sources})
|
|
+add_library(GKlib ${GKlib_sources})
|
|
+if(OPENMP AND OPENMP_FOUND)
|
|
+ set_property(TARGET GKlib APPEND PROPERTY COMPILE_FLAGS ${OpenMP_C_FLAGS})
|
|
+ set_property(TARGET GKlib APPEND PROPERTY LINK_FLAGS ${OpenMP_C_FLAGS})
|
|
+endif()
|
|
if(UNIX)
|
|
- target_link_libraries(GKlib m)
|
|
+ target_link_libraries(GKlib PRIVATE m)
|
|
endif(UNIX)
|
|
|
|
include_directories("test")
|
|
add_subdirectory("test")
|
|
|
|
install(TARGETS GKlib
|
|
- ARCHIVE DESTINATION lib
|
|
- LIBRARY DESTINATION lib)
|
|
-install(FILES ${GKlib_includes} DESTINATION include)
|
|
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
+install(FILES ${GKlib_includes} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GKlib)
|
|
diff --git a/GKlib/GKlibSystem.cmake b/GKlib/GKlibSystem.cmake
|
|
--- a/GKlib/GKlibSystem.cmake
|
|
+++ b/GKlib/GKlibSystem.cmake
|
|
@@ -15,35 +15,28 @@
|
|
|
|
# Add compiler flags.
|
|
if(MSVC)
|
|
- set(GKlib_COPTS "/Ox")
|
|
- set(GKlib_COPTIONS "-DWIN32 -DMSC -D_CRT_SECURE_NO_DEPRECATE -DUSE_GKREGEX")
|
|
-elseif(MINGW)
|
|
- set(GKlib_COPTS "-DUSE_GKREGEX")
|
|
-else()
|
|
- set(GKlib_COPTS "-O3")
|
|
- set(GKlib_COPTIONS "-DLINUX -D_FILE_OFFSET_BITS=64")
|
|
-endif(MSVC)
|
|
-if(CYGWIN)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -DCYGWIN")
|
|
-endif(CYGWIN)
|
|
+ add_definitions(-DWIN32 -DMSC -D_CRT_SECURE_NO_DEPRECATE)
|
|
+elseif(UNIX)
|
|
+ add_definitions(-DLINUX -D_FILE_OFFSET_BITS=64)
|
|
+elseif(CYGWIN)
|
|
+ add_definitions(-DCYGWIN)
|
|
+endif()
|
|
+
|
|
if(CMAKE_COMPILER_IS_GNUCC)
|
|
# GCC opts.
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -std=c99 -fno-strict-aliasing")
|
|
- if(NOT MINGW)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -fPIC")
|
|
- endif(NOT MINGW)
|
|
+ add_compile_options(-std=c99 -fno-strict-aliasing)
|
|
# GCC warnings.
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -Wall -pedantic -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unknown-pragmas")
|
|
+ add_compile_options(-Wall -pedantic -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unknown-pragmas)
|
|
elseif(${CMAKE_C_COMPILER_ID} MATCHES "Sun")
|
|
# Sun insists on -xc99.
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -xc99")
|
|
+ add_compile_options(-xc99)
|
|
endif(CMAKE_COMPILER_IS_GNUCC)
|
|
|
|
# Find OpenMP if it is requested.
|
|
if(OPENMP)
|
|
include(FindOpenMP)
|
|
if(OPENMP_FOUND)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -D__OPENMP__ ${OpenMP_C_FLAGS}")
|
|
+ add_definitions(-D__OPENMP__)
|
|
else()
|
|
message(WARNING "OpenMP was requested but support was not found")
|
|
endif(OPENMP_FOUND)
|
|
@@ -52,64 +45,64 @@
|
|
|
|
# Add various definitions.
|
|
if(GDB)
|
|
- set(GKlib_COPTS "${GKlib_COPTS} -g")
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -Werror")
|
|
+ add_compile_options(-g)
|
|
+ add_compile_options(-Werror)
|
|
endif(GDB)
|
|
|
|
|
|
if(DEBUG)
|
|
- set(GKlib_COPTS "-g")
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -DDEBUG")
|
|
+ add_compile_options(-g)
|
|
+ add_definitions(-DDEBUG)
|
|
endif(DEBUG)
|
|
|
|
if(GPROF)
|
|
- set(GKlib_COPTS "-pg")
|
|
+ add_compile_options(-pg)
|
|
endif(GPROF)
|
|
|
|
if(NOT ASSERT)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -DNDEBUG")
|
|
+ add_definitions(-DNDEBUG)
|
|
endif(NOT ASSERT)
|
|
|
|
if(NOT ASSERT2)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -DNDEBUG2")
|
|
+ add_definitions(-DNDEBUG2)
|
|
endif(NOT ASSERT2)
|
|
|
|
|
|
# Add various options
|
|
if(PCRE)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -D__WITHPCRE__")
|
|
+ add_definitions(-D__WITHPCRE__)
|
|
endif(PCRE)
|
|
|
|
if(GKREGEX)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -DUSE_GKREGEX")
|
|
+ add_definitions(-DUSE_GKREGEX)
|
|
endif(GKREGEX)
|
|
|
|
if(GKRAND)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -DUSE_GKRAND")
|
|
+ add_definitions(-DUSE_GKRAND)
|
|
endif(GKRAND)
|
|
|
|
|
|
# Check for features.
|
|
check_include_file(execinfo.h HAVE_EXECINFO_H)
|
|
if(HAVE_EXECINFO_H)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -DHAVE_EXECINFO_H")
|
|
+ add_definitions(-DHAVE_EXECINFO_H)
|
|
endif(HAVE_EXECINFO_H)
|
|
|
|
check_function_exists(getline HAVE_GETLINE)
|
|
if(HAVE_GETLINE)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -DHAVE_GETLINE")
|
|
+ add_definitions(-DHAVE_GETLINE)
|
|
endif(HAVE_GETLINE)
|
|
|
|
|
|
# Custom check for TLS.
|
|
if(MSVC)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -D__thread=__declspec(thread)")
|
|
+ add_definitions(-D__thread=__declspec\(thread\))
|
|
else()
|
|
# This if checks if that value is cached or not.
|
|
if("${HAVE_THREADLOCALSTORAGE}" MATCHES "^${HAVE_THREADLOCALSTORAGE}$")
|
|
try_compile(HAVE_THREADLOCALSTORAGE
|
|
${CMAKE_BINARY_DIR}
|
|
- ${GKLIB_PATH}/conf/check_thread_storage.c)
|
|
+ ${CMAKE_CURRENT_LIST_DIR}/conf/check_thread_storage.c)
|
|
if(HAVE_THREADLOCALSTORAGE)
|
|
message(STATUS "checking for thread-local storage - found")
|
|
else()
|
|
@@ -117,13 +110,10 @@
|
|
endif()
|
|
endif()
|
|
if(NOT HAVE_THREADLOCALSTORAGE)
|
|
- set(GKlib_COPTIONS "${GKlib_COPTIONS} -D__thread=")
|
|
+ add_definitions(-D__thread=)
|
|
endif()
|
|
endif()
|
|
|
|
-# Finally set the official C flags.
|
|
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GKlib_COPTIONS} ${GKlib_COPTS}")
|
|
-
|
|
# Find GKlib sources.
|
|
-file(GLOB GKlib_sources ${GKLIB_PATH}/*.c)
|
|
-file(GLOB GKlib_includes ${GKLIB_PATH}/*.h)
|
|
+file(GLOB GKlib_sources ${CMAKE_CURRENT_LIST_DIR}/*.c)
|
|
+file(GLOB GKlib_includes ${CMAKE_CURRENT_LIST_DIR}/*.h)
|
|
diff --git a/Makefile b/Makefile
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -6,7 +6,6 @@
|
|
gprof = not-set
|
|
openmp = not-set
|
|
prefix = not-set
|
|
-gklib_path = not-set
|
|
shared = not-set
|
|
cc = not-set
|
|
|
|
@@ -20,10 +19,6 @@
|
|
|
|
# Process configuration options.
|
|
CONFIG_FLAGS = -DCMAKE_VERBOSE_MAKEFILE=1
|
|
-ifeq ($(gklib_path), not-set)
|
|
- gklib_path = GKlib
|
|
-endif
|
|
-CONFIG_FLAGS += -DGKLIB_PATH=$(abspath $(gklib_path))
|
|
ifneq ($(gdb), not-set)
|
|
CONFIG_FLAGS += -DGDB=$(gdb)
|
|
endif
|
|
@@ -46,7 +41,7 @@
|
|
CONFIG_FLAGS += -DCMAKE_INSTALL_PREFIX=$(prefix)
|
|
endif
|
|
ifneq ($(shared), not-set)
|
|
- CONFIG_FLAGS += -DSHARED=1
|
|
+ CONFIG_FLAGS += -DBUILD_SHARED_LIBS=1
|
|
endif
|
|
ifneq ($(cc), not-set)
|
|
CONFIG_FLAGS += -DCMAKE_C_COMPILER=$(cc)
|
|
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
|
|
--- a/include/CMakeLists.txt
|
|
+++ b/include/CMakeLists.txt
|
|
@@ -1,3 +1 @@
|
|
-if(METIS_INSTALL)
|
|
- install(FILES metis.h DESTINATION include)
|
|
-endif()
|
|
+install(FILES metis.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/metis)
|
|
diff --git a/libmetis/CMakeLists.txt b/libmetis/CMakeLists.txt
|
|
--- a/libmetis/CMakeLists.txt
|
|
+++ b/libmetis/CMakeLists.txt
|
|
@@ -3,14 +3,20 @@
|
|
# Find sources.
|
|
file(GLOB metis_sources *.c)
|
|
# Build libmetis.
|
|
-add_library(metis ${METIS_LIBRARY_TYPE} ${GKlib_sources} ${metis_sources})
|
|
+add_library(metis ${GKlib_sources} ${metis_sources})
|
|
+if(OPENMP AND OPENMP_FOUND)
|
|
+ set_property(TARGET metis APPEND PROPERTY COMPILE_FLAGS ${OpenMP_C_FLAGS})
|
|
+ set_property(TARGET metis APPEND PROPERTY LINK_FLAGS ${OpenMP_C_FLAGS})
|
|
+endif()
|
|
if(UNIX)
|
|
- target_link_libraries(metis m)
|
|
+ target_link_libraries(metis PRIVATE m)
|
|
endif()
|
|
|
|
-if(METIS_INSTALL)
|
|
- install(TARGETS metis
|
|
- LIBRARY DESTINATION lib
|
|
- RUNTIME DESTINATION lib
|
|
- ARCHIVE DESTINATION lib)
|
|
-endif()
|
|
+install(TARGETS metis
|
|
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
+
|
|
+configure_file(metis.pc.in metis.pc @ONLY)
|
|
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/metis.pc
|
|
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
diff --git a/libmetis/metis.pc.in b/libmetis/metis.pc.in
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/libmetis/metis.pc.in
|
|
@@ -0,0 +1,12 @@
|
|
+prefix=@CMAKE_INSTALL_PREFIX@
|
|
+exec_prefix=${prefix}
|
|
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
|
|
+includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|
+
|
|
+Name: @PROJECT_NAME@
|
|
+Description: Software for partitioning unstructured graphs and meshes
|
|
+Version: @PROJECT_VERSION@
|
|
+URL: http://glaros.dtc.umn.edu/gkhome/metis/metis/overview
|
|
+Libs: -L${libdir} -lmetis
|
|
+Libs.private: -lm
|
|
+Cflags: -I${includedir}/metis
|
|
diff --git a/programs/CMakeLists.txt b/programs/CMakeLists.txt
|
|
--- a/programs/CMakeLists.txt
|
|
+++ b/programs/CMakeLists.txt
|
|
@@ -1,6 +1,5 @@
|
|
# These programs use internal metis data structures.
|
|
include_directories(../libmetis)
|
|
-link_directories(/home/karypis/local/lib)
|
|
# Build program.
|
|
add_executable(gpmetis gpmetis.c cmdline_gpmetis.c io.c stat.c)
|
|
add_executable(ndmetis ndmetis.c cmdline_ndmetis.c io.c smbfactor.c)
|
|
@@ -13,10 +12,8 @@
|
|
# target_link_libraries(${prog} metis profiler)
|
|
endforeach(prog)
|
|
|
|
-if(METIS_INSTALL)
|
|
- install(TARGETS gpmetis ndmetis mpmetis m2gmetis graphchk cmpfillin
|
|
- RUNTIME DESTINATION bin)
|
|
-endif()
|
|
+install(TARGETS gpmetis ndmetis mpmetis m2gmetis graphchk cmpfillin
|
|
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# Try to find subversion revision.
|
|
set(SVNREV "")
|