98eb3e9ef5
GitOrigin-RevId: 00d80d13810dbfea8ab4ed1009b09100cca86ba8
69 lines
2 KiB
Nix
69 lines
2 KiB
Nix
{ 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"
|
|
];
|
|
})
|