> On Nov 8, 2021, at 5:13 PM, Kinney, Michael D <michael.d.kin...@intel.com> 
> wrote:
> 
> HI Andrew,
>  
> Great feedback.
>  
> What your preferred way to install a tool like this?  If we collect that data 
> from the community, we can make sure the pipeline generates the right type of 
> installers.
>  

I could not figure out how to download an installer from the links. 

If I go to http://uncrustify.sourceforge.net 
<http://uncrustify.sourceforge.net/> I see 
https://sourceforge.net/projects/uncrustify/files/ 
<https://sourceforge.net/projects/uncrustify/files/> and a button to download 
binaries. Not ideal that it is only for Windows but at least the workflow was 
obvious. Looks like I need to build my own version for macOS, not ideal but I 
can at least figure that out. 

Worst case we can have a Tianocore.org <http://tianocore.org/> page to describe 
a simple recipe to install the tool. With step by step instructions some one 
can just type in without thinking too much. 

Thanks,

Andrew Fish

> Thanks,
>  
> Mike
>  
> From: Andrew Fish <af...@apple.com> 
> Sent: Monday, November 8, 2021 5:09 PM
> To: devel@edk2.groups.io; Kinney, Michael D <michael.d.kin...@intel.com>
> Cc: Marvin Häuser <mhaeu...@posteo.de>; Michael Kubacki 
> <michael.kuba...@microsoft.com>; Leif Lindholm <l...@nuviainc.com>; 
> mikub...@linux.microsoft.com; rebe...@nuviainc.com; Bret Barkelew 
> <bret.barke...@microsoft.com>
> Subject: Re: [edk2-devel] Progress on getting Uncrustify working for EDK2?
>  
> MIke,
>  
> I could not figure out how to download uncrustify tool from the provided 
> link. 99% of the people are just going to want to install the tool, not be a 
> developer of the fork. We should have some simple instructions on how to 
> download the tool. 
>  
> The link points to something git web view looking Azure DevOps page and talks 
> about this Nuget thing I know nothing about. I ran out of time and had to 
> give up trying to download the tool. 
>  
> Thanks,
>  
> Andrew Fish
> 
> 
> On Nov 8, 2021, at 4:23 PM, Michael D Kinney <michael.d.kin...@intel.com 
> <mailto:michael.d.kin...@intel.com>> wrote:
>  
> Hello,
>  
> Good information in this thread on code style.
>  
> Some of the topics apply to uncrustify and some are out of scope for what 
> uncrustify can fix on its own.
>  
> I would like to focus on a date to convert all source code in edk2 repo using 
> the uncrustify tool and to capture the other code style topics into their own 
> thread andbugzillas.
>  
> I would like to propose a conversion date for uncrustify immediately after 
> the edk2-stable202111 release on 2021-11-26.
>  
> I have been working with Michael Kubacki on a build comparison tool that 
> verifies that the build generate the same obj/lib/dll/efi/fv/fd files before 
> and after the uncrustify changes.  We would run and publish the results from 
> this tool before committing the changes.
>  
> We need TianoCore community approval of the following:
>  
> Approve format of C source generated by the uncrustify.
> Approve uncrustify changes right after edk2-stable-202111 release. 
> Extend code freeze until these changes are committed.
> Require use of uncrustify tool before submitting patch review emails or PRs.
> The required version would be a formally released version  from the fork 
> maintained by Michael Kubacki until the changes can be upstreamed.
> https://dev.azure.com/projectmu/Uncrustify 
> <https://dev.azure.com/projectmu/Uncrustify>
> Add EDK II CI check to verify that all PRs submitted exactly match 
> uncrustified version.  Reject PRs that do not match exactly.
> Implement a git hook available that would automatically run uncristufy before 
> committing changes to a local branch of an edk2 repo.
>  
> Thanks,
>  
> Mike
>  
> From: Andrew Fish <af...@apple.com <mailto:af...@apple.com>> 
> Sent: Thursday, October 7, 2021 2:09 PM
> To: Marvin Häuser <mhaeu...@posteo.de <mailto:mhaeu...@posteo.de>>
> Cc: edk2-devel-groups-io <devel@edk2.groups.io 
> <mailto:devel@edk2.groups.io>>; Kinney, Michael D <michael.d.kin...@intel.com 
> <mailto:michael.d.kin...@intel.com>>; Leif Lindholm <l...@nuviainc.com 
> <mailto:l...@nuviainc.com>>; mikub...@linux.microsoft.com 
> <mailto:mikub...@linux.microsoft.com>; rebe...@nuviainc.com 
> <mailto:rebe...@nuviainc.com>; Michael Kubacki <michael.kuba...@microsoft.com 
> <mailto:michael.kuba...@microsoft.com>>; Bret Barkelew 
> <bret.barke...@microsoft.com <mailto:bret.barke...@microsoft.com>>
> Subject: Re: [edk2-devel] Progress on getting Uncrustify working for EDK2?
>  
>  
> 
> 
> 
> On Oct 7, 2021, at 1:43 PM, Marvin Häuser <mhaeu...@posteo.de 
> <mailto:mhaeu...@posteo.de>> wrote:
>  
> Hey Mike,
> Hey Andrew,
> 
> I'll just reply to both mails at once :)
> 
> On 07/10/2021 19:36, Andrew Fish wrote:
> 
> 
> 
> 
> 
> 
> On Oct 7, 2021, at 1:19 PM, Michael D Kinney <michael.d.kin...@intel.com 
> <mailto:michael.d.kin...@intel.com>> wrote:
> 
> Hi Marvin,
> 
> Some comments below.
> 
> Mike
> 
> 
> 
> -----Original Message-----
> From:devel@edk2.groups.io <mailto:devel@edk2.groups.io><devel@edk2.groups.io 
> <mailto:devel@edk2.groups.io>> On Behalf Of Marvin Häuser
> Sent: Thursday, October 7, 2021 11:31 AM
> To: Leif Lindholm <l...@nuviainc.com 
> <mailto:l...@nuviainc.com>>;devel@edk2.groups.io 
> <mailto:devel@edk2.groups.io>;mikub...@linux.microsoft.com 
> <mailto:mikub...@linux.microsoft.com>
> Cc:rebe...@nuviainc.com <mailto:rebe...@nuviainc.com>; Michael Kubacki 
> <michael.kuba...@microsoft.com <mailto:michael.kuba...@microsoft.com>>; Bret 
> Barkelew <bret.barke...@microsoft.com <mailto:bret.barke...@microsoft.com>>;
> Kinney, Michael D <michael.d.kin...@intel.com 
> <mailto:michael.d.kin...@intel.com>>
> Subject: Re: [edk2-devel] Progress on getting Uncrustify working for EDK2?
> 
> Good day,
> 
> +1, but while you're at it, can we have arguments not align to the
> function name...
> 
>   Status = Test (
>              a
>              );
> 
> ... but to the next natural indentation level?
> 
>   Status = Test (
>     a
>     );
> 
> Basically no IDE I have seen supports EDK II's style, and I wouldn't be
> keen on writing known-broken style to then rely on Uncrustify to fix it.
> 
> I also have heard some controversy regarding casts off-list, where some
> prefer no spaces after casts to stress the evaluation order, and some
> prefer spaces to have clearer visuals (as a cast *ideally* would be
> something rare that requires good justification). Just throwing that out
> there.
> 
> 
> For things unrelated to autoformat (so semi-offtopic) but still relevant
> to the coding spec:
> 
> 1. Allow STATIC functions (if the debugging concerns are still relevant,
> there could be another level of indirection, like RELEASE_STATIC)?
> 
> Debugging concerns are no longer relevant.  The suggestion in the BZ below
> is to remove the STATIC macro and allow EDK II sources to add 'static'
> to any functions it makes sense to use on.
> 
> https://bugzilla.tianocore.org/show_bug.cgi?id=1766 
> <https://bugzilla.tianocore.org/show_bug.cgi?id=1766>
> 
> Thanks! I'd keep STATIC actually just for the sake of not doing no-op changes 
> that do not really do anything and for consistency with CONST, but whatever 
> works really.
> 
> 
> 
> 
> 
> 
> 
> 2. Allow variable assignments on definition (basically non-static CONST
> variables are banned...)?
> 
> Are referring to use of pre-initialized CONST variables declared within
> a function?  I think Bret brought this topic up when implementing some
> unit tests and the suggestion to pass ECCC was to promote them to
> pre-initialized CONST global variables.
> 
> Yes.
> 
> 
> 
> 
> The challenges we have seen in the past with pre-initialized variables within
> a function is that they can cause compilers to inject use of memcpy() calls,
> especially if the variable being initialized on the stack is a structure.
> These cause build breaks today.
> 
> This issue is independent of CONST. I’m not sure a coding style tool is smart 
> enough to catch this generically? You need an understanding of C types to 
> know if the local variable assignment is going to trigger a memcpy().
> 
> What I’ve seen in the real world is the firmware compiles with -Os or LTO to 
> fit int he ROM for DEBUG and RELEASE, and the optimizer optimizes away the 
> call to memcpy. Then if you try to build NOOPT (or over ride the compiler 
> flags on an individual driver/lib) you fail to link as only the NOOPT build 
> injects the memcpy.
> 
> +1
> 
> 
> 
> 
> Thus I think the best way to enforce this rule is to compile a project NOOPT. 
> I’m trying to remember are there flags to built to tell it to compile and 
> skip the FD construction? Maybe we should advocate platforms add a NOOPT 
> build target that just compiles the code, but does not create the FD?
> 
> I know there were stability concerns with intrinsics in the past, but 
> memcpy() is in the standard, and the rest remained stable to my knowledge. 
> Maybe it's time to fix the issues at the root? Works for us:
> https://github.com/acidanthera/OpenCorePkg/tree/master/Library/OcCompilerIntrinsicsLib
>  
> <https://github.com/acidanthera/OpenCorePkg/tree/master/Library/OcCompilerIntrinsicsLib>
>  
> Marvin,
>  
> Good point. This would make the rule moot. So maybe just removing the 
> requirement would be the easiest long term fix. 
>  
> Other embedded projects I know of do this too, and as you point out the 
> compilers keep these APIs standard for folks the provide their own runtimes.
>  
> Thanks,
>  
> Andrew Fish
> 
> 
> 
> Best regards,
> Marvin
> 
> 
> 
> 
> Thanks,
> 
> Andrew Fish
> 
> 
> 
> 
> 
> 
> 
> 3. Allow variable declarations at any scope (I had some nasty shadowing
> bugs before, probably prohibit shadowing with warnings)?
> 
> By shadowing do you mean the declaration of the same variable name in
> multiple scoped within the same function?
> 
> 
> 
> 
> 4. Require that exactly all function declarations and all function
> definitions with no prior declaration must be documented (first
> direction is enforcing docs, second is prohibiting doc duplication, I've
> seen them go out-of-sync plenty of times)?
> 
> I agree that this can reduce duplication and sync issues.  The uncrustify
> tool being discussed here could not help clean this up or enforce this
> type of rule.  It is a good topic, but may need to be split out into its
> own thread.
> 
> 
> 
> 
> The latter bunch would not require any autoformat rules or reformatation
> of existing code, but would be target only new submissions in my
> opinion. Thoughts?
> 
> 
> Thanks for your efforts!
> 
> Best regards,
> Marvin
> 
> 
> Am 07.10.2021 um 12:48 schrieb Leif Lindholm:
> 
> 
> Hi Michael,
> 
> Apologies, I've owed you a response (promised off-list) for a while
> now.
> 
> First, let me say I hugely appreciate this effort. Apart from aligning
> the codebase(s), this will reduce manual reviewing effort
> substantially, as well as cutting down on number of rework cycles for
> developers.
> 
> Looking at the changes to (well, the comments in) uncrustify, this
> seems to be constrained to:
> - Newline after '(' for multi-line function calls.
> - Dealing with "(("/"))" for DEBUG macros.
> - Function pointer typedefs:
>   - typedef\nEFIAPI
>   - closing parentheses indentation
> 
> I don't think I've made any secret over the years that I am not a
> massive fan of the EDK2 coding style in general. So I think for any
> of its quirks that are substantial enough that they require not just
> custom configuration but actual new function added to existing code
> conformance tools, this would be an excellent point to sanitise the
> coding style instead.
> 
> Taking these in order:
> 
> Newline after '('
> -----------------
> I think we already reached a level of flexibility around this, where
> we don't actually enforce this (or single argument per
> line). Personally, I'd be happy to update the coding style as
> required instead.
> 
> DEBUG macro parentheses
> -----------------------
> How does uncrustify treat DEBUG macros without this modification?
> Do we start getting everything turned into multi-level indented
> multi-line statements without this change?
> 
> Function pointer typedefs:
> --------------------------
> I don't see that function pointer typedefs need to rigidly follow the
> same pattern as the declaration of functions implementing them. Could
> we update the coding style (if needed) instead?
> 
> Best Regards,
> 
> Leif
> 
> On Mon, Aug 16, 2021 at 16:00:38 -0400, Michael Kubacki wrote:
> 
> 
> The edk2 branch was created here:
> https://github.com/makubacki/edk2/tree/uncrustify_poc_2 
> <https://github.com/makubacki/edk2/tree/uncrustify_poc_2>
> 
> We have a Project Mu fork with custom changes to the Uncrustify tool to help
> comply with EDK II formatting here:
> https://dev.azure.com/projectmu/_git/Uncrustify 
> <https://dev.azure.com/projectmu/_git/Uncrustify>
> 
> The latest information about the status and how to experiment with the
> configuration file and the tool are in that fork:
> https://dev.azure.com/projectmu/Uncrustify/_wiki/wikis/Uncrustify.wiki/1/Project-Mu-(EDK-II)-Fork-Readme
>  
> <https://dev.azure.com/projectmu/Uncrustify/_wiki/wikis/Uncrustify.wiki/1/Project-Mu-(EDK-II)-Fork-Readme>
> 
> 
> 
> That said, I have also finished a CI plugin to run Uncrustify that should be
> ready soon to initially deploy in Project Mu. Before doing so, I am trying
> to settle on an initial configuration file that less strictly but more
> reliably formats the code than in the examples in those branches. For
> example, remove heuristics that when run against the same set of code
> multiple times can produce different results. An example would be a rule
> that reformats code because it exceeds a specified column width on one run
> but on the next run that reformatted code triggers a different rule to
> further align the code and so on. At least initially, some rules might be
> tweaked in a more conservative approach that can be tightened in the future.
> Once this configuration file is ready, we will baseline Project Mu code as
> an example and turn on the plugin. The CI plugin runs Uncrustify against
> modified files and if there's any changes, indicating a formatting
> deviation, the diff chunks are saved in a log so they can be viewed as a
> build artifact.
> 
> I am making progress on the updated config file and I should be able to post
> a "uncrustify_poc_3" branch soon with the results.
> 
> Regarding indentation, Marvin is right that Uncrustify cannot support edk2
> indentation style out-of-box. Some changes are made in that fork to handle
> the formatting. At this point, it can handle the indentation in the cases
> I've seen. Uncrustify does potentially give us the ability to massively
> deploy changes across the codebase in case a decision were made to change
> the style.
> 
> Thanks,
> Michael
> 
> On 8/16/2021 3:39 PM, Marvin Häuser wrote:
> 
> 
> Hey Rebecca,
> 
> I think even Uncrustify has issues with the EDK II indentation style.
> You might want to check the UEFI Talkbox Discord server, I had a brief
> chat with Michael about it there. I don't think realistically any tool
> supports EDK II's indentation style however, so I'd propose it is
> changed. This could be for new submissions only, or actually the entire
> codebase could be reformatted at once with a good tool setup. While this
> screws with git blame, the (to my understanding) decided on CRLF -> LF
> change does that anyway, so at least two evils could be dealt with in
> one go really.
> 
> Best regards,
> Marvin
> 
> On 16/08/2021 21:34, Rebecca Cran wrote:
> 
> 
> 
> cc devel@ .
> 
> On 8/16/21 1:33 PM, Rebecca Cran wrote:
> 
> 
> 
> I noticed a message on Twitter about an idea of using Uncrustify
> for EDK2 instead of the ECC tool, and came across https://www.mail- 
> <https://www.mail-/>
> archive.com/search?l=devel@edk2.groups.io&q=subject:%22Re%5C%3A+%5C%5Bedk2%5C-
>  
> <mailto:archive.com/search?l=devel@edk2.groups.io&q=subject:%22Re%5C%3A+%5C%5Bedk2%5C->
> devel%5C%5D+TianoCore+Community+Meeting+Minutes+%5C-+2%5C%2F4%22&o=newest&f=1
> 
> 
> .
> 
> I was wondering if there's been any progress on it that I could
> check out?
> 
> 
> Michael Kubacki: in that message, you said:
> 
> "I'm planning to put up a branch that we can use as a reference
> for a conversation around uncrustify in the next couple of
> weeks."
> 
> 
> Did you end up creating that branch, and if so could you provide
> a link to it please?
> 
> 
> --
> Rebecca Cran
> 
>  
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>  
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#83479): https://edk2.groups.io/g/devel/message/83479
Mute This Topic: https://groups.io/mt/84932137/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to