forked from lthn/blockchain
Added a new hardcoded seed node (34.13.212.174) for both mainnet and testnet in net_node.inl. Updated Makefile to separate dependency installation into a new 'build-deps' target and improved configure messaging. CMakeLists.txt now prints the CMake version being used. Also commented out a connection close call after handshake for further review.
178 lines
7.4 KiB
Makefile
178 lines
7.4 KiB
Makefile
# Copyright (c) 2017-2025 Lethean https://lt.hn
|
||
# 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.
|
||
|
||
# ------------------------------------------------------------
|
||
# 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
|
||
TESTNET:= 0
|
||
STATIC:= 0
|
||
BUILD_TYPE ?=Release
|
||
BUILD_VERSION:=6.0.1
|
||
BUILD_FOLDER:=build/release
|
||
|
||
# -----------------------------------------------------------------
|
||
# Unix‑like systems (Linux, macOS, *BSD, etc.)
|
||
# -----------------------------------------------------------------
|
||
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
|
||
|
||
# -----------------------------------------------------------------
|
||
# Windows (detected by the built‑in $(OS) variable set by GNU make)
|
||
# -----------------------------------------------------------------
|
||
ifeq ($(OS),Windows_NT)
|
||
# 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
|
||
|
||
#testnet-genesis-new:
|
||
# $(eval command += $(cmake_release) $(testnet))
|
||
# $(call CMAKE,$(dir_release),$(command) -DGENERATE_PREMINE_WALLET=1 -DPREMINE_WALLET_PASSWORD=12345678) && cmake --build ./src --target premine_wallet || true
|
||
# $(eval command += $(cmake_release) $(testnet))
|
||
# $(call CMAKE,$(dir_release),$(command) -DGENERATE_FRESH_GENESIS=1) && cmake --build ./src --target genesis_generator
|
||
# $(eval command += $(cmake_release) $(testnet))
|
||
# $(call CMAKE,$(dir_release),$(command)) && $(MAKE)
|
||
#
|
||
#genesis-new:
|
||
# $(eval command += $(cmake_release))
|
||
# $(call CMAKE,$(dir_release),$(command) -DGENERATE_FRESH_GENESIS=1) && cmake --build ./src --target genesis_generator
|
||
# $(eval command += $(cmake_release))
|
||
# $(call CMAKE,$(dir_release),$(command)) && $(MAKE)
|
||
|
||
# -----------------------------------------------------------------
|
||
# 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)
|
||
#CONAN_CPU_COUNT=$(CPU_CORES)
|
||
|
||
|
||
PROFILES := $(patsubst cmake/profiles/%,%,$(wildcard cmake/profiles/*))
|
||
SORTED_PROFILES := $(sort $(PROFILES))
|
||
CONAN_CACHE := $(CURDIR)/build/sdk
|
||
DEFAULT_CONAN_PROFILE := $(CONAN_CACHE)/profiles/default
|
||
CC_DOCKER_FILE?=utils/docker/images/lthn-chain/Dockerfile
|
||
# Detect if we are on Windows
|
||
ifeq ($(OS), Windows_NT)
|
||
# If so, define a prefix to clear the problematic env vars
|
||
FIX_ENV := CFLAGS="" CXXFLAGS=""
|
||
else
|
||
# Otherwise, the prefix is empty
|
||
FIX_ENV :=
|
||
endif
|
||
all: help
|
||
|
||
release: docs build
|
||
(cd $(BUILD_FOLDER) && cpack)
|
||
|
||
build: configure
|
||
cmake --build $(BUILD_FOLDER) --config=$(BUILD_TYPE) --parallel=$(CPU_CORES)
|
||
|
||
debug: conan-profile-detect
|
||
@echo "Building profile: debug"
|
||
$(FIX_ENV) CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/debug --build=missing -s build_type=Debug
|
||
cmake -S . -B build/debug -DCMAKE_TOOLCHAIN_FILE=build/debug/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -DTESTNET=$(TESTNET)
|
||
cmake --build build/debug --config=Debug --parallel=$(CPU_CORES)
|
||
|
||
|
||
build-deps: conan-profile-detect
|
||
@echo "Build Dependencies: $(BUILD_TYPE) testnet=$(TESTNET)"
|
||
$(FIX_ENV) CONAN_HOME=$(CONAN_CACHE) conan install . --build=missing -s build_type=$(BUILD_TYPE)
|
||
|
||
configure: build-deps
|
||
@echo "Running Configure: $(BUILD_TYPE) testnet=$(TESTNET)"
|
||
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)
|
||
|
||
|
||
conan-profile-detect:
|
||
@if [ ! -f "$(DEFAULT_CONAN_PROFILE)" ]; then \
|
||
echo "Default conan profile not found. Detecting a new one..."; \
|
||
CONAN_HOME=$(CONAN_CACHE) conan profile detect --name=default --force; \
|
||
fi
|
||
|
||
|
||
# Rule for each profile
|
||
$(PROFILES): conan-profile-detect
|
||
@echo "Building profile: $@"
|
||
CFLAGS="" CXXFLAGS="" CONAN_HOME=$(CONAN_CACHE) conan install . -pr:h=cmake/profiles/$@ --build=missing -s build_type=$(BUILD_TYPE)
|
||
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)
|
||
|
||
help:
|
||
@echo "Available targets:"
|
||
@printf " %-42s %s\n" "make clean" "Clean all build directories"
|
||
@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"
|
||
@$(foreach profile,$(SORTED_PROFILES),printf " %-42s %s\n" "make $(profile)" "Build the $(profile) profile";)
|
||
@printf " %-42s %s\n" "make help" "Show this help message"
|
||
|
||
#
|
||
# Tests
|
||
#
|
||
|
||
test: test-release
|
||
test-release:
|
||
@echo "Building profile: test-release"
|
||
CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/test-release --build=missing -s build_type=$(BUILD_TYPE)
|
||
cmake -S . -B build/test-release -DCMAKE_TOOLCHAIN_FILE=build/test-release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -D BUILD_TESTS=ON
|
||
cmake --build build/test-release --config=Release --parallel=$(CPU_CORES)
|
||
$(MAKE) test
|
||
|
||
test-debug:
|
||
@echo "Building profile: test-debug"
|
||
CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/test-debug --build=missing -s build_type=$(BUILD_TYPE)
|
||
cmake -S . -B build/test-debug -DCMAKE_TOOLCHAIN_FILE=build/test-debug/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -D BUILD_TESTS=ON
|
||
cmake --build build/test-debug --config=Debug --parallel=$(CPU_CORES)
|
||
$(MAKE) test
|
||
|
||
|
||
docs: configure
|
||
@echo "Building Documentation"
|
||
cmake --build build/release --target=docs --config=Release --parallel=$(CPU_CORES)
|
||
|
||
docs-dev: configure
|
||
@echo "Building Documentation"
|
||
cmake --build build/release --target=serve_docs --config=Release
|
||
|
||
|
||
clean:
|
||
rm -rf build
|
||
|
||
tags:
|
||
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ src contrib tests/gtest
|
||
|
||
.PHONY: all release docker-chain-node debug docs docs-dev configure static static-release test test-release test-debug clean tags conan-profile-detect $(PROFILES)
|