Merge pull request #224 from saleemrashid/nem-mosaics-build-time

Generate nem_mosaics.[ch] at build time
pull/25/head
Pavol Rusnak 7 years ago committed by GitHub
commit 08e0a31b62

@ -8,26 +8,29 @@ addons:
- build-essential
- gcc-arm-none-eabi
- libnewlib-arm-none-eabi
- protobuf-compiler
- libprotobuf-dev
- python-protobuf
env:
global:
- MAKEFLAGS=-j2
- PROTOBUF_VERSION=3.4.0
matrix:
- DEBUG_LINK=0 FASTFLASH=0
- DEBUG_LINK=1 FASTFLASH=0
- DEBUG_LINK=0 FASTFLASH=1
- DEBUG_LINK=1 FASTFLASH=1
install:
- curl -LO "https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protoc-${PROTOBUF_VERSION}-linux-x86_64.zip"
- unzip "protoc-${PROTOBUF_VERSION}-linux-x86_64.zip" -d protoc
- export PATH="$(pwd)/protoc/bin:$PATH"
- pip2 install --user "protobuf==${PROTOBUF_VERSION}"
script:
- make -C vendor/libopencm3 lib/stm32/f2
- make -C vendor/nanopb/generator/proto
- make
- make -C bootloader
- make -C fastflash
- sed -i '/, deprecated = true/d' firmware/protob/messages.proto # protobuf 2.5 compatibility :-/
- make -C firmware/protob
- make -C firmware
- make -C demo

@ -1,2 +1,4 @@
coins_array.h
coins_count.h
nem_mosaics.[ch]

@ -105,6 +105,8 @@ bootloader.o: ../fastflash/bootloader.bin
coins.c crypto.c fsm.c transaction.c: coins_count.h
coins.c: coins_array.h
nem2.c layout2.c: nem_mosaics.h
#################
# Code Generation
coins_count.h: coins-gen.py coins.json
@ -113,5 +115,9 @@ coins_count.h: coins-gen.py coins.json
coins_array.h: coins-gen.py coins.json
./$< array > $@
nem_mosaics.c nem_mosaics.h: nem_mosaics.py nem_mosaics.json
./$<
clean::
rm -f coins_count.h coins_array.h
rm -f nem_mosaics.c nem_mosaics.h

