From 534b9198baa4a5af2dbc42c55ddff814437a07e6 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Wed, 12 Nov 2025 14:43:17 -0300 Subject: [PATCH] 2026 Ready --- .github/workflows/build_all.yml | 2 +- .github/workflows/build_deps.yml | 4 +-- .github/workflows/build_orca.yml | 2 +- AGENTS.md | 2 +- CLAUDE.md | 8 ++--- build_release.bat => build_release_vs2019.bat | 0 ...ase_vs2022.bat => build_release_vs202X.bat | 0 doc/developer-reference/How-to-build.md | 32 ++++++++++-------- .../develop/compile_vs2022_local_debugger.png | Bin 830 -> 0 bytes .../develop/compile_vs202X_local_debugger.png | Bin 0 -> 1032 bytes doc/images/develop/vs2022cmd.png | Bin 6925 -> 0 bytes doc/images/develop/vs202Xcmd.png | Bin 0 -> 8593 bytes 12 files changed, 27 insertions(+), 23 deletions(-) rename build_release.bat => build_release_vs2019.bat (100%) rename build_release_vs2022.bat => build_release_vs202X.bat (100%) delete mode 100644 doc/images/develop/compile_vs2022_local_debugger.png create mode 100644 doc/images/develop/compile_vs202X_local_debugger.png delete mode 100644 doc/images/develop/vs2022cmd.png create mode 100644 doc/images/develop/vs202Xcmd.png diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 1a46740b8f..c45312a493 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -26,7 +26,7 @@ on: - 'version.inc' - ".github/workflows/build_*.yml" - 'build_linux.sh' - - 'build_release_vs2022.bat' + - 'build_release_vs202X.bat' - 'build_release_macos.sh' - 'scripts/flatpak/**' diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index e4a985b77a..1e0e6ddb10 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -69,8 +69,8 @@ jobs: working-directory: ${{ github.workspace }} run: | choco install strawberryperl - .\build_release_vs2022.bat deps - .\build_release_vs2022.bat pack + .\build_release_vs202X.bat deps + .\build_release_vs202X.bat pack cd ${{ github.workspace }}/deps/build - name: Build on Mac ${{ inputs.arch }} diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 9da7295565..4ac060c0ba 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -233,7 +233,7 @@ jobs: env: WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\' WindowsSDKVersion: '10.0.26100.0\' - run: .\build_release_vs2022.bat slicer + run: .\build_release_vs202X.bat slicer - name: Create installer Win if: inputs.os == 'windows-latest' diff --git a/AGENTS.md b/AGENTS.md index 5446ab270e..0aefdbb99c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,7 +8,7 @@ Use out-of-source builds: - `cmake -S . -B build -DCMAKE_BUILD_TYPE=Release` configures dependencies and generates build files. - `cmake --build build --target OrcaSlicer --config Release` compiles the app; add `--parallel` to speed up. - `cmake --build build --target tests` then `ctest --test-dir build --output-on-failure` runs automated suites. -Platform helpers such as `build_linux.sh`, `build_release_macos.sh`, and `build_release_vs2022.bat` wrap the same flow with toolchain flags. Use `build_release_macos.sh -sx` when reproducing macOS build issues, and `scripts/DockerBuild.sh` for reproducible container builds. +Platform helpers such as `build_linux.sh`, `build_release_macos.sh`, and `build_release_vs202X.bat` wrap the same flow with toolchain flags. Use `build_release_macos.sh -sx` when reproducing macOS build issues, and `scripts/DockerBuild.sh` for reproducible container builds. ## Coding Style & Naming Conventions `.clang-format` enforces 4-space indents, a 140-column limit, aligned initializers, and brace wrapping for classes and functions. Run `clang-format -i ` before committing; the CMake `clang-format` target is available when LLVM tools are on your PATH. Prefer `CamelCase` for classes, `snake_case` for functions and locals, and `SCREAMING_CASE` for constants, matching conventions in `src/`. Keep headers self-contained and align include order with the IWYU pragmas. diff --git a/CLAUDE.md b/CLAUDE.md index eb35833082..0b640d9699 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,16 +11,16 @@ OrcaSlicer is an open-source 3D slicer application forked from Bambu Studio, bui ### Building on Windows ```bash # Build everything -build_release_vs2022.bat +build_release_vs202X.bat # Build with debug symbols -build_release_vs2022.bat debug +build_release_vs202X.bat debug # Build only dependencies -build_release_vs2022.bat deps +build_release_vs202X.bat deps # Build only slicer (after deps are built) -build_release_vs2022.bat slicer +build_release_vs202X.bat slicer ``` diff --git a/build_release.bat b/build_release_vs2019.bat similarity index 100% rename from build_release.bat rename to build_release_vs2019.bat diff --git a/build_release_vs2022.bat b/build_release_vs202X.bat similarity index 100% rename from build_release_vs2022.bat rename to build_release_vs202X.bat diff --git a/doc/developer-reference/How-to-build.md b/doc/developer-reference/How-to-build.md index 249da3edff..493ca40e96 100644 --- a/doc/developer-reference/How-to-build.md +++ b/doc/developer-reference/How-to-build.md @@ -28,15 +28,15 @@ Whether you're a contributor or just want a custom build, this guide will help y ## Windows 64-bit -How to building with Visual Studio 2022 on Windows 64-bit. +How to building with Visual Studio on Windows 64-bit. ### Windows Tools Required -- [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) or Visual Studio 2019 +- [Visual Studio 2022](https://visualstudio.microsoft.com/vs/), 2026 or 2019 ```shell winget install --id=Microsoft.VisualStudio.2022.Professional -e ``` -- [CMake](https://cmake.org/) — **⚠️ version 3.31.x is mandatory** +- [CMake](https://cmake.org/) ```shell winget install --id=Kitware.CMake -e ``` @@ -81,14 +81,18 @@ How to building with Visual Studio 2022 on Windows 64-bit. git lfs pull ``` 2. Open the appropriate command prompt: - - Visual Studio 2019: + - Visual Studio 2026: ```MD - x64 Native Tools Command Prompt for VS 2019 + x64 Native Tools Command Prompt for VS ``` - Visual Studio 2022: ```MD x64 Native Tools Command Prompt for VS 2022 ``` + - Visual Studio 2019: + ```MD + x64 Native Tools Command Prompt for VS 2019 + ``` 1. Navigate to correct drive (if needed), e.g.: ```shell N: @@ -98,16 +102,16 @@ How to building with Visual Studio 2022 on Windows 64-bit. cd N:\Repos\OrcaSlicer ``` 3. Run the build script: - - Visual Studio 2019: + - Visual Studio 2026 or 2022: ```shell - build_release.bat + build_release_vs202X.bat ``` - - Visual Studio 2022: + - Visual Studio 2019: ```shell - build_release_vs2022.bat + build_release_vs2019.bat ``` -![vs2022cmd](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/vs2022cmd.png?raw=true) +![vs202Xcmd](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/vs202Xcmd.png?raw=true) > [!NOTE] > The build process will take a long time depending on your system but even with high-end hardware it can take up to 40 minutes. @@ -115,13 +119,13 @@ How to building with Visual Studio 2022 on Windows 64-bit. > [!TIP] > If you encounter issues, you can try to uninstall ZLIB from your Vcpkg library. -3. If successful, you will find the Visual Studio solution file in: +1. If successful, you will find the Visual Studio solution file in: ```shell build\OrcaSlicer.sln ``` -4. Open the solution in Visual Studio, set the build configuration to `Release` and run the `Local Windows Debugger`. - ![compile_vs2022_local_debugger](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/compile_vs2022_local_debugger.png?raw=true) -5. Your resulting executable will be located in: +2. Open the solution in Visual Studio, set the build configuration to `Release` and run the `Local Windows Debugger`. + ![compile_vs202X_local_debugger](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/compile_vs202X_local_debugger.png?raw=true) +3. Your resulting executable will be located in: ```shell \build\src\Release\orca-slicer.exe ``` diff --git a/doc/images/develop/compile_vs2022_local_debugger.png b/doc/images/develop/compile_vs2022_local_debugger.png deleted file mode 100644 index ea5aaee19e2d6026dbe3ddea703416351d297ad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 830 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 npP>IUSLOTqcy;1mC=zWAef3Wdp`rf))GJP% diff --git a/doc/images/develop/vs202Xcmd.png b/doc/images/develop/vs202Xcmd.png new file mode 100644 index 0000000000000000000000000000000000000000..7557c5ddf3431509783d56cfc85b3dcf15610283 GIT binary patch literal 8593 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 aa|uwsrE|i