From 2cdf56f8d6dff137b1f7ca7d1293bf04c1e5f8d3 Mon Sep 17 00:00:00 2001 From: BlackMark Date: Mon, 27 Jul 2026 19:19:20 +0200 Subject: [PATCH] ide: the whole project in Solution Explorer, and a path Studio can resolve Three things the solution got wrong, all found by opening it in the GUI rather than building it headlessly. The project listed only main.cpp, so none of the headers could be opened from Solution Explorer. Every source and header is listed now, with mirroring the on-disk src/ layout, which is what master's project did. Neither configuration compiled in the GUI: libavr was found through $(LIBAVR_ROOT), and a variable exported in a shell is not visible to Studio launched from the Start menu. Release only looked healthy because its objects were already up to date from a headless build. The path is now anchored to the project directory, which also side-steps a second trap: a plain relative include is resolved against the generated makefile's own directory, the configuration's output directory, not the project's. Pinning libavr as a submodule would remove the assumption that the two sit side by side, and is on libavr's task list. Both configurations verified with LIBAVR_ROOT deliberately unset, Release still byte-identical to the CMake build and the flag gate still green. Debug's own translation unit carries DWARF-4 as intended. Studio's per-user state under ide/.vs/ and the build logs are ignored. Co-Authored-By: Claude Opus 5 --- .gitignore | 2 ++ README.md | 20 ++++++++++++----- ide/fantemp.cppproj | 52 +++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index bbbc34e..f1ce0e6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ build/ ide/*.componentinfo.xml ide/Debug/ ide/Release/ +ide/.vs/ +ide/*.log diff --git a/README.md b/README.md index fb36b4d..5b6cc76 100644 --- a/README.md +++ b/README.md @@ -23,18 +23,28 @@ cmake --build --preset atmega328p-generated `master` carries a Studio solution, so this branch does too: `ide/fantemp.atsln` builds the same firmware — byte-identical `.text` and `.data` to the CMake -build — from the same sources, with the flags mirrored by hand. Studio finds -libavr through `$(LIBAVR_ROOT)`, the same environment variable the CMake build -uses, and needs a GCC 16.1 toolchain registered as flavour `avr-g++-16.1.0`; +build — from the same sources, with the flags mirrored by hand. + +Studio expects libavr checked out **beside this repo**, and finds it at +`$(MSBuildProjectDirectory)\..\..\libavr\include` — anchored to the project +rather than written relative to the generated makefile, which runs from the +configuration's output directory and would need a different number of `..`. +Unlike the CMake build there is no `LIBAVR_ROOT` to point elsewhere: an +environment variable set in a shell is not visible to Studio launched from the +Start menu, which fails as a missing `libavr/libavr.hpp` rather than as anything +about the variable. Pinning libavr as a submodule is the better answer and is on +libavr's task list. + +It also needs a GCC 16.1 toolchain registered as flavour `avr-g++-16.1.0`; nothing older can compile `-std=c++26`. One generated file is required before the project will load, and one command checks the flags have not drifted (both from libavr's `tools/atmelstudio/`): ```sh -python $LIBAVR_ROOT/tools/atmelstudio/componentinfo.py \ +python ../libavr/tools/atmelstudio/componentinfo.py \ ide/fantemp.componentinfo.xml --device ATmega328P -python $LIBAVR_ROOT/tools/atmelstudio/check-flags.py --solution ide/fantemp.atsln \ +python ../libavr/tools/atmelstudio/check-flags.py --solution ide/fantemp.atsln \ --compile-commands build/atmega328p-generated/compile_commands.json \ --log build/atmelstudio.log ``` diff --git a/ide/fantemp.cppproj b/ide/fantemp.cppproj index 3c44948..2119627 100644 --- a/ide/fantemp.cppproj +++ b/ide/fantemp.cppproj @@ -1,4 +1,4 @@ - + 2.0 @@ -28,6 +28,18 @@ 0 0 + + + + + + + + + + + + @@ -45,7 +57,7 @@ - $(LIBAVR_ROOT)\include + $(MSBuildProjectDirectory)\..\..\libavr\include Optimize for size (-Os) @@ -74,7 +86,7 @@ - $(LIBAVR_ROOT)\include + $(MSBuildProjectDirectory)\..\..\libavr\include Optimize debugging experience (-Og) @@ -88,9 +100,41 @@ + + compile + src\board.hpp + + + compile + src\bootloader.hpp + + + compile + src\controller.hpp + + + compile + src\curve.hpp + compile + src\main.cpp + + + compile + src\statistics.hpp + + + compile + src\terminal.hpp + + + compile + src\thermistor.hpp + + + - + \ No newline at end of file