diff --git a/.github/workflows/_on-pr.yml b/.github/workflows/_on-pr.yml index a89bc19e..b8171dbf 100644 --- a/.github/workflows/_on-pr.yml +++ b/.github/workflows/_on-pr.yml @@ -10,6 +10,7 @@ on: - opened - synchronize - reopened + - ready_for_review concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} diff --git a/.gitignore b/.gitignore index bebb989d..bf1e94c9 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,7 @@ Thumbs.db .idea/dictionaries .idea/shelf .idea/copilot* +.idea/modules.xml +.idea/*.iml .vs/* CMakeUserPresets.json diff --git a/.idea/misc.xml b/.idea/misc.xml index 325891b7..96443667 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,12 @@ + + + + + @@ -9,6 +16,7 @@ - - - \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index fd12b1f4..a2268001 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -246,7 +246,6 @@ message(STATUS "Using Boost ${Boost_VERSION} from Conan") find_package(miniupnpc REQUIRED) find_package(ZLIB REQUIRED) -find_package(ethash REQUIRED) find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) include_directories(src "${CMAKE_BINARY_DIR}/version") diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000..3f2c576b --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,97 @@ +{ + "version": 8, + "cmakeMinimumRequired": { + "major": 3, + "minor": 23, + "patch": 0 + }, + "include": [ + "ConanPresets.json" + + ], + "configurePresets": [ + { + "name": "default", + "displayName": "Default Config", + "description": "Default build using Ninja generator", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/default", + "cacheVariables": { + "TESTNET": "ON" + } + }, + { + "name": "windows-defaultss", + "displayName": "Windows x64 Debug", + "description": "Sets Ninja generator, compilers, x64 architecture, build and install directory, debug build type", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/${presetName}", + "architecture": { + "value": "x64", + "strategy": "external" + }, + "cacheVariables": { + "TESTNET": "ON", + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install/${presetName}" + }, + "vendor": { + "microsoft.com/VisualStudioSettings/CMake/1.0": { + "hostOS": [ "Windows" ] + } + }, + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Windows" + } + } + ], + "buildPresets": [ + { + "name": "default", + "configurePreset": "default" + } + ], + "testPresets": [ + { + "name": "default", + "configurePreset": "default", + "output": {"outputOnFailure": true}, + "execution": {"noTestsAction": "error", "stopOnFailure": true} + } + ], + "packagePresets": [ + { + "name": "default", + "configurePreset": "default", + "generators": [ + "TGZ", + "ZIP" + ] + } + ], + "workflowPresets": [ + { + "name": "default", + "steps": [ + { + "type": "configure", + "name": "default" + }, + { + "type": "build", + "name": "default" + }, + { + "type": "test", + "name": "default" + }, + { + "type": "package", + "name": "default" + } + ] + } + ] +} \ No newline at end of file diff --git a/ConanPresets.json b/ConanPresets.json new file mode 100644 index 00000000..7951a8dd --- /dev/null +++ b/ConanPresets.json @@ -0,0 +1,8 @@ +{ + "version": 4, + "vendor": { + "conan": {} + }, + "include": [ + ] +} \ No newline at end of file diff --git a/Makefile b/Makefile index 1a33df70..6b8ab917 100644 --- a/Makefile +++ b/Makefile @@ -16,10 +16,9 @@ STATIC:= 0 BUILD_TYPE ?=Release BUILD_VERSION:=6.0.1 BUILD_FOLDER:=build/release +PRESET_BUILD:=conan-release +PRESET_CONFIGURE:=conan-release -# ----------------------------------------------------------------- -# Unix‑like systems (Linux, macOS, *BSD, etc.) -# ----------------------------------------------------------------- UNAME_S := $(shell uname -s 2>/dev/null || echo Unknown) ifeq ($(UNAME_S),Linux) @@ -38,10 +37,10 @@ ifeq ($(filter %BSD,$(UNAME_S)),%BSD) 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) + +PRESET_CONFIGURE:=conan-default + # Prefer the environment variable that Windows sets for us. # It works in both cmd.exe and PowerShell. CPU_CORES := $(NUMBER_OF_PROCESSORS) @@ -77,14 +76,7 @@ release: docs build @rm -rf $(CURDIR)/build/packages/_CPack_Packages build: configure - cmake --build $(BUILD_FOLDER) --config=$(BUILD_TYPE) --parallel=$(CPU_CORES) - -debug: conan-profile-detect - @echo "Building profile: debug" - CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) install . --build=missing -s build_type=Debug - cmake -S . -B $(CURDIR)/build/debug -DCMAKE_TOOLCHAIN_FILE=$(CURDIR)/build/debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -DTESTNET=$(TESTNET) - cmake --build $(CURDIR)/build/debug --config=Debug --parallel=$(CPU_CORES) - + cmake --build --preset $(PRESET_BUILD) --parallel=$(CPU_CORES) build-deps: conan-profile-detect @echo "Build Dependencies: $(BUILD_TYPE) testnet=$(TESTNET)" @@ -92,7 +84,7 @@ build-deps: conan-profile-detect 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) + cmake --preset $(PRESET_CONFIGURE) -DSTATIC=$(STATIC) -DTESTNET=$(TESTNET) -DBUILD_VERSION=$(BUILD_VERSION) docs: configure @echo "Building Documentation" @@ -165,4 +157,4 @@ clean-build: tags: ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ src contrib tests/gtest -.PHONY: all release upload-conan-cache docker-chain-node debug docs docs-dev configure static static-release test test-release test-debug clean tags conan-profile-detect get-conan $(PROFILES) +.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) diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake index c120a637..047fd324 100644 --- a/cmake/CPackConfig.cmake +++ b/cmake/CPackConfig.cmake @@ -1,6 +1,6 @@ -if(CMAKE_BUILD_TYPE STREQUAL "Release") +if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "") set(CPACK_PACKAGE_NAME "${package_name}") set(CPACK_PACKAGE_VENDOR "${package_vendor}") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${package_description}") @@ -26,8 +26,8 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release") # message(STATUS "Registered CPACK_GENERATOR: productbuild") endif () elseif(WIN32) - # set(CPACK_GENERATOR "WIX") - # message(STATUS "Registered CPACK_GENERATOR: WIX") +# set(CPACK_GENERATOR "WIX") +# message(STATUS "Registered CPACK_GENERATOR: WIX") # set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/resources/windows_icon.ico") # set(CPACK_WIX_LICENSE_RTF "${CMAKE_SOURCE_DIR}/LICENSE.rtf") # set(CPACK_WIX_UPGRADE_GUID "D3F5A9C1-4B2E-4F5A-9C71-123456789ABC") # change once per major version diff --git a/conanfile.py b/conanfile.py index a8f6fbdc..ab1a89cb 100644 --- a/conanfile.py +++ b/conanfile.py @@ -11,11 +11,13 @@ class BlockchainConan(ConanFile): options = { "static": [True, False], - "testnet": [True, False] + "testnet": [True, False], + "ci": [True, False] } default_options = { "static": False, "testnet": False, + "ci": False, "boost/*:without_test": True } @@ -29,7 +31,13 @@ class BlockchainConan(ConanFile): def generate(self): tc = CMakeToolchain(self) - tc.user_presets_path = False + + os_val = str(self.settings.os).lower() + # arch_val = str(self.settings.arch).lower() + # compiler_val = str(self.settings.compiler).lower() + # tc.presets_prefix = f"{os_val}" + + tc.user_presets_path = "ConanPresets.json" tc.variables["STATIC"] = self.options.static tc.variables["TESTNET"] = self.options.testnet # tc.preprocessor_definitions["TESTNET"] = None @@ -40,8 +48,15 @@ class BlockchainConan(ConanFile): deps.generate() def layout(self): - self.folders.generators = os.path.join("build", str(self.settings.build_type).lower(), "generators") - self.folders.build = os.path.join("build", str(self.settings.build_type).lower()) + if self.settings.compiler == "msvc": + # For multi-config, all configurations go into the same "build" folder. + self.folders.build = "build/release" + self.folders.generators = "build/release/generators" + else: + # For single-config, we create a subfolder for each build type. + build_type_str = str(self.settings.build_type).lower() + self.folders.build = os.path.join("build", build_type_str) + self.folders.generators = os.path.join(self.folders.build, "generators") def build(self): cmake = CMake(self)