diff options
Diffstat (limited to 'vcpkg/ports/metis')
| -rw-r--r-- | vcpkg/ports/metis/build-fixes.patch | 146 | ||||
| -rw-r--r-- | vcpkg/ports/metis/install_config.cmake | 33 | ||||
| -rw-r--r-- | vcpkg/ports/metis/portfile.cmake | 23 | ||||
| -rw-r--r-- | vcpkg/ports/metis/vcpkg.json | 18 |
4 files changed, 220 insertions, 0 deletions
diff --git a/vcpkg/ports/metis/build-fixes.patch b/vcpkg/ports/metis/build-fixes.patch new file mode 100644 index 0000000..0328e25 --- /dev/null +++ b/vcpkg/ports/metis/build-fixes.patch @@ -0,0 +1,146 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index ef34603..0168a4b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,9 +1,12 @@ + cmake_minimum_required(VERSION 3.10) + project(METIS C) + +-set(SHARED FALSE CACHE BOOL "build a shared library") ++set(SHARED "${BUILD_SHARED_LIBS}" CACHE BOOL "build a shared library") ++if(WIN32 AND SHARED) ++ add_compile_definitions(-D_WINDLL) ++endif() + +-if(MSVC) ++if(0) + set(METIS_INSTALL FALSE) + else() + set(METIS_INSTALL TRUE) +@@ -38,15 +41,12 @@ include(./conf/gkbuild.cmake) + # Add include directories. + # i.e., the -I equivalent + include_directories(build/xinclude) +-include_directories(${GKLIB_PATH}/include) +-include_directories(${CMAKE_INSTALL_PREFIX}/include) + + # List of paths that the compiler will search for library files. + # i.e., the -L equivalent +-link_directories(${GKLIB_PATH}/lib) +-link_directories(${CMAKE_INSTALL_PREFIX}/lib) + + # Recursively look for CMakeLists.txt in subdirs. + add_subdirectory("build/xinclude") + add_subdirectory("libmetis") +-add_subdirectory("programs") ++ ++include(install_config.cmake) +diff --git a/conf/gkbuild.cmake b/conf/gkbuild.cmake +index 591ece4..3719093 100644 +--- a/conf/gkbuild.cmake ++++ b/conf/gkbuild.cmake +@@ -16,7 +16,6 @@ option(GKRAND "enable GKRAND support" OFF) + + # Add compiler flags. + if(MSVC) +- set(GK_COPTS "/Ox") + set(GK_COPTIONS "-DWIN32 -DMSC -D_CRT_SECURE_NO_DEPRECATE -DUSE_GKREGEX") + elseif(MINGW) + set(GK_COPTS "-DUSE_GKREGEX") +@@ -31,6 +30,8 @@ if(CMAKE_COMPILER_IS_GNUCC) + set(GK_COPTIONS "${GK_COPTIONS} -std=c99 -fno-strict-aliasing") + if(VALGRIND) + set(GK_COPTIONS "${GK_COPTIONS} -march=x86-64 -mtune=generic") ++elseif(1) ++ # Use flags from toolchain and triplet + else() + # -march=native is not a valid flag on PPC: + if(CMAKE_SYSTEM_PROCESSOR MATCHES "power|ppc|powerpc|ppc64|powerpc64" OR (APPLE AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc|ppc64")) +@@ -44,6 +45,7 @@ endif(VALGRIND) + endif(NOT MINGW) + # GCC warnings. + set(GK_COPTIONS "${GK_COPTIONS} -Werror -Wall -pedantic -Wno-unused-function -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unknown-pragmas -Wno-unused-label") ++ string(REPLACE " -Werror " " " GK_COPTIONS "${GK_COPTIONS}") + elseif(${CMAKE_C_COMPILER_ID} MATCHES "Sun") + # Sun insists on -xc99. + set(GK_COPTIONS "${GK_COPTIONS} -xc99") +@@ -74,6 +76,8 @@ endif(OPENMP) + if(GDB) + set(GK_COPTS "${GK_COPTS} -g") + set(GK_COPTIONS "${GK_COPTIONS} -Werror") ++elseif(1) ++ # Use flags from toolchain and triplet + else() + set(GK_COPTS "-O3") + endif(GDB) +diff --git a/include/metis.h b/include/metis.h +index ab475fe..8033858 100644 +--- a/include/metis.h ++++ b/include/metis.h +@@ -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 32 + + + /*-------------------------------------------------------------------------- +@@ -40,7 +40,7 @@ + 32 : single precision floating point (float) + 64 : double precision floating point (double) + --------------------------------------------------------------------------*/ +-//#define REALTYPEWIDTH 32 ++#define REALTYPEWIDTH 32 + + + +@@ -72,10 +72,14 @@ typedef __int64 int64_t; + #define PRId64 "I64d" + #define SCNd32 "ld" + #define SCNd64 "I64d" ++#ifdef _WIN32 ++#include <stdint.h> ++#else + #define INT32_MIN ((int32_t)_I32_MIN) + #define INT32_MAX _I32_MAX + #define INT64_MIN ((int64_t)_I64_MIN) + #define INT64_MAX _I64_MAX ++#endif // ^^^ !_WIN32 + #else + #include <inttypes.h> + #endif +diff --git a/libmetis/CMakeLists.txt b/libmetis/CMakeLists.txt +index fc6cec6..a56f6ca 100644 +--- a/libmetis/CMakeLists.txt ++++ b/libmetis/CMakeLists.txt +@@ -6,10 +6,15 @@ file(GLOB metis_sources *.c) + + # Build libmetis. + add_library(metis ${METIS_LIBRARY_TYPE} ${metis_sources}) ++target_include_directories(metis INTERFACE $<INSTALL_INTERFACE:include>) ++ ++find_package(GKlib CONFIG REQUIRED) ++target_link_libraries(metis PRIVATE GKlib::GKlib) + + if(METIS_INSTALL) + install(TARGETS metis ++ EXPORT metisTargets + LIBRARY DESTINATION lib +- RUNTIME DESTINATION lib ++ RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib) + endif() +diff --git a/libmetis/metislib.h b/libmetis/metislib.h +index dc224f4..1efccda 100644 +--- a/libmetis/metislib.h ++++ b/libmetis/metislib.h +@@ -31,7 +31,7 @@ + #include "proto.h" + + +-#if defined(COMPILER_MSC) ++#if defined(COMPILER_MSC) && (_MSC_VER < 1900) + #if defined(rint) + #undef rint + #endif diff --git a/vcpkg/ports/metis/install_config.cmake b/vcpkg/ports/metis/install_config.cmake new file mode 100644 index 0000000..50b4b1c --- /dev/null +++ b/vcpkg/ports/metis/install_config.cmake @@ -0,0 +1,33 @@ +install(EXPORT metisTargets
+ FILE metisTargets.cmake
+ DESTINATION share/metis
+)
+
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/metisConfig.cmake"
+ "include(CMakeFindDependencyMacro)
+find_dependency(GKlib CONFIG)
+include(\"\${CMAKE_CURRENT_LIST_DIR}/metisTargets.cmake\")
+")
+
+# Copied from https://github.com/ceres-solver/ceres-solver/blob/2.2.0/cmake/FindMETIS.cmake#L69-L77
+file(READ "${PROJECT_SOURCE_DIR}/include/metis.h" _METIS_VERSION_CONTENTS)
+string(REGEX REPLACE ".*#define METIS_VER_MAJOR[ \t]+([0-9]+).*" "\\1"
+ METIS_VERSION_MAJOR "${_METIS_VERSION_CONTENTS}")
+string(REGEX REPLACE ".*#define METIS_VER_MINOR[ \t]+([0-9]+).*" "\\1"
+ METIS_VERSION_MINOR "${_METIS_VERSION_CONTENTS}")
+string(REGEX REPLACE ".*#define METIS_VER_SUBMINOR[ \t]+([0-9]+).*" "\\1"
+ METIS_VERSION_PATCH "${_METIS_VERSION_CONTENTS}")
+set(METIS_VERSION "${METIS_VERSION_MAJOR}.${METIS_VERSION_MINOR}.${METIS_VERSION_PATCH}")
+
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file(
+ "${CMAKE_CURRENT_BINARY_DIR}/metisConfigVersion.cmake"
+ VERSION ${METIS_VERSION}
+ COMPATIBILITY SameMajorVersion
+)
+
+install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/metisConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/metisConfigVersion.cmake"
+ DESTINATION "share/metis"
+)
diff --git a/vcpkg/ports/metis/portfile.cmake b/vcpkg/ports/metis/portfile.cmake new file mode 100644 index 0000000..c96610d --- /dev/null +++ b/vcpkg/ports/metis/portfile.cmake @@ -0,0 +1,23 @@ +vcpkg_from_github(OUT_SOURCE_PATH SOURCE_PATH + REPO KarypisLab/METIS + REF a6e6a2cfa92f93a3ee2971ebc9ddfc3b0b581ab2 + SHA512 c41168788c287ed9baea3c43c1ea8ef7d0bbdaa340a03cbbb5d0ba2d928d8a6dd83e2b77e7d3fabc58ac6d2b59a4be0492940e31460fe5e1807849cb98e80d2e + PATCHES + build-fixes.patch +) +file(COPY "${SOURCE_PATH}/include/" DESTINATION "${SOURCE_PATH}/build/xinclude") +file(COPY "${CMAKE_CURRENT_LIST_DIR}/install_config.cmake" DESTINATION "${SOURCE_PATH}") + +vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}") +vcpkg_cmake_install() +vcpkg_copy_pdbs() +vcpkg_cmake_config_fixup() + +if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/metis.h" "#ifdef _WINDLL" "#if 1") + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/metis.h" "__declspec(dllexport)" "__declspec(dllimport)") +endif() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/vcpkg/ports/metis/vcpkg.json b/vcpkg/ports/metis/vcpkg.json new file mode 100644 index 0000000..5178825 --- /dev/null +++ b/vcpkg/ports/metis/vcpkg.json @@ -0,0 +1,18 @@ +{ + "name": "metis", + "version-date": "2025-07-04", + "description": "Serial Graph Partitioning and Fill-reducing Matrix Ordering", + "homepage": "https://github.com/KarypisLab/METIS", + "license": "Apache-2.0", + "dependencies": [ + "gklib", + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ] +} |