aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/metrohash
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/metrohash
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/metrohash')
-rw-r--r--vcpkg/ports/metrohash/CMakeLists.txt69
-rw-r--r--vcpkg/ports/metrohash/Config.cmake.in4
-rw-r--r--vcpkg/ports/metrohash/portfile.cmake29
-rw-r--r--vcpkg/ports/metrohash/vcpkg.json17
4 files changed, 119 insertions, 0 deletions
diff --git a/vcpkg/ports/metrohash/CMakeLists.txt b/vcpkg/ports/metrohash/CMakeLists.txt
new file mode 100644
index 0000000..d63a713
--- /dev/null
+++ b/vcpkg/ports/metrohash/CMakeLists.txt
@@ -0,0 +1,69 @@
+cmake_minimum_required(VERSION 3.5)
+project(metrohash LANGUAGES CXX)
+set(CMAKE_CXX_STANDARD 11)
+
+add_library(metrohash
+ src/metrohash64.cpp
+ src/metrohash128.cpp
+ )
+list(APPEND metro_headers src/metrohash.h src/metrohash64.h src/metrohash128.h)
+
+include(CheckCXXSourceCompiles)
+include(CheckCXXCompilerFlag)
+
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ check_cxx_compiler_flag("-msse4.2" HAS_MSSE42)
+ if(HAS_MSSE42)
+ target_compile_options(metrohash PRIVATE -msse4.2)
+ string(APPEND CMAKE_REQUIRED_FLAGS " -msse4.2")
+ endif()
+endif()
+
+check_cxx_source_compiles(
+"#include <nmmintrin.h>
+int main() {
+ _mm_crc32_u64(0, 0);
+ return 0;
+}"
+HAS_mm_crc32_u64)
+
+if(HAS_mm_crc32_u64)
+ list(APPEND metro_headers src/metrohash128crc.h)
+ target_sources(metrohash PRIVATE src/metrohash128crc.cpp)
+endif()
+if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
+ target_compile_options(metrohash PRIVATE -march=native)
+endif()
+
+set_target_properties(metrohash PROPERTIES
+ PUBLIC_HEADER "${metro_headers}"
+ )
+
+include(CMakePackageConfigHelpers)
+
+set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
+set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
+set(config_install_dir "lib/cmake/${PROJECT_NAME}")
+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
+set(namespace "${PROJECT_NAME}::")
+
+configure_package_config_file(
+ "${CMAKE_SOURCE_DIR}/cmake/Config.cmake.in"
+ "${project_config}"
+ INSTALL_DESTINATION "${config_install_dir}"
+)
+#Installation
+install(TARGETS metrohash
+ EXPORT "${TARGETS_EXPORT_NAME}"
+ LIBRARY DESTINATION "lib"
+ ARCHIVE DESTINATION "lib"
+ PUBLIC_HEADER DESTINATION "include")
+
+install(
+ FILES "${project_config}"
+ DESTINATION "${config_install_dir}"
+)
+install(EXPORT "${TARGETS_EXPORT_NAME}"
+ NAMESPACE "${namespace}"
+ DESTINATION "${config_install_dir}"
+ )
diff --git a/vcpkg/ports/metrohash/Config.cmake.in b/vcpkg/ports/metrohash/Config.cmake.in
new file mode 100644
index 0000000..38bbde7
--- /dev/null
+++ b/vcpkg/ports/metrohash/Config.cmake.in
@@ -0,0 +1,4 @@
+@PACKAGE_INIT@
+
+include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
+check_required_components("@PROJECT_NAME@")
diff --git a/vcpkg/ports/metrohash/portfile.cmake b/vcpkg/ports/metrohash/portfile.cmake
new file mode 100644
index 0000000..f4c669b
--- /dev/null
+++ b/vcpkg/ports/metrohash/portfile.cmake
@@ -0,0 +1,29 @@
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO jandrewrogers/MetroHash
+ REF v1.1.3
+ SHA512 02b6316e5ebf3d81465eea8a068565452be642394ddf5a53350affbbc9b9bfe1c3d182f7e8f7d49895351c48e11929e465777535e4354e01b6d0ba459e583ac5
+ HEAD_REF master
+)
+
+file(COPY "${CURRENT_PORT_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}")
+configure_file("${CURRENT_PORT_DIR}/Config.cmake.in" "${SOURCE_PATH}/cmake/Config.cmake.in" COPYONLY)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+)
+
+vcpkg_cmake_install()
+vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/${PORT})
+vcpkg_copy_pdbs()
+
+if(NOT EXISTS "${CURRENT_PACKAGES_DIR}/include/metrohash128crc.h")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/metrohash.h"
+ "#include \"metrohash128crc.h\""
+ "//#include \"metrohash128crc.h\" // The target platform does not support _mm_crc32_u64")
+endif()
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
+file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
diff --git a/vcpkg/ports/metrohash/vcpkg.json b/vcpkg/ports/metrohash/vcpkg.json
new file mode 100644
index 0000000..f12705e
--- /dev/null
+++ b/vcpkg/ports/metrohash/vcpkg.json
@@ -0,0 +1,17 @@
+{
+ "name": "metrohash",
+ "version": "1.1.3",
+ "port-version": 5,
+ "description": "MetroHash is a set of state-of-the-art hash functions for non-cryptographic use cases",
+ "homepage": "https://github.com/jandrewrogers/MetroHash",
+ "dependencies": [
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ }
+ ]
+}