nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 cmake,
3 lib,
4 stdenv,
5 protobuf,
6 python3,
7 src,
8 version,
9 enableMalloc,
10 noPackedStructs,
11 maxRequiredFields,
12 field32bit,
13 noErrmsg,
14 bufferOnly,
15 systemHeader,
16 without64bit,
17 encodeArraysUnpacked,
18 convertDoubleFloat,
19 validateUtf8,
20 littleEndian8bit,
21 c99StaticAssert,
22 noStaticAssert,
23}:
24
25stdenv.mkDerivation {
26 pname = "nanopb-runtime";
27 inherit src version;
28
29 nativeBuildInputs = [
30 cmake
31 protobuf
32 python3
33 ];
34
35 patchPhase =
36 let
37 compile_definitions = target: ''
38 target_compile_definitions(${target}
39 PUBLIC
40 ${lib.concatStringsSep "\n\t" (
41 map (x: "PB_${x.flag}") (
42 builtins.filter (x: x.cond) [
43 {
44 cond = enableMalloc;
45 flag = "ENABLE_MALLOC=1";
46 }
47 {
48 cond = noPackedStructs;
49 flag = "NO_PACKED_STRUCTS=1";
50 }
51 {
52 cond = maxRequiredFields != null;
53 flag = "MAX_REQUIRED_FIELDS=${maxRequiredFields}";
54 }
55 {
56 cond = field32bit;
57 flag = "FIELD_32BIT=1";
58 }
59 {
60 cond = noErrmsg;
61 flag = "NO_ERRMSG=1";
62 }
63 {
64 cond = bufferOnly;
65 flag = "BUFFER_ONLY=1";
66 }
67 {
68 cond = systemHeader != null;
69 flag = "SYSTEM_HEADER=${systemHeader}";
70 }
71 {
72 cond = without64bit;
73 flag = "WITHOUT_64BIT=1";
74 }
75 {
76 cond = encodeArraysUnpacked;
77 flag = "ENCODE_ARRAYS_UNPACKED=1";
78 }
79 {
80 cond = convertDoubleFloat;
81 flag = "CONVERT_DOUBLE_FLOAT=1";
82 }
83 {
84 cond = validateUtf8;
85 flag = "VALIDATE_UTF8=1";
86 }
87 {
88 cond = littleEndian8bit;
89 flag = "LITTLE_ENDIAN_8BIT=1";
90 }
91 {
92 cond = c99StaticAssert;
93 flag = "C99_STATIC_ASSERT=1";
94 }
95 {
96 cond = noStaticAssert;
97 flag = "NO_STATIC_ASSERT=1";
98 }
99 ]
100 )
101 )}
102 )
103 '';
104 in
105 ''
106 cat << EOF >> CMakeLists.txt
107 ${compile_definitions "protobuf-nanopb"}
108 ${compile_definitions "protobuf-nanopb-static"}
109 EOF
110 '';
111
112 cmakeFlags = [
113 "-DBUILD_SHARED_LIBS=ON"
114 "-DBUILD_STATIC_LIBS=ON"
115 "-Dnanopb_BUILD_GENERATOR=OFF"
116 "-Dnanopb_BUILD_RUNTIME=ON"
117 ];
118}