Skip to content

Conversation

@randomizedcoder
Copy link
Contributor

This pull request is a refactor of the Nix, and adds some patches to Nix only to get it working. I tested this still builds on Ubuntu 24.04.

The nix build was crashing with segfaults due to differences in how ClangTool API behaves in Nix environments vs traditional Linux distros.

Add patches to fix two issues:

  • 01-nix-clang-system-includes.patch: ClangTool bypasses the Nix clang wrapper, missing -isystem flags for headers. Adds include paths from environment variables set by the Nix derivation.
  • 02-tentative-definition-null-check.patch: C tentative definitions (from XDP2_DECL_PROTO_TABLE macro) return hasInit()=true with void-type InitListExpr on Nix clang 18.1.8+, causing null pointer crash when getAs() returns nullptr. Adds null check to skip these.

Refactor the monolithic flake.nix (~1000 lines) into modular files:

  • nix/packages.nix: Package definitions (nativeBuildInputs, buildInputs, devTools)
  • nix/llvm.nix: LLVM/Clang configuration with wrapped llvm-config
  • nix/env-vars.nix: Environment variable exports
  • nix/devshell.nix: Development shell configuration
  • nix/derivation.nix: Package derivation for nix build
  • nix/shell-functions/: Modular shell functions (build, clean, configure, etc.)

Also:

  • Upgrade from pinned LLVM 18 to default LLVM (21.1.8)
  • Add BPF/XDP dev tools (bpftrace, bcc, perf, pahole, clang-tools)
  • Update documentation with patch details and toolchain versions

  The nix build was crashing with segfaults due to differences in how
  ClangTool API behaves in Nix environments vs traditional Linux distros.

  Add patches to fix two issues:
  - 01-nix-clang-system-includes.patch: ClangTool bypasses the Nix clang
    wrapper, missing -isystem flags for headers. Adds include paths from
    environment variables set by the Nix derivation.
  - 02-tentative-definition-null-check.patch: C tentative definitions
    (from XDP2_DECL_PROTO_TABLE macro) return hasInit()=true with void-type
    InitListExpr on Nix clang 18.1.8+, causing null pointer crash when
    getAs<RecordType>() returns nullptr. Adds null check to skip these.

  Refactor the monolithic flake.nix (~1000 lines) into modular files:
  - nix/packages.nix: Package definitions (nativeBuildInputs, buildInputs, devTools)
  - nix/llvm.nix: LLVM/Clang configuration with wrapped llvm-config
  - nix/env-vars.nix: Environment variable exports
  - nix/devshell.nix: Development shell configuration
  - nix/derivation.nix: Package derivation for nix build
  - nix/shell-functions/: Modular shell functions (build, clean, configure, etc.)

  Also:
  - Upgrade from pinned LLVM 18 to default LLVM (21.1.8)
  - Add BPF/XDP dev tools (bpftrace, bcc, perf, pahole, clang-tools)
  - Update documentation with patch details and toolchain versions
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