Skip to content

Initial support for compiling natively on macOS#131

Open
caxu-rh wants to merge 1 commit into
libkrun:mainfrom
caxu-rh:macos-native-build
Open

Initial support for compiling natively on macOS#131
caxu-rh wants to merge 1 commit into
libkrun:mainfrom
caxu-rh:macos-native-build

Conversation

@caxu-rh
Copy link
Copy Markdown

@caxu-rh caxu-rh commented Jun 4, 2026

  • Introduce a Makefile variable MACOS_BUILDER. Default is to still use the krunvm-based approach; set MACOS_BUILDER to native to use the new native compilation approach.
  • Default to an LLVM-based toolchain when compiling natively on macOS. Allow the user to set the basename of tools. Users can also set their PATH as needed to prioritize GNU variants of tools, which is needed for e.g. sed, tar.
  • Vendor elf.h (derived from GNU libc), byteswap.h, endian.h, which are not available on macOS and are needed to compile the Linux kernel.
    • Open to suggestions if we prefer to source these from somewhere else.
  • The Linux kernel build process expects a case-sensitive file system.
    • The GitHub Actions workflow will handle this in CI; also provided instructions in the README.

Apart from vendoring the missing host headers above and adjusting the HOSTCFLAGS due to macOS also defining a conflicting uuid_t, there wasn't any patching needed on the kernel source. There are still some warnings along the way; I think there may be some downstream patches available which may not be backported to the 6.12 branch (or were submitted but never accepted upstream at all). Not sure how much we care about the warnings.

- Introduce a Makefile variable `MACOS_BUILDER`. Default is to still
  use the krunvm-based approach; set `MACOS_BUILDER` to `native` to
  use the new native compilation approach.
- Default to an LLVM-based toolchain when compiling natively on macOS.
  Allow the user to set the basename of tools. Users can also set
  their `PATH` as needed to prioritize GNU variants of tools, which
  is needed for e.g. sed, tar.
- Vendor `elf.h` (derived from GNU libc), `byteswap.h`, `endian.h`,
  which are not available on macOS and are needed to compile the
  Linux kernel.
- The Linux kernel build process expects a case-sensitive file system.

Signed-off-by: Caleb Xu <caxu@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant