In this meeting, Liming Gao showed the progress of new CLANG tool chain, Hao Wu raised a SDMMC host controller customization requirement and potential solutions.
Details below. Please reply to this mail for any questions or comments.
1. LLVM/CLANG tool chain (BZ1603) - Liming Gao
- Existing tool chain: VS2015/2017 - Win, GCC5 - Linux, XCODE - Mac, CLANG38 - Linux
- New tool chain: CLANG(8) - Win/Linux/Mac
* LLD supports generating ELF/PE in all OSes.
* Status: met some troubles when directly generating PE.
- Tool chain name: CLANG8LLDELF or CLANG8ELF? -> CLANG8ELF.
The linker information can be documented in docs.
- Maybe a 3rd toolchain CLANG8 which generates default executable image format depending on OS?
- Always use ELF or PE as output instead of having two options otherwise may lose the benefit of using CLANG tool chain.
* Developers can choose which output to generate. they can always choose ELF or PE.
- Size impact?
* PE requires 4K section alignment, ELF requires 32-byte section alignment.
So PE when uncompressed needs more size.
* LTO (link optimization) is enabled.
* Will provide OVMF size data after the meeting.
- Status: CLANG8ELF builds of OVMF32/OVMF64/OVMF32PEI-64DXE can boot.
CLANG8PE builds of on OVMF32/32PEI-64DXE can boot, but that of OMVF64 cannot.
CLANG8PE fails to build NetworkPkg due to big local variable in CryptoPkg.
CLANGELF cannot generate HII resource section, similar issue exists in XCODE5. Felix can provide help on that.
- Hope CLANG static analyzer can be enabled in future.
* Some POC was done.
- If CLANG8 can generate DWARF/PDB debug symbols no matter the output executable format (ELF/PE) is, maybe it's worth
to investigate further in single output executable format direction.
2. Customization during SDMMD HC
- Parameters that need customization:
a. bus width
b. bus speed mode
d. clock freq
- SdMMcPciHc consumes SdMmcOverride(optional). Its interfaces Capability(), NotifyPhase() are not enough for the customizations.
* bus speed mode -> Capability() helps
* bus width -> Capability() doesn't help with 1 bit which cannot choose from 3 options.
* strength -> NoitfyPhase() doesn't help with absense of passthru.
* clock freq -> NO
- P1. NotifyPhase (GetOperatingParam) - preferred
- P2. New interface OperatingParameter()
- P3. New protocol SD_MMC_OPERATING_PARAMETER