{"id":21969587,"url":"https://github.com/cinderblock/umaker","last_synced_at":"2026-02-07T18:34:11.718Z","repository":{"id":24698408,"uuid":"28109768","full_name":"cinderblock/uMaker","owner":"cinderblock","description":"µMaker  - Tools for embedded C/C++ projects in Makefiles","archived":false,"fork":false,"pushed_at":"2022-10-06T07:59:54.000Z","size":163,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-02T22:37:35.806Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cinderblock.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-12-16T22:32:11.000Z","updated_at":"2024-12-14T18:43:17.000Z","dependencies_parsed_at":"2023-01-14T01:27:05.875Z","dependency_job_id":null,"html_url":"https://github.com/cinderblock/uMaker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cinderblock/uMaker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cinderblock%2FuMaker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cinderblock%2FuMaker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cinderblock%2FuMaker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cinderblock%2FuMaker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cinderblock","download_url":"https://codeload.github.com/cinderblock/uMaker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cinderblock%2FuMaker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29203782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T17:44:10.191Z","status":"ssl_error","status_checked_at":"2026-02-07T17:44:07.936Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-29T14:22:40.738Z","updated_at":"2026-02-07T18:34:11.702Z","avatar_url":"https://github.com/cinderblock.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# µMaker  - Tools for embedded C/C++ projects in Makefiles\n\nThis set of makefiles is intended to be used by all embedded projects. Each file in `tools/` is intended to be included from a main Makefile in your project. Each loads a particular set of features. You should include the ones you want, and not the ones you done.\n\nSome sample Makefiles are provided for a couple systems.\n\n# Important\n\nThis is still a ***Work In Progress***.\n\nI'm still flushing out the main interfaces and project standards.\n\nThis readme may not be quite up to date. See comments for most accurate documentation.\n\n## Getting Started\n\n - Copy one of the sample Makefiles to your project dir and rename it to `Makefile`\n - Set the var `uMakerPath` to the uMaker directory, so that the includes work\n - Set the `C` and/or `CPP` vars in your new `Makefile` to compile your C/C++ files\n - Select which uMaker tools are included (only include the ones you use)\n\n## Modules *aka: tools*\n\nDescriptions of modules and how to use them\n\n### FreeRTOS\n\nAdd support for FreeRTOS to your project. This module enables compilation of their\nsources and automatically copies the `portmacro.h` and `port.c` files to your\nproject.\n\nSet `FreeRTOS_Port` to one of the folder names in `FreeRTOS\\FreeRTOS\\Source\\portable\\GCC`.\nThis module will copy both `port.c` and `portmacro.h` to your project. `port.c`\nwill be renamed and placed according to `FreeRTOS_PortDefinitions_File`. `portmacro.h`\nwill keep its filename but be put into the folder `FreeRTOS_PortInc_Dir`.\n\nYou will also need to create a file named `FreeRTOSConfig.h` and put that in the\n`FreeRTOS_PortInc_Dir` folder. Samples of `FreeRTOSConfig.h` are in the FreeRTOS demo\nfolders.\n\n### Arduino\n\nAdd support for an Arduino core. By default, only works with the AVR core.\n\nDoes **not** handle Arduino Libraries. To use Arduino Libraries, copy them into\nyour project's source folder and add them to the list of CPP files to build. This\nis required because Arduino's library \"standard\" is poorly defined and too\ninconsistent. Therefore, instead of trying to write a crazy uMaker module to\nsupport all of the possible libraries, we're forcing users to copy code and take\nownership of the libraries they use.\n\n### mkdir\n\nThis module reads the variable `AUTO_GENERATED_FILES` and makes sure each\ngenerated file depends on a target builds the destination folder when needed.\n\n### makeflags\n\nThis module sets some useful default make command line arguments. In particular,\nit disables verbosity. It may also run multiple parallel jobs.\n\n### build\n\nThis is a core module that does the main compilation of your C/C++/S source files.\nIt also links object files into the final output `.elf` and `.hex` files.\n\n### assembly\n\nThis module basically runs the same commands as `build` but only until intermediate\nassembly `.asm` files are built. The intention is to allow inspection of compiled\nsource files to check for low level issues.\n\n## Conventions\n\nSome guidelines to follow using the tools.\n\n### Variable names\n\nAll variables should have a namespace prefix to keep things separate. There are a couple exceptions to this in the current tools where appropriate.\n\nMost makefiles use uppercase variable names. This is how I've started this project's development, but I'm not seeing a good reason to continue using only uppercase variable names. I'm going to start converting them to CamelCase to ease readability and writeability.\n\nSee [renames](Renames.md)\n\n### Paths\n\nVariables that end in `Path` must end with a `/` or be empty.\n\nVariables that end in `Dir` must **not** end with a `/` **nor** be empty.\n\n```\n# Valid Paths vs Dirs\nBuild_Path = .build/\nArduino_BaseDir = Arduino\nBuild_LibPath = \nArduino_BuildDir = .\n```\n\n### Variable defaults\n\nMost variables have sane defaults set. If you need to override them or set extras, you can do so directly in your main Makefile. Nearly all assignments in make-tools are done with ?=, which allows you to define your own versions instead.\n\nMany variables also incorporate the same variable but with `Extra` suffixed so that values can be trivially added\n\n## Recommended Reading\n\nYou should be able to get by just copying and editing the `Makefile.xxxxx.sample` files. However, if you are interesting in understanding what is going on, keep reading.\n\n### GCC Build Conventions\n\nIn general, you should understand the standard chain of gcc commands, input and output files, and includes directories.\n\nSome points to remember:\n\n - GCC preprocessor handles all the #directives and basically creates one temporary C/C++ file that has no #directives\n - You don't need to use `.` as an include dir (`-I.`)\n - GCC doesn't make folders that it would need to be there for build to succeed\n\nfile1.c\t\t-\u003e file1.c.o\nfile2.cpp\t-\u003e file2.cpp.o\nlib.c\t\t-\u003e lib.c.o\nlib.c.o\t\t-\u003e lib.a\n\nfile1.c.o + file2.cpp.o + lib.a -\u003e out.elf\n\n### Make Features\n\nYou should be aware of how makefiles work. However, a few features that I use in particular are:\n\n - Conditional assignment operators\n - Filename functions (`$(dir ...)`)\n - Substring functions (`$(VAR:find=replace)`)\n - Implicit Rules\n - Automatic Variables\n\nPoints to remember:\n\n - Variables are just strings that get text replaced when they are used\n - Variables are expanded at the time they are used\n - Variables are \"used\" in only certain places. Especially:\n     - Explicit expansion: `:=`\n     - Target [dependency] declaration - This is why variables are usually before targets\n     - `include` directives\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcinderblock%2Fumaker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcinderblock%2Fumaker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcinderblock%2Fumaker/lists"}