{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":32271212,"defaultBranch":"develop","name":"Sming","ownerLogin":"SmingHub","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-03-15T16:36:22.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/14863779?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1721295810.0","currentOid":""},"activityList":{"items":[{"before":"e6ed3d9f7f844cbcef872796df33ef3e41e15db6","after":"c34d7472b43f5c8cd45320da1ecbe7e3d3860d99","ref":"refs/heads/develop","pushedAt":"2024-09-25T10:32:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Improved checking for uninstalled tools for unsupported linux distributions. (#2887)\n\n- Support for linux platforms not providing apt or dnf. Installation\r\n script searches for required tools and list missing.","shortMessageHtmlLink":"Improved checking for uninstalled tools for unsupported linux distrib…"}},{"before":"3cb6f28a9ac13ff8d47adf30d68f06c6314a6a83","after":"e6ed3d9f7f844cbcef872796df33ef3e41e15db6","ref":"refs/heads/develop","pushedAt":"2024-09-23T07:40:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Fix build warnings/errors in C++20 (#2883)\n\n**FlashString static initialisation**\r\n\r\nThe `Object` copy and move constructors are deleted as a precaution as these objects should not be copied.\r\nC++20 doesn't like this so they're only compiled for C++17 and earlier.\r\n\r\n**std:is_pod deprecated**\r\n\r\nUse std::is_standard_layout instead (only one instance to correct).\r\n\r\n**Volatile**\r\n\r\nC++20 deprecates many uses of `volatile` which may be implemented in an ambiguous (non-deterministic) way.\r\nLargely these uses are concerned with threaded applications. A general web search turns up plenty of articles on this.\r\n\r\nOne argument is related to code like this:\r\n\r\n```c++\r\nvolatile int num;\r\n++num; // Is this atomic? Or a read, followed by load?\r\n```\r\n\r\nSo we should identify all such cases and code them more explicitly.\r\n\r\nThe FIFO/FILO classes define `numberOfElements` as volatile but I can see no reason why this needs to be the case.\r\n\r\n**Volatile bitwise operations**\r\n\r\nC++23 will, it seems, de-deprecate use of volatile for bitwise operations.\r\nThis is discussed here https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2327r1.pdf.\r\nSee also https://github.com/earlephilhower/arduino-pico/issues/1379\r\n\r\nThese are genuine uses of volatile as values are used both in interrupt and task context. Some of these actually need to be atomic, and the assumption is probably that `x |= n` does that. Hence the ambiguity. These are the core Sming files affected:\r\n\r\n* Sming/Arch/Esp8266/Components/driver/i2s.cpp\r\n* Sming/Arch/Esp8266/Components/spi_flash/iram_precache.cpp\r\n* Sming/Arch/Esp8266/Components/gdbstub/appcode/gdb_hooks.cpp\r\n* Sming/Arch/Esp8266/Components/gdbstub/gdbstub.cpp\r\n* Sming/Arch/Esp8266/Components/gdbstub/gdbuart.cpp\r\n* Sming/Arch/Esp8266/Core/Digital.cpp\r\n\r\nThere will be many others in libraries.\r\n\r\nSolution: Rather than attempting to 'correct' the code and introduce bugs - risks identified in the above paper - it is safer to just silence this particular warning. This has been done in the main Sming `build.mk` file so it's easy to revert if required. This is the `volatile` warning which covers other uses as well - future GCC revisions may add some granularity to this.\r\n\r\n\r\n**FIFO / FILO uses int instead of unsigned**\r\n\r\nNo warnings but using `int` for the count makes no sense.\r\nNot related to C++20 but since we're modifying the classes anyway may as well do it here.","shortMessageHtmlLink":"Fix build warnings/errors in C++20 (#2883)"}},{"before":"c79add624b9507422f1612cd705c1904d0ec55e9","after":"3cb6f28a9ac13ff8d47adf30d68f06c6314a6a83","ref":"refs/heads/develop","pushedAt":"2024-09-16T09:37:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Fix MallocCount for MinGW (#2884)\n\nMinGW defines aliases in stdlib.h for `realloc` and `free` which require wrapping.","shortMessageHtmlLink":"Fix MallocCount for MinGW (#2884)"}},{"before":"1e39a56ea574719f689ddc07c75107b0fc6bebad","after":"c79add624b9507422f1612cd705c1904d0ec55e9","ref":"refs/heads/develop","pushedAt":"2024-09-16T07:24:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Remove official support for older ESP32 IDF versions: 4.3, 4.4 and 5.0. (#2882)\n\nIt is highly recommended to upgrade to version 5.2 if not done yet.\r\n\r\nCo-authored-by: Slavey Karadzhov ","shortMessageHtmlLink":"Remove official support for older ESP32 IDF versions: 4.3, 4.4 and 5.…"}},{"before":"6caca47a776ba3997218e60403a45b882adf0eaf","after":"1e39a56ea574719f689ddc07c75107b0fc6bebad","ref":"refs/heads/develop","pushedAt":"2024-08-31T12:16:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Revise `bodyToStringParser` to use MemoryDataStream (#2881)\n\nBetter dynamic memory reallocation and avoids conversion to MemoryDataStream at end anyway.\r\nStill has the weakness that the decode is unbounded so bad actors can kill system with large POST.","shortMessageHtmlLink":"Revise bodyToStringParser to use MemoryDataStream (#2881)"}},{"before":"2d332434fced170542777d8fdfe2338ebb0d2420","after":"6caca47a776ba3997218e60403a45b882adf0eaf","ref":"refs/heads/develop","pushedAt":"2024-08-31T12:15:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Include unicode formatting support for JSON escapes (#2880)\n\nThis PR improves on #2875 for JSON string formatting, updating the `escapeControls` function to handle unicode escaping correctly.\r\n\r\nThe check for valid UTF8 has been removed. That's erroneous and got in there because of my lack of understanding about how JSON is encoded. It's fundamentally UNICODE, so characters outside of standard ASCII must all be encoded using `\\uNNNN` escapes. That ensures output is always valid JSON, even if string input is garbage.\r\n\r\nThe `escapeControls` function has a `options` parameter which makes it a lot more useful for various escaping requirements. This is also more efficient as the input string requires only two passes for both escaping and quoting: the first pass establishes the new string length, the buffer is re-allocated then the modified string produced.","shortMessageHtmlLink":"Include unicode formatting support for JSON escapes (#2880)"}},{"before":"4fff8a8384cb9a32e46627637da8cf4b78ce9270","after":"2d332434fced170542777d8fdfe2338ebb0d2420","ref":"refs/heads/develop","pushedAt":"2024-08-31T12:13:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Add `EEXIST` to common host errors, don't fail when creating directories (#2878)\n\nCalling `mkdir` when a directory exists returns `EEXIST` error, which we want to map to `IFS::Error::Exists`.\r\n\r\nIn `makeDirectories` call, it's not an error if an intermediate directory exists, otherwise the whole call will fail.","shortMessageHtmlLink":"Add EEXIST to common host errors, don't fail when creating director…"}},{"before":"3378a0c20dc614d4515855e6ba556cacc1aa7c1d","after":"4fff8a8384cb9a32e46627637da8cf4b78ce9270","ref":"refs/heads/develop","pushedAt":"2024-08-31T12:13:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"`dtostrf_p` doesn't handle advertised range (#2879)\n\nCode indicates range of +/- 4294967040.0 but that isn't achievable using `ltoa` (signed) call.","shortMessageHtmlLink":"dtostrf_p doesn't handle advertised range (#2879)"}},{"before":"daa4db6608f47bbd24c5b28fc768249c3f98eaa5","after":"3378a0c20dc614d4515855e6ba556cacc1aa7c1d","ref":"refs/heads/develop","pushedAt":"2024-08-24T05:25:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Fix conflict with stdc++ `operator delete[](void*, size_t)` (#2877)","shortMessageHtmlLink":"Fix conflict with stdc++ operator delete[](void*, size_t) (#2877)"}},{"before":"07bc4121b35ea5ed83c6359cafca479b664153d7","after":"daa4db6608f47bbd24c5b28fc768249c3f98eaa5","ref":"refs/heads/develop","pushedAt":"2024-08-16T06:35:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Add string escaping to JSON formatter (#2875)\n\nJSON does not support multiline text so control characters must be escaped.\r\nThis PR adds a generic `escapeControls` function to the `Formatter` classes, which is used by `Format::json::escape()`.","shortMessageHtmlLink":"Add string escaping to JSON formatter (#2875)"}},{"before":"f8d10e61e9be7b38e186e659226936cae7f9f46b","after":"07bc4121b35ea5ed83c6359cafca479b664153d7","ref":"refs/heads/develop","pushedAt":"2024-08-13T14:22:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Translate common host errno values to standard IFS errors (#2874)\n\nRather than return system error values, translate errors such as 'file not found' to standard IFS code, for consistency with embedded builds.","shortMessageHtmlLink":"Translate common host errno values to standard IFS errors (#2874)"}},{"before":"16cf83dc4178f3bb766332ff7b4e638f9491622e","after":"f8d10e61e9be7b38e186e659226936cae7f9f46b","ref":"refs/heads/develop","pushedAt":"2024-08-07T05:22:10.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Add `PrintBuffer` classes (#2873)\n\nUsing ArduinoJson to serialize directly to a file stream performs poorly because writes are done byte-by-byte. This issue is mentioned under [performance](https://arduinojson.org/v6/api/json/serializejson/).\r\n\r\nThe mentioned [ArduinoStreamUtils](https://github.com/bblanchon/ArduinoStreamUtils) library is a bit hefty and doesn't particular fit with the existing Sming stream classes.\r\n\r\nThis PR adds a very simple `PrintBuffer` class which operates on a `Print` output and can be employed very easily if additional generic buffering is required.\r\n\r\nNote that there is little benefit to using this with other memory-based streams so best left to the library or application to decide when its appropriate.","shortMessageHtmlLink":"Add PrintBuffer classes (#2873)"}},{"before":"d140eef2e1facfbbc292cc88b4da7b2d81b04d24","after":"16cf83dc4178f3bb766332ff7b4e638f9491622e","ref":"refs/heads/develop","pushedAt":"2024-07-24T11:20:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Possible DnsServer memory leak reported by coverity (#2870)","shortMessageHtmlLink":"Possible DnsServer memory leak reported by coverity (#2870)"}},{"before":"e3846d116c238143da72aa7e1a8b9a50a97a6536","after":"3482a02f0ae57fe2799dfbb6431fe42be37f326a","ref":"refs/heads/master","pushedAt":"2024-07-18T09:43:46.000Z","pushType":"push","commitsCount":129,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Merge branch 'develop'","shortMessageHtmlLink":"Merge branch 'develop'"}},{"before":"7c31a516ef7dc486323d21119f41268889d0e7f2","after":"d140eef2e1facfbbc292cc88b4da7b2d81b04d24","ref":"refs/heads/develop","pushedAt":"2024-07-18T09:40:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Preparation for v5.2.0. (#2807)","shortMessageHtmlLink":"Preparation for v5.2.0. (#2807)"}},{"before":"e2f6827512c0778265a02f48104d59997f567d90","after":null,"ref":"refs/heads/dev/ci-esp32-simplify","pushedAt":"2024-07-18T08:53:06.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mikee47","name":"Mike","path":"/mikee47","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1982774?s=80&v=4"}},{"before":null,"after":"e2f6827512c0778265a02f48104d59997f567d90","ref":"refs/heads/dev/ci-esp32-simplify","pushedAt":"2024-07-18T08:52:46.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"mikee47","name":"Mike","path":"/mikee47","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1982774?s=80&v=4"},"commit":{"message":"Fixes","shortMessageHtmlLink":"Fixes"}},{"before":"c3d496b49fc8eec1daed00d5411bd51c78e2ce4a","after":"7c31a516ef7dc486323d21119f41268889d0e7f2","ref":"refs/heads/develop","pushedAt":"2024-07-18T07:22:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Fix CI ccache for library and restrict size (#2866)\n\n**Fix CI library caching**\r\n\r\n#2865 broken library CI because:\r\n\r\n- ccache initialisation commands never get executed to set ccache directory\r\n- library ccache key must have toolchain in it\r\n\r\nFixed by removing the ccache commands from script and updating workflow `env` instead.\r\nJust requires call to clear stats before building.\r\n\r\nNB. This leads to a fair bit of duplication in all 3 workflow files. This is the simplest I can come up with for now.\r\n\r\n**Simplify workflows**\r\n\r\nDon't need the `Configure environment` step, just add values to `env`.\r\n\r\n**Use explicit ccache path**\r\n\r\nIn testing was getting failures saving cache due to ccache not found.\r\nUse explicit absolute path to ccache directory.\r\n\r\n**Restrict ccache size**\r\n\r\nThe cache for each job will increase over time to hit 500MB.\r\nOver 40 jobs that's 20GB and will cause cache thrashing.\r\n\r\nEasy fix: ask ccache to evict anything older than 4 hours from ccache.\r\nDo this before printing stats so we can see the resulting size.","shortMessageHtmlLink":"Fix CI ccache for library and restrict size (#2866)"}},{"before":"ee230cf56e2deba8a5275f2fbc27d6e999489e53","after":"c3d496b49fc8eec1daed00d5411bd51c78e2ce4a","ref":"refs/heads/develop","pushedAt":"2024-07-17T11:34:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Update CI ccache on every push to develop (#2865)\n\nBuild times are increasing faster than I expected, so it's clear that to be effective the ccache needs to be kept up to date.\r\nThis needs to happen automatically so we can forget about it.\r\n\r\nGithub caching behaviour is to fail the save operation if a hit occurred on primary key.\r\nIn other words, a cache entry will never be overwritten (updated).\r\nThere is no provision for a cache update as such: https://github.com/actions/cache/issues/342\r\n\r\nThe workaround is fairly easy though: break into discrete restore/delete/save steps.\r\n\r\nOnly the cache for the current branch is deleted, using the `--branch` option to `gh action-cache delete`.\r\nThis prevents pull requests from contributors with repo write access from deleting the main `develop` cache.\r\n\r\nThis table shows the intended progression of cache updates, starting from an empty cache:\r\n\r\n| Event | Branch | Restore | Delete | Save |\r\n| ------- | ------------ | -------- | ------- | ------------ |\r\n| PR | feature/new | - | - | feature/new |\r\n| PR | feature/new | feature/new | - | - |\r\n| Merge | develop | - | - | develop |\r\n| PR | fix/lwip | develop | - | - |\r\n| Merge | develop | develop | develop | develop |\r\n\r\nSo always save if (event.branch == develop) or no cache hit","shortMessageHtmlLink":"Update CI ccache on every push to develop (#2865)"}},{"before":"07f4472b718236285a266f46879e24b52d3aaa82","after":"ee230cf56e2deba8a5275f2fbc27d6e999489e53","ref":"refs/heads/develop","pushedAt":"2024-07-17T07:43:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Some more documentation fixes (#2864)\n\nMore documentation fixes.\r\n\r\nTwo stragglers in source/arch and we can remove that directory.\r\n\r\n- Move esp-quick-toolchain info to esp8266 page and update.\r\n- arch/host/index is redundant, remove it\r\n\r\nMove arch-specific features off index page\r\n\r\nFix broken GCC upgrade URLs - if compiler check fails direct to getting started page.","shortMessageHtmlLink":"Some more documentation fixes (#2864)"}},{"before":"d94548008e1e3d14d4d09a61ff16fcd000ef994f","after":"07f4472b718236285a266f46879e24b52d3aaa82","ref":"refs/heads/develop","pushedAt":"2024-07-16T15:40:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Documentation fixes (#2841)\n\nGeneral review and update to documentation\r\n\r\n**Smart quotes**\r\n\r\nThese are the 'pretty' versions of regular quotes which can infect code and documentation due to a 'smart quote' virus embedded into many modern editors.\r\nTheir purpose is to make documentation (e.g. web pages) look pretty. That's it.\r\n\r\nTheir presence in C/C++ code is a syntax errror. In documentation, not so much.\r\nHowever, if they appear in quoted code snippets then these won't work when pasted.\r\n\r\nI think it best therefore to avoid them completely, so have all been converted to standard 'dumb' quotes.\r\n\r\nNote that Sphinx will automatically convert regular quotes into their curly equivalents so there is no need whatsoever to have these in the source.\r\n\r\nTODO (please comment if you have any thoughts on these!):\r\n\r\n* [x] Is espconn still unsupported by lwip2? Don't know: just add note.\r\n* [x] Windows .cmd install scripts are quite useable, just needs an `export.cmd` and documenting. We then don't need the custom sming choco scripts: we should remove those from documentation. Bit more than that: separate PR.\r\n* [x] Is there a way to check/fix use of smart quotes automatically? Nope. I'll write one.\r\n* [x] Add notes on debugging in vscode - already there, just not as involved as Eclipse\r\n* [x] Is eclipse still a good development environment? I always found it slow, complicated and clunky, but maybe that's changed? Is the documentation still correct for current versions?\r\n* [x] Lots of duplication in eclipse debugging pages, merge this into single document","shortMessageHtmlLink":"Documentation fixes (#2841)"}},{"before":"f56189f1cebaa8f979c2f4a5b9e041418ebe3c96","after":"d94548008e1e3d14d4d09a61ff16fcd000ef994f","ref":"refs/heads/develop","pushedAt":"2024-07-16T13:14:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Remove legacy Host dependencies on Esp8266 Components (#2863)","shortMessageHtmlLink":"Remove legacy Host dependencies on Esp8266 Components (#2863)"}},{"before":"90cb6bb2cc6aec0d0b33c7046772f7be0f019e46","after":"f56189f1cebaa8f979c2f4a5b9e041418ebe3c96","ref":"refs/heads/develop","pushedAt":"2024-07-16T07:27:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Revert SmingLocale.h coding (#2862)\n\nThe french and german strings defined in `SmingLocale.h` appear to have been corrupted.\r\n\r\nTaking the é in février as an example:\r\n\r\nPR #1549 Initial commit as ascii (probably Windows) `e9`\r\nPR #1715 changed to UTF-8 'replacement character' ef bf bd.\r\n\r\nThe UTF-8 code would be ce a9 but as that's two bytes it could break existing code.\r\nBest to stick with original encoding.","shortMessageHtmlLink":"Revert SmingLocale.h coding (#2862)"}},{"before":"fd165a5389515069ee79878524a269bf24f0f38d","after":"90cb6bb2cc6aec0d0b33c7046772f7be0f019e46","ref":"refs/heads/develop","pushedAt":"2024-07-15T15:32:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Fix IDF tool installation (#2861)\n\nThis PR fixes tool installation for IDF < 5.2.\r\n\r\nOverlooked that wildcard tool spec. only supported for IDF 5.2 installer.\r\nFixed by providing explicit list of tools for each version.\r\n\r\n**Improve cache-clean action**\r\n\r\nNot very intuitive so added four levels of cleaning:\r\n\r\n- pull-requests: Any items created by pull requests, excludes anything in develop branch\r\n- ccache: All ccache items\r\n- idf-tools: All IDF tools\r\n- ccache+idf: All ccache and IDF tool caches.\r\n\r\nRemoved the `cache-rebuild` action since we can just do a cache clean then manually trigger a rebuild of the develop branch to accomplish a similar thing.\r\n\r\n**Update `clean-tools.py` script**\r\n\r\nDidn't clean some tools.","shortMessageHtmlLink":"Fix IDF tool installation (#2861)"}},{"before":"a9864daed4d372fecb1add373def863ddb4fc3e2","after":"fd165a5389515069ee79878524a269bf24f0f38d","ref":"refs/heads/develop","pushedAt":"2024-07-14T18:53:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Update windows installer (#2859)\n\nThe Windows installer makes use of custom chocolatey packages, which are out of date. See issue #2514.\r\nThese packages are separate from the main Sming repository and represent an un-necessary maintenance overhead.\r\n\r\nThis PR updates the installation scripts so these custom chocolatey packages are no longer required.\r\nThe scripts were previously only used for CI testing so have been reworked appropriately.\r\nThe installation procedure is now similar to that for linux/MacOS.\r\n\r\nThe initial bootstrap installation remains unchanged: The ``choco-install.cmd`` script is fetched from the Sming ``develop`` branch and executed.\r\n\r\nNote: Contrary to other installs and the documentation, the current sming choco script installs the `master` branch.\r\n\r\nThe user runs a second install script `tools\\install` to install required toolchains.\r\nThis is separate because:\r\n\r\n- Administrative priviledges are not required\r\n- The user gets more control over which toolchains get installed\r\n- The script doesn't change anything outside of the `C:\\tools` directory (other than python packages)\r\n\r\nThe directory can also be customised by setting `SMING_TOOLS_DIR`.\r\n\r\nThe documentation at https://sming.readthedocs.io/en/latest/getting-started/windows/index.html has been updated to reflect these changes.\r\n\r\n\r\n**CI Compiler Cache**\r\n\r\nI've moved caching to just before the build starts, so that configuration and zeroing ccache is handled by the build script. This is more logical than doing it as part of the install phase.\r\n\r\n\r\n**Esp32 install/build**\r\n\r\nA standard IDF tools installation includes the following packages:\r\n\r\n- cmake\r\n- ninja\r\n- ccache\r\n\r\nAs Sming installs these system-wide, these are not required.\r\nAlso, as we now have Ninja in the system path for all platforms some logic in build.mk can be removed.\r\n\r\nThese additional items are not used:\r\n\r\n- idf-exe\r\n- dfu-util\r\n\r\nThe Sming Esp32 installer omits all the above items, for linux/MacOS also.\r\nTurns out we can just pass the filter `\"*elf*\"` to the installer to get all the stuff we **do** actually need.\r\n\r\n\r\n**Python**\r\n\r\nThis defaulted to `python3`, which failed in testing as current installers don't provide it, so change to `python`.\r\n\r\nThe `PYTHON` variable now defaults to the full path determined by `which python`. In Windows, the makefile resolves this to something like `/c/Python312/python.exe`.\r\n\r\n\r\n**MinGW**\r\n\r\nI've also added `MinGW-2021-04-12.7z` to the [SmingTools](https://github.com/SmingHub/SmingTools/releases).\r\nThis differs from `MinGW-2020-10-19.7z` which was previously used (in both choco package and CI install) in the following ways:\r\n\r\n- MinGW version changed from 5.4.1 to 5.4.2\r\n- Files unpack into `./` instead of `MinGw/` so makes it easier to relocate during installation if required\r\n- Contents of `var/cache` removed to reduce size of archive (48MB vs 133MB)\r\n\r\nNo changes to GCC, still 9.2.0.\r\n\r\n\r\n**Docs build**\r\n\r\nDocumentation build fails in Windows, problems with libcairo-2.dll.\r\nInitially, the error was about not finding the DLL.\r\nSome reserach suggests installing gtk+ runtime should fix this.\r\nStill fails but with error \"can't find .so\".\r\n\r\nLeaving this as a known issue, just build in Linux or WSL.","shortMessageHtmlLink":"Update windows installer (#2859)"}},{"before":"0706c25e9fc7b42939cd420a0dea23df4c1e94c5","after":"a9864daed4d372fecb1add373def863ddb4fc3e2","ref":"refs/heads/develop","pushedAt":"2024-07-11T14:33:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Fix CI library builds (#2858)\n\nBroken by #2857. Also enable ccache.\r\n\r\n- `CI_BUILD_DIR` does not point to Sming build: must use SMING_HOME.\r\n- Don't set CI_BUILD_DIR or SMING_HOME in `setenv.ps1` - it's wrong and already set in `.yml`","shortMessageHtmlLink":"Fix CI library builds (#2858)"}},{"before":"045a85abfc648a87301019a2db5d12a2db5b6f47","after":"0706c25e9fc7b42939cd420a0dea23df4c1e94c5","ref":"refs/heads/develop","pushedAt":"2024-07-09T15:40:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"CI ccache rework (#2857)\n\nThis PR makes a few changes to the way ccache is used for CI.\r\n\r\nI did consider adding ccache detection to `export.sh` so it gets enabled by default.\r\nWhilst ccache is great and seems quite robust, if things do go wrong it just adds more complication for users to sort out so requiring manual activation seems best I think.\r\n\r\n\r\n**Simplify CI ccache use**\r\n\r\nHendrik Muhs `ccache-action` got things working easily, but it does installation and some other stuff which we don't need and creating versioned caches on every run is un-necessary.\r\n\r\nInstead, just use the standard `cache` action as used for IDF tools, so pull requests use the `develop` branch cache if available or creates one. This keeps things clean and simple.\r\n\r\nHowever, once created caches aren't update automatically, so I've added a workflows to rebuilding the tools which is required if the IDF toolchains get updated.\r\n\r\nI've also added a second 'cache clean` workflow which removes any cache entries for pull requests (specifically, not develop).\r\n\r\n\r\n**Tidy action scripts**\r\n\r\n- Actions `if` clause doesn't require `${{ }}`\r\n- Add workflow_dispatch for both CI builds so we can trigger rebuilds manually if necessary.\r\n\r\n\r\n**Esp32 tools installation**\r\n\r\nInstaller is still re-installing the tools (gdb, etc.) we've previously pruned out.\r\nSo just skip esp32 tools installation for CI if directory already present.\r\n\r\nIDF also insists on pulling unwanted submodules back in again, even though they're not used.\r\nFortunately there is `IDF_SKIP_CHECK_SUBMODULES=1` to disable this behaviour.\r\n\r\nAlso some improvements to the `clean-tools.py` script. Works much better. Have added some notes to the `Tools/ci/README.rst`.\r\n\r\nThis is also a useful step in identifying and eliminating stuff we don't need for Sming.\r\nOne thing I have in mind is getting rid of the IDF build step completely and just building the required code separately.\r\n\r\nUnfortunately the whole SDK is excessively complex and have found the Rp2040 much easier to work with in practice.\r\nIf I ever find a serious application for the extra hardware in an esp32 I might revisit this...","shortMessageHtmlLink":"CI ccache rework (#2857)"}},{"before":"d329c64f1863392f8087ec79c8afb5c33ac17ed2","after":"045a85abfc648a87301019a2db5d12a2db5b6f47","ref":"refs/heads/develop","pushedAt":"2024-07-08T13:43:52.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"mikee47","name":"Mike","path":"/mikee47","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1982774?s=80&v=4"},"commit":{"message":"Add ccache support (#2856)\n\nThis PR adds [ccache](https://ccache.dev/) support to the framework and improves general build performance.\r\n\r\nOf particular importance is keeping the CI runs efficient to conserve resources without sacrificing effectiveness. If they complete a bit faster too, that's a bonus :-)\r\n\r\n**Reduce CI installation overhead**\r\n\r\nSince we're using more CI cache space to cache builds, it's at a premium. Fortunately there's quite a lot of stuff we can remove so running a script (`clean-tools.py`) after tool installation (CI only) clears this out so it doesn't end up in the cache. In practice this saves about 1.4GB of (compressed) cache space.\r\n\r\nAlso, for IDF4.3 we can reduce that to a single run for the standard `esp32` SOC.\r\n\r\n\r\n**Installer improvements**\r\n\r\nOptional packages (e.g. clang-format) only required for Host builds, so don't install them otherwise.\r\n\r\nReview Windows install scripts:\r\n\r\n- Install ninja, ccache\r\n- Check for undefined environment variables\r\n- Check if tools already installed, skip if so and print message\r\n- Don't overwrite MinGW if it already exists\r\n\r\n\r\n**Add ccache support**\r\n\r\nI've never used ccache so wondered what it was doing in the install scripts. Certainly didn't seem to be used anywhere so thinking we could remove it...\r\n\r\nNope. Let's use it. Add `ENABLE_CCACHE` setting, and enable in CI builds.\r\n\r\nStats (`ccache -sv`) shows half of the calls aren't cacheable.\r\nTurns out ccache doesn't support `-MM` which we use for generating header build dependency files. After some investigations turns out we can just use `-MMD` which has several benefits:\r\n1. Allows 100% hit rate via ccache\r\n2. Reduces number of compiler invocations required since `.d` files are generated at the same time as `.o` files\r\n3. Previously, if a source file is moved we got an error such as `No rule to make target '...file.cpp', needed by '...file.cpp.d'. Stop.`. This no longer happens.\r\n4. Works on Windows without `sed` workaround for paths so makefile is simpler/faster.\r\n\r\nNote that a typical ccache installation may add soft links which override system compilers.\r\nFor example, `gcc` would actually run `/usr/lib64/ccache/gcc` instead of `/usr/bin/gcc`.\r\nIf `ENABLE_CCACHE` isn't set then Sming overrides this behaviour (using `CCACHE_DISABLE`) to ensure behaviour consistent with other (cross-compiled) architectures.\r\n\r\n**Fixes**\r\n\r\nUpdate ws_parser submodule. During testing I was getting some complaints about the particular commit not being available.\r\nIt looks like this repo. got rebased at some point and the current master has changed.\r\nNo change to content.\r\n\r\nPython script fixes: `make ide-vscode` fails in Windows, and there's a regex fix to `boardtool.py`.\r\n\r\nFix fallthrough warning in LiveDebug sample.","shortMessageHtmlLink":"Add ccache support (#2856)"}},{"before":"045a85abfc648a87301019a2db5d12a2db5b6f47","after":"d329c64f1863392f8087ec79c8afb5c33ac17ed2","ref":"refs/heads/develop","pushedAt":"2024-07-08T13:43:19.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"mikee47","name":"Mike","path":"/mikee47","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1982774?s=80&v=4"},"commit":{"message":"Standardise cache names","shortMessageHtmlLink":"Standardise cache names"}},{"before":"b7eec4069e699d61d4b686d414b75f361f1036d9","after":"045a85abfc648a87301019a2db5d12a2db5b6f47","ref":"refs/heads/develop","pushedAt":"2024-07-07T14:32:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"slaff","name":null,"path":"/slaff","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/247452?s=80&v=4"},"commit":{"message":"Add ccache support (#2856)\n\nThis PR adds [ccache](https://ccache.dev/) support to the framework and improves general build performance.\r\n\r\nOf particular importance is keeping the CI runs efficient to conserve resources without sacrificing effectiveness. If they complete a bit faster too, that's a bonus :-)\r\n\r\n**Reduce CI installation overhead**\r\n\r\nSince we're using more CI cache space to cache builds, it's at a premium. Fortunately there's quite a lot of stuff we can remove so running a script (`clean-tools.py`) after tool installation (CI only) clears this out so it doesn't end up in the cache. In practice this saves about 1.4GB of (compressed) cache space.\r\n\r\nAlso, for IDF4.3 we can reduce that to a single run for the standard `esp32` SOC.\r\n\r\n\r\n**Installer improvements**\r\n\r\nOptional packages (e.g. clang-format) only required for Host builds, so don't install them otherwise.\r\n\r\nReview Windows install scripts:\r\n\r\n- Install ninja, ccache\r\n- Check for undefined environment variables\r\n- Check if tools already installed, skip if so and print message\r\n- Don't overwrite MinGW if it already exists\r\n\r\n\r\n**Add ccache support**\r\n\r\nI've never used ccache so wondered what it was doing in the install scripts. Certainly didn't seem to be used anywhere so thinking we could remove it...\r\n\r\nNope. Let's use it. Add `ENABLE_CCACHE` setting, and enable in CI builds.\r\n\r\nStats (`ccache -sv`) shows half of the calls aren't cacheable.\r\nTurns out ccache doesn't support `-MM` which we use for generating header build dependency files. After some investigations turns out we can just use `-MMD` which has several benefits:\r\n1. Allows 100% hit rate via ccache\r\n2. Reduces number of compiler invocations required since `.d` files are generated at the same time as `.o` files\r\n3. Previously, if a source file is moved we got an error such as `No rule to make target '...file.cpp', needed by '...file.cpp.d'. Stop.`. This no longer happens.\r\n4. Works on Windows without `sed` workaround for paths so makefile is simpler/faster.\r\n\r\nNote that a typical ccache installation may add soft links which override system compilers.\r\nFor example, `gcc` would actually run `/usr/lib64/ccache/gcc` instead of `/usr/bin/gcc`.\r\nIf `ENABLE_CCACHE` isn't set then Sming overrides this behaviour (using `CCACHE_DISABLE`) to ensure behaviour consistent with other (cross-compiled) architectures.\r\n\r\n**Fixes**\r\n\r\nUpdate ws_parser submodule. During testing I was getting some complaints about the particular commit not being available.\r\nIt looks like this repo. got rebased at some point and the current master has changed.\r\nNo change to content.\r\n\r\nPython script fixes: `make ide-vscode` fails in Windows, and there's a regex fix to `boardtool.py`.\r\n\r\nFix fallthrough warning in LiveDebug sample.","shortMessageHtmlLink":"Add ccache support (#2856)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNVQxMDozMjo1NS4wMDAwMDBazwAAAATALkjC","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNy0wN1QxNDozMjo0NS4wMDAwMDBazwAAAAR446u5"}},"title":"Activity · SmingHub/Sming"}