最近接触到了 TinyCC (https://bellard.org/tcc/), 这是一个小巧的、开源、编译速度快的C编译器。
在 https://github.com/andreiw/tinycc/tree/mob 这里,有一个基于 TinyCC 支持编译UEFI Application的项目。这里介绍如何使用这个编译器编译生成 UEFI Shell Application。
第一步,下载上述代码。

第二步,生成 TinyCC UEFI 编译器。下载的 Package 中只有源代码,没有二进制的 EXE ,所以需要先进行编译。我这边使用 VS2019 进行编译,进入源代码 Win32 目录下:

特别注意需要对 build-tcc.bat进行修改,其中的-DONE_SOURCE=0需要使用引号:
%CC% -o tcc.exe ..\tcc.c libtcc.dll %D% “-DONE_SOURCE=0”
运行 build-tcc.bat -c cl -t 64_ 命令:

生成的x86_64-win32-tcc.exe 就是我们需要的编译器:

第三步,在 EDK2 中编译生成一个 EFI Application。
- 拷贝 x86_64-win32-tcc.exe 到edk2-stable202308根目录下
- 将如下代码命名为 Hello.c
#include <Uefi.h>
CHAR16 *gHello = L"Hello from a TinyCC compiled UEFI binary!\r\n";
EFI_STATUS EFIAPI
_start(EFI_HANDLE Handle,
EFI_SYSTEM_TABLE *SystemTable)
{
SystemTable->ConOut->OutputString(SystemTable->ConOut, gHello);
return EFI_SUCCESS;
}
3.直接打开一个 cmd 窗口(不需要 Vs2019)
4.编译命令如下
x86_64-win32-tcc -I MdePkg/Include -I MdePkg/Include/X64 hello.c -Wl,-subsystem=efiapp -nostdlib -o efitest.x64.efi -DMDE_CPU_EBC

5.编译后直接生成 efitest.x64.efi
第四步,在模拟器中测试生成的 EFI 文件,可以看到能够正常工作。

本文提到的完整代码可以在下面下载: