Skip to content
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

Migrate to CMake #88

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open

Migrate to CMake #88

wants to merge 6 commits into from

Conversation

Xaymar
Copy link

@Xaymar Xaymar commented Aug 1, 2024

I've migrated the teensy_loader_cli project over to the CMake Makefile Generator, in hopes of making it easier to compile across all platforms. CMake is a widely supported and popular "Build System", and significantly simplifies many tasks that would otherwise require more time to do. This change also splits the main file into multiple smaller ones, so that we rely less on the precompiler, speeding up compiles a tiny bit.

While I was at it, I've also taken the liberty of automatic versioning, including a clang-format file (and integration), as well as an EditorConfig file. All of these are technically optional, and not required for operation, but it felt weird to not include them after years of automating these things.

This Pull Request additionally includes automatic building of the teensy_loader_cli binary using Github Actions for various platforms. I have not implemented the automated builds for BSD platforms, but the major three platforms are present and can be adapted (see ToDo comment in main.yml).

Still need to make these submodules fully optional, but they'll be fine for now.
Why migrate? CMake supports and generates "make files" for many supported compilers at this point, supports many platforms out of the box, and can easily be extended with additional features. In some cases, you can even have CMake download and install the necessary compilers for the project.

I've also split the teensy_loader_cli.c file into multiple parts, which aids in platform separation. While using #ifdef/#endif is fine mostly, there are better options available that do not require regenerating intermediate source code files. For now I've opted against removing all the #ifdef/#endif pairs, as some of them are still useful.
Using a CI enables us to quickly check if we messed up somewhere, though in this case it'll be limited to code mistakes only. We can also use CI to automatically push releases to Github, removing a step that would take away our precious screen staring time.

Ideally we also want it to update a comment in a Pull Request, so that binaries are available directly in the Pull Request, always pointing at the latest changes. But that's a bit difficult
@Xaymar Xaymar marked this pull request as ready for review August 5, 2024 17:40
@Xaymar
Copy link
Author

Xaymar commented Aug 5, 2024

I've done what I can to make everything work. The README should be easy enough to follow now, and building seems to work flawlessly on the tested platforms (Windows, Ubuntu 20/22/24.04, MacOS 11). I've even got the automatic releases thing working, with it automatically creating a nightly release for any untagged builds.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant