diff --git a/pkgs/development/compilers/p4c/default.nix b/pkgs/development/compilers/p4c/default.nix new file mode 100644 index 000000000000..b3b34aa8e837 --- /dev/null +++ b/pkgs/development/compilers/p4c/default.nix @@ -0,0 +1,88 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, boehmgc +, bison +, flex +, protobuf +, gmp +, boost +, python3 +, doxygen +, graphviz +, libbpf +, libllvm +, enableDocumentation ? true +, enableBPF ? true +, enableDPDK ? true +, enableBMV2 ? true +, enableGraphBackend ? true +, enableP4Tests ? true +, enableGTests ? true +, enableMultithreading ? false +}: +let + toCMakeBoolean = v: if v then "ON" else "OFF"; +in +stdenv.mkDerivation rec { + pname = "p4c"; + version = "1.2.2.1"; + + src = fetchFromGitHub { + owner = "p4lang"; + repo = "p4c"; + rev = "v${version}"; + sha256 = "sha256-XIZ7Cm5zfr5XA+s0aSG1WwWHCPjAYv/YoBWTRaXi9rQ="; + fetchSubmodules = true; + }; + + postFetch = '' + rm -rf backends/ebpf/runtime/contrib/libbpf + rm -rf control-plane/p4runtime + ''; + + cmakeFlags = [ + "-DENABLE_BMV2=${toCMakeBoolean enableBMV2}" + "-DENABLE_EBPF=${toCMakeBoolean enableBPF}" + "-DENABLE_UBPF=${toCMakeBoolean enableBPF}" + "-DENABLE_DPDK=${toCMakeBoolean enableDPDK}" + "-DENABLE_P4C_GRAPHS=${toCMakeBoolean enableGraphBackend}" + "-DENABLE_P4TEST=${toCMakeBoolean enableP4Tests}" + "-DENABLE_DOCS=${toCMakeBoolean enableDocumentation}" + "-DENABLE_GC=ON" + "-DENABLE_GTESTS=${toCMakeBoolean enableGTests}" + "-DENABLE_PROTOBUF_STATIC=ON" + "-DENABLE_MULTITHREAD=${toCMakeBoolean enableMultithreading}" + "-DENABLE_GMP=ON" + ]; + + checkTarget = "check"; + + strictDeps = true; + + nativeBuildInputs = [ + bison + flex + cmake + python3 + ] + ++ lib.optional enableDocumentation [ doxygen graphviz ] + ++ lib.optional enableBPF [ libllvm libbpf ]; + + buildInputs = [ + protobuf + boost + boehmgc + gmp + flex + ]; + + meta = with lib; { + homepage = "https://github.com/p4lang/p4c"; + description = "Reference compiler for the P4 programming language"; + platforms = platforms.linux; + maintainers = with maintainers; [ raitobezarius ]; + license = licenses.asl20; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index caba6f8e7e8b..023272cfc55e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8768,6 +8768,8 @@ with pkgs; p3x-onenote = callPackage ../applications/office/p3x-onenote { }; + p4c = callPackage ../development/compilers/p4c { }; + p7zip = callPackage ../tools/archivers/p7zip { }; packagekit = callPackage ../tools/package-management/packagekit { nix = nixVersions.nix_2_6; };