about summary refs log tree commit diff
path: root/pkgs/by-name/na/nanopb/runtime.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/na/nanopb/runtime.nix')
-rw-r--r--pkgs/by-name/na/nanopb/runtime.nix69
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"
+    ];
+  })