diff options
Diffstat (limited to 'pkgs/by-name/na/nanopb/runtime.nix')
-rw-r--r-- | pkgs/by-name/na/nanopb/runtime.nix | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/pkgs/by-name/na/nanopb/runtime.nix b/pkgs/by-name/na/nanopb/runtime.nix new file mode 100644 index 0000000000000..2af7d2cedd5d7 --- /dev/null +++ b/pkgs/by-name/na/nanopb/runtime.nix @@ -0,0 +1,69 @@ +{ cmake +, lib +, stdenv +, protobuf +, python3 +, src +, version +, enableMalloc +, noPackedStructs +, maxRequiredFields +, field32bit +, noErrmsg +, bufferOnly +, systemHeader +, without64bit +, encodeArraysUnpacked +, convertDoubleFloat +, validateUtf8 +, littleEndian8bit +, c99StaticAssert +, noStaticAssert +}: + +stdenv.mkDerivation + ({ + pname = "nanopb-runtime"; + inherit src version; + + nativeBuildInputs = [ cmake protobuf python3 ]; + + patchPhase = + let + compile_definitions = target: '' + target_compile_definitions(${target} + PUBLIC + ${lib.concatStringsSep "\n\t" (map (x: "PB_${x.flag}") + (builtins.filter (x: x.cond) [ + { cond = enableMalloc; flag = "ENABLE_MALLOC=1"; } + { cond = noPackedStructs; flag = "NO_PACKED_STRUCTS=1"; } + { cond = maxRequiredFields != null; flag = "MAX_REQUIRED_FIELDS=${maxRequiredFields}"; } + { cond = field32bit; flag = "FIELD_32BIT=1"; } + { cond = noErrmsg; flag = "NO_ERRMSG=1"; } + { cond = bufferOnly; flag = "BUFFER_ONLY=1"; } + { cond = systemHeader != null; flag = "SYSTEM_HEADER=${systemHeader}"; } + { cond = without64bit; flag = "WITHOUT_64BIT=1"; } + { cond = encodeArraysUnpacked; flag = "ENCODE_ARRAYS_UNPACKED=1"; } + { cond = convertDoubleFloat; flag = "CONVERT_DOUBLE_FLOAT=1"; } + { cond = validateUtf8; flag = "VALIDATE_UTF8=1"; } + { cond = littleEndian8bit; flag = "LITTLE_ENDIAN_8BIT=1"; } + { cond = c99StaticAssert; flag = "C99_STATIC_ASSERT=1"; } + { cond = noStaticAssert; flag = "NO_STATIC_ASSERT=1"; } + ]))} + ) + ''; + in + '' + cat << EOF >> CMakeLists.txt + ${compile_definitions "protobuf-nanopb"} + ${compile_definitions "protobuf-nanopb-static"} + EOF + ''; + + cmakeFlags = [ + "-DBUILD_SHARED_LIBS=ON" + "-DBUILD_STATIC_LIBS=ON" + "-Dnanopb_BUILD_GENERATOR=OFF" + "-Dnanopb_BUILD_RUNTIME=ON" + ]; + }) |