2025-09-25 16:04:33 +01:00
|
|
|
|
# Copyright (c) 2017-2025 Lethean https://lt.hn
|
2019-02-20 02:42:47 +00:00
|
|
|
|
# Copyright (c) 2014-2019 Zano Project
|
|
|
|
|
|
# Copyright (c) 2014 The Cryptonote developers
|
|
|
|
|
|
# Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
2025-09-25 00:25:52 +01:00
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
|
|
# Detect the number of logical CPU cores – works on Linux,
|
|
|
|
|
|
# macOS, BSD, and Windows (both cmd.exe and PowerShell).
|
|
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
# Default to “unknown” – will be overwritten below.
|
|
|
|
|
|
CPU_CORES := 1
|
2025-09-30 16:48:13 +01:00
|
|
|
|
TESTNET:= 0
|
2025-10-05 14:00:36 +01:00
|
|
|
|
STATIC:= 0
|
2025-09-30 16:48:13 +01:00
|
|
|
|
BUILD_TYPE ?=Release
|
|
|
|
|
|
BUILD_VERSION:=6.0.1
|
2025-10-05 14:00:36 +01:00
|
|
|
|
BUILD_FOLDER:=build/release
|
2025-10-09 00:25:29 +01:00
|
|
|
|
PRESET_BUILD:=conan-release
|
|
|
|
|
|
PRESET_CONFIGURE:=conan-release
|
2025-09-25 00:25:52 +01:00
|
|
|
|
|
|
|
|
|
|
UNAME_S := $(shell uname -s 2>/dev/null || echo Unknown)
|
|
|
|
|
|
|
|
|
|
|
|
ifeq ($(UNAME_S),Linux)
|
|
|
|
|
|
# Linux: try nproc first, fall back to /proc
|
|
|
|
|
|
CPU_CORES := $(shell nproc 2>/dev/null || \
|
|
|
|
|
|
grep -c ^processor /proc/cpuinfo 2>/dev/null || echo 1)
|
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
ifeq ($(UNAME_S),Darwin)
|
|
|
|
|
|
# macOS: sysctl reports the number of logical CPUs
|
|
|
|
|
|
CPU_CORES := $(shell sysctl -n hw.logicalcpu 2>/dev/null || echo 1)
|
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
ifeq ($(filter %BSD,$(UNAME_S)),%BSD)
|
|
|
|
|
|
# *BSD: also sysctl, but the key differs on some variants
|
|
|
|
|
|
CPU_CORES := $(shell sysctl -n hw.ncpu 2>/dev/null || echo 1)
|
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
ifeq ($(OS),Windows_NT)
|
2025-10-09 00:25:29 +01:00
|
|
|
|
|
|
|
|
|
|
PRESET_CONFIGURE:=conan-default
|
|
|
|
|
|
|
2025-09-25 00:25:52 +01:00
|
|
|
|
# Prefer the environment variable that Windows sets for us.
|
|
|
|
|
|
# It works in both cmd.exe and PowerShell.
|
|
|
|
|
|
CPU_CORES := $(NUMBER_OF_PROCESSORS)
|
|
|
|
|
|
|
|
|
|
|
|
# If for some reason the env var is empty, fall back to PowerShell.
|
|
|
|
|
|
ifeq ($(CPU_CORES),)
|
|
|
|
|
|
CPU_CORES := $(shell powershell -NoProfile -Command ^ "[Environment]::ProcessorCount")
|
|
|
|
|
|
endif
|
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
|
|
# Safety net – ensure we always have a positive integer.
|
|
|
|
|
|
# -----------------------------------------------------------------
|
|
|
|
|
|
CPU_CORES := $(or $(CPU_CORES),1)
|
|
|
|
|
|
CPU_CORES := $(shell expr $(CPU_CORES) + 0 2>/dev/null || echo 1)
|
2025-10-06 22:38:29 +01:00
|
|
|
|
CONAN_CPU_COUNT=$(CPU_CORES)
|
2025-09-24 21:01:35 +01:00
|
|
|
|
|
2025-10-11 16:18:37 +01:00
|
|
|
|
PROFILES :=$(patsubst cmake/profiles/%,%,$(wildcard cmake/profiles/*))
|
|
|
|
|
|
SORTED_PROFILES :=$(sort $(PROFILES))
|
|
|
|
|
|
CONAN_CACHE :=$(CURDIR)/build/sdk
|
|
|
|
|
|
CONAN_URL :=https://artifacts.host.uk.com/artifactory/api/conan/conan-build
|
|
|
|
|
|
CONAN_USER :=public
|
|
|
|
|
|
CONAN_PASSWORD :=Lethean1234
|
|
|
|
|
|
CONAN_EXECUTABLE :=$(CURDIR)/build/bin/conan
|
|
|
|
|
|
CC_DOCKER_FILE ?=utils/docker/images/lthn-chain/Dockerfile
|
|
|
|
|
|
SDK_PACKAGES_JSON :=$(wildcard utils/sdk/packages/*.json)
|
|
|
|
|
|
SDK_TARGETS :=$(patsubst utils/sdk/packages/%.json,%,$(SDK_PACKAGES_JSON))
|
|
|
|
|
|
SORTED_SDK_TARGETS :=$(sort $(SDK_TARGETS))
|
2025-10-06 22:38:29 +01:00
|
|
|
|
|
2025-09-25 16:04:33 +01:00
|
|
|
|
all: help
|
2018-12-27 18:50:45 +03:00
|
|
|
|
|
2025-10-09 03:10:46 +01:00
|
|
|
|
testnet:
|
2025-10-13 17:46:31 +01:00
|
|
|
|
$(MAKE) configure TESTNET=1 STATIC=$(STATIC)
|
2025-10-11 12:45:27 +01:00
|
|
|
|
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) build .
|
2025-10-12 00:14:33 +01:00
|
|
|
|
$(MAKE) package
|
2025-10-09 03:10:46 +01:00
|
|
|
|
|
|
|
|
|
|
mainnet:
|
2025-10-13 17:46:31 +01:00
|
|
|
|
$(MAKE) configure TESTNET=0 STATIC=$(STATIC)
|
2025-10-11 12:45:27 +01:00
|
|
|
|
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) build .
|
2025-10-12 00:14:33 +01:00
|
|
|
|
$(MAKE) package
|
2025-10-09 03:10:46 +01:00
|
|
|
|
|
2025-10-05 14:00:36 +01:00
|
|
|
|
release: docs build
|
|
|
|
|
|
(cd $(BUILD_FOLDER) && cpack)
|
2025-10-06 22:38:29 +01:00
|
|
|
|
@rm -rf $(CURDIR)/build/packages/_CPack_Packages
|
2025-10-05 14:00:36 +01:00
|
|
|
|
|
|
|
|
|
|
build: configure
|
2025-10-09 00:25:29 +01:00
|
|
|
|
cmake --build --preset $(PRESET_BUILD) --parallel=$(CPU_CORES)
|
2025-10-05 14:00:36 +01:00
|
|
|
|
|
|
|
|
|
|
build-deps: conan-profile-detect
|
|
|
|
|
|
@echo "Build Dependencies: $(BUILD_TYPE) testnet=$(TESTNET)"
|
2025-10-06 22:38:29 +01:00
|
|
|
|
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) install . --build=missing -s build_type=$(BUILD_TYPE)
|
2025-10-05 14:00:36 +01:00
|
|
|
|
|
2025-10-12 00:14:33 +01:00
|
|
|
|
package:
|
|
|
|
|
|
@echo "Packaging: $(BUILD_TYPE) testnet=$(TESTNET)"
|
|
|
|
|
|
(cd $(BUILD_FOLDER) && cpack)
|
2025-10-13 18:43:12 +01:00
|
|
|
|
ifneq ($(OS),Windows_NT)
|
2025-10-12 00:14:33 +01:00
|
|
|
|
@rm -rf $(CURDIR)/build/packages/_CPack_Packages
|
2025-10-13 18:43:12 +01:00
|
|
|
|
endif
|
2025-10-12 00:14:33 +01:00
|
|
|
|
|
2025-10-05 14:00:36 +01:00
|
|
|
|
configure: build-deps
|
|
|
|
|
|
@echo "Running Configure: $(BUILD_TYPE) testnet=$(TESTNET)"
|
2025-10-09 00:25:29 +01:00
|
|
|
|
cmake --preset $(PRESET_CONFIGURE) -DSTATIC=$(STATIC) -DTESTNET=$(TESTNET) -DBUILD_VERSION=$(BUILD_VERSION)
|
2025-10-05 14:00:36 +01:00
|
|
|
|
|
2025-10-07 02:20:06 +01:00
|
|
|
|
docs: configure
|
|
|
|
|
|
@echo "Building Documentation"
|
|
|
|
|
|
cmake --build build/release --target=docs --config=Release --parallel=$(CPU_CORES)
|
|
|
|
|
|
|
2025-10-11 16:18:37 +01:00
|
|
|
|
sdk:
|
|
|
|
|
|
$(MAKE) -C utils/sdk $(filter-out $@,$(MAKECMDGOALS)) PACKAGE_VERSION=$(BUILD_VERSION)
|
|
|
|
|
|
|
2025-09-24 21:01:35 +01:00
|
|
|
|
# Rule for each profile
|
|
|
|
|
|
$(PROFILES): conan-profile-detect
|
|
|
|
|
|
@echo "Building profile: $@"
|
2025-10-06 22:38:29 +01:00
|
|
|
|
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) install . -pr:h=cmake/profiles/$@ --build=missing -s build_type=$(BUILD_TYPE)
|
2025-10-05 14:00:36 +01:00
|
|
|
|
cmake -S . -B $(BUILD_FOLDER) -DCMAKE_TOOLCHAIN_FILE=$(BUILD_FOLDER)/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DSTATIC=$(STATIC) -DTESTNET=$(TESTNET) -DBUILD_VERSION=$(BUILD_VERSION)
|
|
|
|
|
|
cmake --build $(BUILD_FOLDER) --config=$(BUILD_TYPE) --parallel=$(CPU_CORES)
|
|
|
|
|
|
(cd $(BUILD_FOLDER) && cpack)
|
2025-09-24 21:01:35 +01:00
|
|
|
|
|
|
|
|
|
|
help:
|
2025-10-11 16:18:37 +01:00
|
|
|
|
@echo "Lethean VPN Blockchain"
|
|
|
|
|
|
@echo "======================"
|
|
|
|
|
|
@echo "Website: https://lt.hn"
|
|
|
|
|
|
@echo "GitHub: https://github.com/letheanVPN/blockchain/"
|
|
|
|
|
|
@echo "Discord: https://discord.lt.hn"
|
|
|
|
|
|
@echo ""
|
2025-09-24 21:01:35 +01:00
|
|
|
|
@echo "Available targets:"
|
2025-09-30 16:48:13 +01:00
|
|
|
|
@printf " %-42s %s\n" "make clean" "Clean all build directories"
|
2025-10-06 22:38:29 +01:00
|
|
|
|
@printf " %-42s %s\n" "make get-conan" "Download and install conan locally"
|
2025-09-30 16:48:13 +01:00
|
|
|
|
@printf " %-42s %s\n" "make release" "Build release"
|
|
|
|
|
|
@printf " %-42s %s\n" "make static" "Build static release"
|
|
|
|
|
|
@printf " %-42s %s\n" "make debug" "Build debug"
|
|
|
|
|
|
@printf " %-42s %s\n" "make test" "Build & run tests"
|
|
|
|
|
|
@printf " %-42s %s\n" "make docs" "Builds offline documentation website"
|
|
|
|
|
|
@printf " %-42s %s\n" "make docs-dev" "Runs local doc server, for editing/adding docs"
|
|
|
|
|
|
@printf " %-42s %s\n" "make conan-profile-detect" "Creates host config"
|
|
|
|
|
|
@printf " %-42s %s\n" "make configure" "Runs a cmake configure within conan build flow"
|
2025-10-11 16:18:37 +01:00
|
|
|
|
@printf "\n --- Conan Cross-Compilation Profiles ---\n"
|
2025-09-30 16:48:13 +01:00
|
|
|
|
@$(foreach profile,$(SORTED_PROFILES),printf " %-42s %s\n" "make $(profile)" "Build the $(profile) profile";)
|
2025-10-11 16:18:37 +01:00
|
|
|
|
@printf "\n --- SDK Generation ---\n"
|
|
|
|
|
|
@printf " %-42s %s\n" "make sdk" "Build all SDK packages"
|
|
|
|
|
|
@$(foreach sdk,$(SORTED_SDK_TARGETS),printf " %-42s %s\n" "make sdk $(sdk)" "Build the $(sdk) SDK package";)
|
|
|
|
|
|
@printf "\n"
|
2025-09-30 16:48:13 +01:00
|
|
|
|
@printf " %-42s %s\n" "make help" "Show this help message"
|
2019-03-05 02:34:44 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test: test-release
|
|
|
|
|
|
test-release:
|
2025-09-24 21:01:35 +01:00
|
|
|
|
@echo "Building profile: test-release"
|
2025-10-06 22:38:29 +01:00
|
|
|
|
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) install . --output-folder=build/test-release --build=missing -s build_type=$(BUILD_TYPE)
|
2025-09-24 21:01:35 +01:00
|
|
|
|
cmake -S . -B build/test-release -DCMAKE_TOOLCHAIN_FILE=build/test-release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -D BUILD_TESTS=ON
|
2025-09-25 00:25:52 +01:00
|
|
|
|
cmake --build build/test-release --config=Release --parallel=$(CPU_CORES)
|
2025-09-24 21:01:35 +01:00
|
|
|
|
$(MAKE) test
|
2019-03-05 02:34:44 +00:00
|
|
|
|
|
2019-02-20 02:32:59 +00:00
|
|
|
|
test-debug:
|
2025-09-24 21:01:35 +01:00
|
|
|
|
@echo "Building profile: test-debug"
|
2025-10-06 22:38:29 +01:00
|
|
|
|
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) install . --output-folder=build/test-debug --build=missing -s build_type=$(BUILD_TYPE)
|
2025-09-24 21:01:35 +01:00
|
|
|
|
cmake -S . -B build/test-debug -DCMAKE_TOOLCHAIN_FILE=build/test-debug/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -D BUILD_TESTS=ON
|
2025-09-25 00:25:52 +01:00
|
|
|
|
cmake --build build/test-debug --config=Debug --parallel=$(CPU_CORES)
|
2025-09-24 21:01:35 +01:00
|
|
|
|
$(MAKE) test
|
2018-12-27 18:50:45 +03:00
|
|
|
|
|
2025-10-09 03:10:46 +01:00
|
|
|
|
# allowing this target to error quietly saves cross brwoser file detection
|
|
|
|
|
|
conan-get:
|
2025-10-10 12:55:05 +01:00
|
|
|
|
cmake -P cmake/ConanGet.cmake
|
2025-10-09 03:10:46 +01:00
|
|
|
|
(CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) remote add conan_build $(CONAN_URL) && \
|
|
|
|
|
|
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) remote login conan_build $(CONAN_USER) -p $(CONAN_PASSWORD)) || true
|
|
|
|
|
|
|
|
|
|
|
|
conan-upload:
|
|
|
|
|
|
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) upload "*" -r=conan_build --confirm
|
|
|
|
|
|
|
|
|
|
|
|
conan-profile-detect: conan-get
|
|
|
|
|
|
cmake -P cmake/ConanProfileSetup.cmake
|
|
|
|
|
|
|
2025-09-25 16:04:33 +01:00
|
|
|
|
docs-dev: configure
|
|
|
|
|
|
@echo "Building Documentation"
|
|
|
|
|
|
cmake --build build/release --target=serve_docs --config=Release
|
|
|
|
|
|
|
2025-10-11 16:18:37 +01:00
|
|
|
|
$(SDK_TARGETS):
|
|
|
|
|
|
@# This is a proxy target. Handled by the 'sdk' rule.
|
|
|
|
|
|
|
2018-12-27 18:50:45 +03:00
|
|
|
|
clean:
|
2025-10-06 22:38:29 +01:00
|
|
|
|
@cmake -P cmake/CleanBuild.cmake
|
|
|
|
|
|
|
2025-10-10 12:19:20 +01:00
|
|
|
|
clean-build: clean
|
2018-12-27 18:50:45 +03:00
|
|
|
|
rm -rf build
|
|
|
|
|
|
|
|
|
|
|
|
tags:
|
|
|
|
|
|
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ src contrib tests/gtest
|
|
|
|
|
|
|
2025-10-11 16:18:37 +01:00
|
|
|
|
.PHONY: all release upload-conan-cache docs docs-dev configure static static-release test test-release test-debug clean tags conan-profile-detect get-conan $(PROFILES) sdk $(SDK_TARGETS)
|