@ -1,7 +1,7 @@
/*
* This file is part of the TREZOR project.
*
* Copyright (C) 2017 Saleem Rashid <dev@saleemrashid.com>
* Copyright (C) 2017 Saleem Rashid <trezor@saleemrashid.com>
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by

@ -1,7 +1,7 @@
/*
* This file is part of the TREZOR project.
*
* Copyright (C) 2017 Saleem Rashid <dev@saleemrashid.com>
* Copyright (C) 2017 Saleem Rashid <trezor@saleemrashid.com>
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by

@ -1,104 +0,0 @@
// This file is automatically generated by nem_mosaics.py -- DO NOT EDIT!
#include "nem_mosaics.h"
const NEMMosaicDefinition NEM_MOSAIC_DEFINITIONS[NEM_MOSAIC_DEFINITIONS_COUNT] = {{
.has_name = true,
.name = "XEM",
.has_ticker = true,
.ticker = " XEM",
.has_namespace = true,
.namespace = "nem",
.has_mosaic = true,
.mosaic = "xem",
.has_divisibility = true,
.divisibility = 6,
},
{
.has_name = true,
.name = "DIMCOIN",
.has_ticker = true,
.ticker = " DIM",
.has_namespace = true,
.namespace = "dim",
.has_mosaic = true,
.mosaic = "coin",
.has_divisibility = true,
.divisibility = 6,
.has_levy = true,
.levy = NEMMosaicLevy_MosaicLevy_Percentile,
.has_fee = true,
.fee = 10,
.has_levy_namespace = true,
.levy_namespace = "dim",
.has_levy_mosaic = true,
.levy_mosaic = "coin",
.networks_count = 1,
.networks = { 104 },
},
{
.has_name = true,
.name = "DIM TOKEN",
.has_ticker = true,
.ticker = " DIMTOK",
.has_namespace = true,
.namespace = "dim",
.has_mosaic = true,
.mosaic = "token",
.has_divisibility = true,
.divisibility = 6,
.networks_count = 1,
.networks = { 104 },
},
{
.has_name = true,
.name = "Breeze Token",
.has_ticker = true,
.ticker = " BREEZE",
.has_namespace = true,
.namespace = "breeze",
.has_mosaic = true,
.mosaic = "breeze-token",
.has_divisibility = true,
.divisibility = 0,
.networks_count = 1,
.networks = { 104 },
},
{
.has_name = true,
.name = "PacNEM Game Credits",
.has_ticker = true,
.ticker = " PAC:HRT",
.has_namespace = true,
.namespace = "pacnem",
.has_mosaic = true,
.mosaic = "heart",
.has_divisibility = true,
.divisibility = 0,
.networks_count = 1,
.networks = { 104 },
},
{
.has_name = true,
.name = "PacNEM Score Tokens",
.has_ticker = true,
.ticker = " PAC:CHS",
.has_namespace = true,
.namespace = "pacnem",
.has_mosaic = true,
.mosaic = "cheese",
.has_divisibility = true,
.divisibility = 6,
.has_levy = true,
.levy = NEMMosaicLevy_MosaicLevy_Percentile,
.has_fee = true,
.fee = 100,
.has_levy_namespace = true,
.levy_namespace = "nem",
.has_levy_mosaic = true,
.levy_mosaic = "xem",
.networks_count = 1,
.networks = { 104 },
}};
const NEMMosaicDefinition *NEM_MOSAIC_DEFINITION_XEM = NEM_MOSAIC_DEFINITIONS;

@ -1,13 +0,0 @@
// This file is automatically generated by nem_mosaics.py -- DO NOT EDIT!
#ifndef __NEM_MOSAICS_H__
#define __NEM_MOSAICS_H__
#include "types.pb.h"
#define NEM_MOSAIC_DEFINITIONS_COUNT (6)
extern const NEMMosaicDefinition NEM_MOSAIC_DEFINITIONS[NEM_MOSAIC_DEFINITIONS_COUNT];
extern const NEMMosaicDefinition *NEM_MOSAIC_DEFINITION_XEM;
#endif

@ -1,8 +1,13 @@
#!/usr/bin/env python3
import json, os
#!/usr/bin/env python2
import json, os, sys
import collections, numbers
from google.protobuf import json_format
from itertools import chain
import protob.types_pb2 as types
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "protob"))
import types_pb2 as types
HEADER_TEMPLATE = """
// This file is automatically generated by nem_mosaics.py -- DO NOT EDIT!
@ -31,13 +36,13 @@ const NEMMosaicDefinition *NEM_MOSAIC_DEFINITION_XEM = NEM_MOSAIC_DEFINITIONS;
""".lstrip()
def format_primitive(value):
if type(value) is bool:
if isinstance(value, bool):
return ("false", "true")[value]
elif type(value) in (int, float):
elif isinstance(value, numbers.Number):
return str(value)
elif type(value) is str:
elif isinstance(value, basestring):
return json.dumps(value)
elif type(value) is list:
elif isinstance(value, collections.Sequence):
return "{ " + ", ".join(
format_primitive(item) for item in value
) + " }"
@ -61,14 +66,14 @@ def format_field(field, value):
return format_primitive(value)
def field_to_meta(field, value):
if hasattr(value, "_values"):
return ("{}_count".format(field.name), format_primitive(len(value._values)))
if field.label == field.LABEL_REPEATED:
return ("{}_count".format(field.name), format_primitive(len(value)))
else:
return ("has_{}".format(field.name), format_primitive(True))
def message_to_struct(_message, proto):
message = json_format.ParseDict(_message, proto())
return dict(chain.from_iterable(
return collections.OrderedDict(chain.from_iterable(
(
field_to_meta(field, value),
(field.name, format_field(field, value)),

Loading…
Cancel
Save