{"id":20726648,"url":"https://github.com/embeddedartistry/project-skeleton","last_synced_at":"2025-10-08T06:42:20.752Z","repository":{"id":56867389,"uuid":"254681963","full_name":"embeddedartistry/project-skeleton","owner":"embeddedartistry","description":"A C \u0026 C++ project skeleton for new Embedded Artistry projects","archived":false,"fork":false,"pushed_at":"2023-12-07T21:45:09.000Z","size":117,"stargazers_count":23,"open_issues_count":6,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-11T09:20:15.775Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Meson","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/embeddedartistry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"docs/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-10T16:24:45.000Z","updated_at":"2025-03-06T18:45:27.000Z","dependencies_parsed_at":"2023-12-07T22:39:13.809Z","dependency_job_id":null,"html_url":"https://github.com/embeddedartistry/project-skeleton","commit_stats":null,"previous_names":[],"tags_count":13,"template":true,"template_full_name":null,"purl":"pkg:github/embeddedartistry/project-skeleton","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embeddedartistry%2Fproject-skeleton","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embeddedartistry%2Fproject-skeleton/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embeddedartistry%2Fproject-skeleton/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embeddedartistry%2Fproject-skeleton/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/embeddedartistry","download_url":"https://codeload.github.com/embeddedartistry/project-skeleton/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embeddedartistry%2Fproject-skeleton/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278903017,"owners_count":26065786,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T04:26:28.526Z","updated_at":"2025-10-08T06:42:20.726Z","avatar_url":"https://github.com/embeddedartistry.png","language":"Meson","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project Title\n\nProvide an introductory paragraph, describing:\n\n* What your project does\n* Why people should consider using your project\n* Link to project home page\n\n## Table of Contents\n\n1. [About the Project](#about-the-project)\n2. [Project Status](#project-status)\n3. [Getting Started](#getting-started)\n    1. [Requirements](#requirements)\n        1. [git-lfs](#git-lfs)\n        1. [Meson Build System](#meson-build-system)\n    2. [Getting the Source](#getting-the-source)\n    3. [Building](#building)\n        1. [Enabling Link-time Optimization](#enabling-link-time-optimization)\n    4. [Installation](#installation)\n    5. [Usage](#usage)\n4. [Configuration Options](#configuration-options)\n5. [Documentation](#documentation)\n6. [Need Help?](#need-help)\n7. [Contributing](#contributing)\n8. [Further Reading](#further-reading)\n9. [Authors](#authors)\n10. [License](#license)\n11. [Acknowledgments](#acknowledgements)\n\n# About the Project\n\nHere you can provide more details about the project\n* What features does your project provide?\n* Short motivation for the project? (Don't be too long winded)\n* Links to the project site\n\n```\nShow some example code to describe what your project does\nShow some of your APIs\n```\n\n**[Back to top](#table-of-contents)**\n\n# Project Status\n\nDescribe the current release and any notes about the current state of the project. Examples: currently compiles on your host machine, but is not cross-compiling for ARM, APIs are not set, feature not implemented, etc.\n\n**[Back to top](#table-of-contents)**\n\n## Getting Started\n\n### Requirements\n\nThis project uses [Embedded Artistry's standard Meson build system](https://embeddedartistry.com/fieldatlas/embedded-artistrys-standardized-meson-build-system/), and dependencies are described in detail [on our website](https://embeddedartistry.com/fieldatlas/embedded-artistrys-standardized-meson-build-system/).\n\nAt a minimum you will need:\n\n* [`git-lfs`](https://git-lfs.github.com), which is used to store binary files in this repository\n* [Meson](#meson-build-system) is the build system\n* Some kind of compiler for your target system.\n    - This repository has been tested with:\n        - gcc-7, gcc-8, gcc-9\n        - arm-none-eabi-gcc\n        - Apple clang\n        - Mainline clang\n\n#### git-lfs\n\nThis project stores some files using [`git-lfs`](https://git-lfs.github.com).\n\nTo install `git-lfs` on Linux:\n\n```\nsudo apt install git-lfs\n```\n\nTo install `git-lfs` on OS X:\n\n```\nbrew install git-lfs\n```\n\nAdditional installation instructions can be found on the [`git-lfs` website](https://git-lfs.github.com).\n\n#### Meson Build System\n\nThe [Meson](https://mesonbuild.com) build system depends on `python3` and `ninja-build`.\n\nTo install on Linux:\n\n```\nsudo apt-get install python3 python3-pip ninja-build\n```\n\nTo install on OSX:\n\n```\nbrew install python3 ninja\n```\n\nMeson can be installed through `pip3`:\n\n```\npip3 install meson\n```\n\nIf you want to install Meson globally on Linux, use:\n\n```\nsudo -H pip3 install meson\n```\n\n**[Back to top](#table-of-contents)**\n\n### Getting the Source\n\nThis project uses [`git-lfs`](https://git-lfs.github.com), so please install it before cloning. If you cloned prior to installing `git-lfs`, simply run `git lfs pull` after installation.\n\nThis project is hosted on GitHub. You can clone the project directly using this command:\n\n```\ngit clone --recursive git@github.com:embeddedartistry/project-skeleton.git\n```\n\nIf you don't clone recursively, be sure to run the following command in the repository or your build will fail:\n\n```\ngit submodule update --init\n```\n\n**[Back to top](#table-of-contents)**\n\n### Building\n\nIf Make is installed, the library can be built by issuing the following command:\n\n```\nmake\n```\n\nThis will build all targets for your current architecture.\n\nYou can clean builds using:\n\n```\nmake clean\n```\n\nYou can eliminate the generated `buildresults` folder using:\n\n```\nmake distclean\n```\n\nYou can also use  `meson` directly for compiling.\n\nCreate a build output folder:\n\n```\nmeson buildresults\n```\n\nAnd build all targets by running\n\n```\nninja -C buildresults\n```\n\nCross-compilation is handled using `meson` cross files. Example files are included in the [`build/cross`](build/cross/) folder. You can write your own cross files for your specific processor by defining the toolchain, compilation flags, and linker flags. These settings will be used to compile the project.\n\nCross-compilation must be configured using the meson command when creating the build output folder. For files stored within `build/cross`, we provide a Makefile `CROSS` to simplify the process. This variable will automatically supply the proper Meson argument, `build/cross/` prefix, and `.txt` filename extension.\n\nYou can use a single file, or you can layer multiple files by separating the names with a colon.\n\n```\nmake CROSS=arm:cortex-m4_hardfloat\n```\n\nYou can also do this manually with the Meson interface. Note, however, that you will need to include a special `--cross-file=build/cross/embvm.txt` cross file to ensure that the required Embedded VM settings are applied.\n\n```\nmeson buildresults --cross-file build/cross/arm.txt --cross-file build/cross/cortex-m4_hardfloat.txt --cross-file=build/cross/embvm.txt\n```\n\nFollowing that, you can run `make` (at the project root) or `ninja -C buildresults` to build the project.\n\n\u003e **Note:** Tests will not be cross-compiled. They will only be built for the native platform.\n\n**Full instructions for working with the build system, including topics like using alternate toolchains and running supporting tooling, are documented in [Embedded Artistry's Standardized Meson Build System](https://embeddedartistry.com/fieldatlas/embedded-artistrys-standardized-meson-build-system/) on our website.**\n\n**[Back to top](#table-of-contents)**\n\n### Enabling Link-time Optimization\n\nLink-time Optimization (LTO) can be enabled during the meson configuration stage by setting the built-in option `b_lto` to `true`:\n\n```\nmeson buildresults -Db_lto=true\n```\n\nThis can be combined with other build options.\n\n**[Back to top](#table-of-contents)**\n\n### Testing\n\nThe tests for this library are written with CMocka, which is included as a subproject and does not need to be installed on your system. You can run the tests by issuing the following command:\n\n```\nmake test\n```\n\nBy default, test results are generated for use by the CI server and are formatted in JUnit XML. The test results XML files can be found in `buildresults/test/`.\n\n**[Back to top](#table-of-contents)**\n\n## Configuration Options\n\nThe following meson project options can be set for this library when creating the build results directory with `meson`, or by using `meson configure`:\n\n* `disable-builtins` will tell the compiler not to generate built-in function\n* `disable-stack-protection` will tell the compiler not to insert stack protection calls\n* `disable-rtti` will disable RTTI for C++ projects\n* `disable-exceptions` will disable exceptions for C++ projects\n* `enable-threading` can be used to control threaded targets and libc++ threading support\n* `enable-pedantic`: Turn on `pedantic` warnings\n* `enable-pedantic-error`: Turn on `pedantic` warnings and errors\n* `hide-unimplemented-libc-apis`: Hides the header definitions for functions which are not actually implemented\n* `enable-gnu-extensions` will enable GNU libc extensions that are implemented in this library\n\nThe following options can be used to configure `libc++` if used with this project:\n\n* `libcxx-use-compiler-rt`\n* `libcxx-use-llvm-libunwind`\n* `libcxx-thread-library`\n* `libcxx-has-external-thread-api`\n* `libcxx-build-external-thread-api`\n* `libcxx-enable-chrono`\n* `libcxx-enable-filesystem`\n* `libcxx-enable-stdinout`\n* `libcxx-default-newdelete`\n* `libcxx-silent-terminate`\n* `libcxx-monotonic-clock`\n\nOptions can be specified using `-D` and the option name:\n\n```\nmeson buildresults -Ddisable-builtins=false\n```\n\nThe same style works with `meson configure`:\n\n```\ncd buildresults\nmeson configure -Ddisable-builtins=false\n```\n\n**[Back to top](#table-of-contents)**\n\n## Documentation\n\nDocumentation can be built locally by running the following command:\n\n```\nmake docs\n```\n\nDocumentation can be found in `buildresults/docs`, and the root page is `index.html`.\n\n**[Back to top](#table-of-contents)**\n\n## Need help?\n\nIf you need further assistance or have any questions, please file a GitHub issue or send us an email using the [Embedded Artistry Contact Form](http://embeddedartistry.com/contact).\n\nYou can also [reach out on Twitter: mbeddedartistry](https://twitter.com/mbeddedartistry/).\n\n## Contributing\n\nIf you are interested in contributing to this project, please read our [contributing guidelines](docs/CONTRIBUTING.md).\n\n## Authors\n\n* **[Phillip Johnston](https://github.com/phillipjohnston)**\n\n## License\n\nCopyright © 2020 Embedded Artistry LLC\n\nSee the [LICENSE](LICENSE) file for licensing details.\n\nFor other open-source licenses, please see the [Software Inventory](docs/software_inventory.xlsx).\n\n## Acknowledgments\n\nMake any public acknowledgments here\n\n**[Back to top](#table-of-contents)**\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fembeddedartistry%2Fproject-skeleton","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fembeddedartistry%2Fproject-skeleton","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fembeddedartistry%2Fproject-skeleton/lists"}