Getting Started

Build and run your first UEFI application with the AXL SDK. No EDK2 source tree needed – just a C compiler and a linker.

Prerequisites

  • clang (14+) or GCC (cross-compiler for your target)

  • lld-link (LLVM linker, ships with clang)

  • QEMU + OVMF for testing (optional but recommended)

On Fedora/RHEL:

dnf install clang lld qemu-system-x86 edk2-ovmf

On Ubuntu/Debian:

apt install clang lld qemu-system-x86 ovmf

Install the SDK

Clone and build the SDK:

git clone https://github.com/aximcode/axl-sdk.git
cd axl-sdk
./scripts/install.sh --arch x64

This builds libaxl.a, packages headers, and installs the axl-cc compiler wrapper to out/bin/axl-cc. Add it to your PATH:

export PATH="$PWD/out/bin:$PATH"

Write a Hello World

Create hello.c:

#include <axl.h>

int main(int argc, char **argv) {
    axl_printf("Hello from UEFI!\n");
    return 0;
}

Standard C entry point. No UEFI types, no wide strings, no EFI_STATUS. Just #include <axl.h> and write C.

Build

axl-cc hello.c -o hello.efi

That’s it – one command, 11KB binary, zero external dependencies.

Run in QEMU

The run-qemu.sh script creates a FAT32 disk image, copies your EFI binary, and boots QEMU with OVMF:

./scripts/run-qemu.sh hello.efi

You should see Hello from UEFI! on the QEMU console.

Next Steps

All API documentation is generated from header comments. Include <axl.h> for everything, or individual headers like <axl/axl-json.h> for specific modules.