From a132b00740c1d8a54ed0a1835af5ca2da07bafc9 Mon Sep 17 00:00:00 2001 From: DaZuo0122 <1085701449@qq.com> Date: Fri, 16 Jan 2026 13:33:32 +0800 Subject: [PATCH] Add cmake/make for build system --- CMakeLists.txt | 41 +++++++++++++++++++++++++++++++++++++++++ Makefile | 18 ++++++++++++++++++ docs/status.md | 1 + 3 files changed, 60 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 Makefile diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a60c66d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,41 @@ +cmake_minimum_required(VERSION 3.20) +project(wtfnet LANGUAGES NONE) + +set(CARGO_CMD cargo) +set(CARGO_TARGET_DIR "${CMAKE_BINARY_DIR}/cargo-target") +set(BIN_NAME "wtfn${CMAKE_EXECUTABLE_SUFFIX}") +set(BIN_PATH "${CARGO_TARGET_DIR}/release/${BIN_NAME}") + +file(READ "${CMAKE_SOURCE_DIR}/crates/wtfnet-cli/Cargo.toml" CLI_TOML) +string(REGEX MATCH "version = \"([0-9]+\\.[0-9]+\\.[0-9]+)\"" CLI_VERSION_MATCH "${CLI_TOML}") +if(CMAKE_MATCH_1) + set(PACKAGE_VERSION "${CMAKE_MATCH_1}") +else() + set(PACKAGE_VERSION "0.1.0") +endif() + +add_custom_command( + OUTPUT "${BIN_PATH}" + COMMAND "${CMAKE_COMMAND}" -E env CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" + "${CARGO_CMD}" build --release --workspace --bin wtfn + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + COMMENT "Building wtfn with cargo" + VERBATIM +) + +add_custom_target(wtfnet_build ALL DEPENDS "${BIN_PATH}") + +install(PROGRAMS "${BIN_PATH}" DESTINATION bin) +install(DIRECTORY "${CMAKE_SOURCE_DIR}/data" DESTINATION share/wtfnet) + +add_dependencies(install wtfnet_build) + +set(CPACK_PACKAGE_NAME "wtfnet") +set(CPACK_PACKAGE_VERSION "${PACKAGE_VERSION}") +set(CPACK_PACKAGE_FILE_NAME "wtfnet-${PACKAGE_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") +if(WIN32) + set(CPACK_GENERATOR "ZIP") +else() + set(CPACK_GENERATOR "TGZ") +endif() +include(CPack) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ed27855 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +BUILD_DIR ?= build + +.PHONY: build configure package install clean + +configure: + cmake -S . -B $(BUILD_DIR) + +build: configure + cmake --build $(BUILD_DIR) + +package: build + cmake --build $(BUILD_DIR) --target package + +install: build + cmake --build $(BUILD_DIR) --target install + +clean: + cmake -E rm -rf $(BUILD_DIR) diff --git a/docs/status.md b/docs/status.md index 2a43906..b981206 100644 --- a/docs/status.md +++ b/docs/status.md @@ -57,6 +57,7 @@ This document tracks the planned roadmap alongside the current implementation st - DNS query/detect supports SOCKS5 proxying for DoH. - DNS watch (passive, best-effort) implemented. - Calc subcrate with subnet/contains/overlap/summarize wired to CLI. +- CMake/Makefile build, install, and package targets for release packaging. ### In progress - v0.2 features: http, tls, discover, diag.