-
Notifications
You must be signed in to change notification settings - Fork 133
WIP CMake Improvements #598
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
danielinux
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR Jim.
I did not test but I've spotted a bit too much pollution of the / directory. Please move .sh and .bat files under tools/scripts/. There are also some cmake-specific json files that could go under cmake/
The documentation for cmake builds (including existing one) should probably be moved in a new file under docs/ and referred to from /README.md
Let's not put platform-specific (stm32?) information in the main README.md either. This will confuse users on all other targets. Anything target-specific should be in docs/Targets.md.
Some files have meaningless or confusing names (my_test, wolfbuild)
Some instructions point to your private repository
README.md
Outdated
| arm-none-eabi-gcc --version # should print the version | ||
| ``` | ||
|
|
||
| The device manufacturer toolchain _also_ needs to be installed. For example without the [STM32CubeIDE Software](https://www.st.com/en/development-tools/stm32cubeide.html), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This documentation seems STM32 specific. Should it be in docs/Target.md or a separate docs/Cmake.md perhaps?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See docs/STM32.md
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The instructions in STM32.md are very confusing. It seems to pull in randomly different build tools. It states that STM32 targets require CUBEMX which is not true (STM32L4 is the exception). Please move to more relevant files. You can add the STM32L4 specific comments to Target.md under its section. You can add a VisualStudio.md in docs if you want to describe other build mechanisms.
CMakePresets.json
Outdated
| } | ||
| }, | ||
| { | ||
| "name": "mac-stm32l4", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Preset was very nice and worked... it built. But There will be 100's of targets, so idealy the pre-set for each OS and have way for someone to customize that for their board.
Also warnings:
[cmake] CMake Warning:
[cmake] Manually-specified variables were not used by the project:
[cmake]
[cmake] BOARD
[cmake] CORTEX_M0
[cmake] DEBUG
[cmake] DUALBANK_SWAP
[cmake] STM32L4_PART
[cmake] V
[cmake] VTOR
[cmake] WOLFTPM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @dgarske - yay! That's just what I was looking for, as I don't have a Mac.
As you noted, there are hundreds of targets; I'm working on removing the OS target from the preselects.
For customizations, there are a variety of locations:
- Primarily in
CMakeSettings.json(and in there, common settings can be inherited from templates, for example:
{
"name": "stm32l4",
"displayName": "STM32L4",
"inherits": [
"base",
"stm32"
],
- Optionally in
CMakeUserPresets.json(see CMakeUserPresets.json.sample)
Much work remains, including cleanup... but the end product will be quite nice.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've trimmed the unused preset cacheVariables
|
Hi @danielinux Thanks for your feedback! I realize that I came in for a remodel and left a bunch of trash laying around. I've cleaned this up in my latest 32e46e6 commit. Thing are still WIP on my dev branch, but things here in this PR should be a bit cleaner now. @dgarske - I've not yet addressed the unused cmake vars. Changes of interest since my prior commit include non-os-specific presets. more testing, more docs (including cmake .config), script improvements, VS Code workspace moved to root directory, improved dynamic cmake downloads, main cmake functionality moved to include files in the There's more work to be done, particularly around supporting all of the targets. I'd like to get this initial update stable and merged before moving on to additional features and target devices. Suggestions welcome. EDIT: Launching VS Code from a non-VS2022 dev prompt (compiler NOT in the path by default) is not working, failing here: I'm revisiting compiler detection. I had this working, must have broke it. The features still work if everything is in the path (e.g. launch from Visual Studio command prompt), but it should support a fully specified toolchain & include path with no assumptions, nothing in path. |
|
Still WIP, but I've applied cc4d2da that contains most of my current progress on cmake-specific updates from my dev branch. A variety of other changes are also in the works, but those changes are in separate pull requests. |
|
I've pushed my latest changes to pr-cmake-improvements branch for this PR. See my current workflow results. There's only new Required. See CMake docs:
Notable update: NO new VSCode files added to Open the cd ~/workspace/wolfBoot-$USER
code ./IDE/VSCode/wolfBoot.code-workspaceSee blog: CMake Presets integration in Visual Studio and Visual Studio Code I plan to move ALL Visual Studio files to Various other CMake improvements, a good spot for testing at 5266e0a . |
63be6c9 to
0a6698d
Compare
9411c1c to
5b05afa
Compare
5b05afa to
eaf029f
Compare
|
Although there are more changes that could be here, this is a good stopping point for this initial CMake update. I've left the structure basically as-is for now. I plan to move blocks of functionality into separate include files in a future PR. VS Code Quick start from instructions: VS Code Quick start to test this PR: |
|
Still reviewing changes. Please re-organize documentation flow. CMake section still growing, so it deserves its own file in docs/ Very important: remove docs/STM32.md and move the relevant info to Target.md (specific to STM32L4, requiring cubeMx, all other STM32 don't have that dependency and these instructions are very confusing because of this). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is still adding a file docs/STM32.md with wrong "generic" instructions for STM32 targets, which in fact only apply to STM32L4, plus randomly introducing IDE-specific instructions. Remove that file as per previous comments.
Also, please add CMake build tests in the workflow for other targets as well. The main issue to resolve in this PR is CMake coverage across targets.
|
@danielinux I've added additional STM32 targets and updated workflows to test them all in 1ad66e9 I've also updated the docs and removed the I currently have a sim default preset with spaces in the name so that it shows up like this in the IDE list this:
However, I've had some problems using that from command-line, so those sim tests are disabled for now. See 4474cf8 I started down the road or other ARM targets, but the first one I tried doesn't have a GitHub workflow toolchain, so the |

New Features
load_dot_config(path)CMake reading .config files
This PR adds support for configuring the CMake build directly from a Kconfig-style
.configfile. When a.configis present at the repository root and USE_DOT_CONFIG=ON is set, CMake reads build options from that file instead of requiring them to be passed manually on the command line.Example usage:
For convenience,
tools/scripts/cmake_dot_config.shdemonstrates one way to copyconfig/examples/<target>.configto.configand then run the CMake configure step using this mechanism, but it is just an example wrapper around the CMake interface shown above.Test Drive
Work remains on CMake files, but the initial VS Code build should be working:
Select
STM32L4wait for Cmake to finish, then clickbuild. Theoutputpane might be not visible. Grab frame to expand up:I'm not sure yet which extensions are required, but at least the Microsoft
ms-vscode.cmake-tools.Here's a list of what I have installed:
Development
I use Visual Studio for CMake development but the objective is for an IDE-agnostic CMake build experience.
I use VisualGDB for embedded development; this will be a good exercise for flexible HAL file positioning and config.
I'm using an STM32L4, specifically the B-L475E-IOT01A Discovery kit IoT node that I happened to have on hand related to #585.
Some of the changes are specifically hard-code to the above. My objective is to make everything a configuration setting.
VS Code Presets
Was previously OS-specific, and needed to be launched from VS2022 command prompt. The
stm32l4tested (see above).Visual Studio 2022
There's currently no VS2022 project file. Simply open the directory.
Select a device from the ribbon bar, shown here for the
stm32l4From
Solution Explorer, right-clickCmakeLists.txtand then selectConfigure wolfBoot.To build, follow the same steps to right click, and select
Build.View the CMake and Build messages in the
OutputWindow. Noter the dropdown to select view:CMake Dev Status:
Make Dev Status:
./tools/scripts/wolfboot_build.sh --target stm32l4