intel: genxml: compress all gen files into one
Combining all the files into a single string didn't make any difference in the size of the aubinator binary. With this change we now also embed gen4/4.5/5 descriptions, which increases the aubinator size by ~16Kb. v2 (Lionel): rebase makefiles Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
@@ -20,13 +20,11 @@
|
|||||||
# IN THE SOFTWARE.
|
# IN THE SOFTWARE.
|
||||||
|
|
||||||
BUILT_SOURCES += \
|
BUILT_SOURCES += \
|
||||||
$(GENXML_GENERATED_FILES) \
|
$(GENXML_GENERATED_FILES)
|
||||||
$(AUBINATOR_GENERATED_FILES)
|
|
||||||
|
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
$(GENXML_XML_FILES) \
|
$(GENXML_XML_FILES) \
|
||||||
$(GENXML_GENERATED_FILES) \
|
$(GENXML_GENERATED_FILES)
|
||||||
$(AUBINATOR_GENERATED_FILES)
|
|
||||||
|
|
||||||
SUFFIXES = _pack.h _xml.h .xml
|
SUFFIXES = _pack.h _xml.h .xml
|
||||||
|
|
||||||
@@ -36,11 +34,9 @@ $(GENXML_GENERATED_PACK_FILES): genxml/gen_pack_header.py
|
|||||||
$(MKDIR_GEN)
|
$(MKDIR_GEN)
|
||||||
$(PYTHON_GEN) $(srcdir)/genxml/gen_pack_header.py $< > $@ || ($(RM) $@; false)
|
$(PYTHON_GEN) $(srcdir)/genxml/gen_pack_header.py $< > $@ || ($(RM) $@; false)
|
||||||
|
|
||||||
$(AUBINATOR_GENERATED_FILES): genxml/gen_zipped_file.py
|
genxml/genX_xml.h: $(GENXML_XML_FILES) genxml/gen_zipped_file.py
|
||||||
|
|
||||||
.xml_xml.h:
|
|
||||||
$(MKDIR_GEN)
|
$(MKDIR_GEN)
|
||||||
$(AM_V_GEN) $(PYTHON2) $(srcdir)/genxml/gen_zipped_file.py $< > $@ || ($(RM) $@; false)
|
$(AM_V_GEN) $(PYTHON2) $(srcdir)/genxml/gen_zipped_file.py $(GENXML_XML_FILES) > $@ || ($(RM) $@; false)
|
||||||
|
|
||||||
genxml/genX_bits.h: genxml/gen_bits_header.py $(GENXML_XML_FILES)
|
genxml/genX_bits.h: genxml/gen_bits_header.py $(GENXML_XML_FILES)
|
||||||
$(MKDIR_GEN)
|
$(MKDIR_GEN)
|
||||||
|
@@ -131,14 +131,8 @@ GENXML_GENERATED_PACK_FILES = \
|
|||||||
|
|
||||||
GENXML_GENERATED_FILES = \
|
GENXML_GENERATED_FILES = \
|
||||||
$(GENXML_GENERATED_PACK_FILES) \
|
$(GENXML_GENERATED_PACK_FILES) \
|
||||||
genxml/genX_bits.h
|
genxml/genX_bits.h \
|
||||||
|
genxml/genX_xml.h
|
||||||
AUBINATOR_GENERATED_FILES = \
|
|
||||||
genxml/gen6_xml.h \
|
|
||||||
genxml/gen7_xml.h \
|
|
||||||
genxml/gen75_xml.h \
|
|
||||||
genxml/gen8_xml.h \
|
|
||||||
genxml/gen9_xml.h
|
|
||||||
|
|
||||||
ISL_FILES = \
|
ISL_FILES = \
|
||||||
isl/isl.c \
|
isl/isl.c \
|
||||||
|
@@ -34,11 +34,7 @@
|
|||||||
|
|
||||||
#include "gen_decoder.h"
|
#include "gen_decoder.h"
|
||||||
|
|
||||||
#include "genxml/gen6_xml.h"
|
#include "genxml/genX_xml.h"
|
||||||
#include "genxml/gen7_xml.h"
|
|
||||||
#include "genxml/gen75_xml.h"
|
|
||||||
#include "genxml/gen8_xml.h"
|
|
||||||
#include "genxml/gen9_xml.h"
|
|
||||||
|
|
||||||
#define XML_BUFFER_SIZE 4096
|
#define XML_BUFFER_SIZE 4096
|
||||||
|
|
||||||
@@ -481,35 +477,6 @@ devinfo_to_gen(const struct gen_device_info *devinfo)
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct {
|
|
||||||
int gen;
|
|
||||||
const uint8_t *data;
|
|
||||||
size_t data_length;
|
|
||||||
} gen_data[] = {
|
|
||||||
{ .gen = 60, .data = gen6_xml, .data_length = sizeof(gen6_xml) },
|
|
||||||
{ .gen = 70, .data = gen7_xml, .data_length = sizeof(gen7_xml) },
|
|
||||||
{ .gen = 75, .data = gen75_xml, .data_length = sizeof(gen75_xml) },
|
|
||||||
{ .gen = 80, .data = gen8_xml, .data_length = sizeof(gen8_xml) },
|
|
||||||
{ .gen = 90, .data = gen9_xml, .data_length = sizeof(gen9_xml) }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint8_t *
|
|
||||||
devinfo_to_xml_data(const struct gen_device_info *devinfo,
|
|
||||||
uint32_t *data_length)
|
|
||||||
{
|
|
||||||
int i, gen = devinfo_to_gen(devinfo);
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(gen_data); i++) {
|
|
||||||
if (gen_data[i].gen == gen) {
|
|
||||||
*data_length = gen_data[i].data_length;
|
|
||||||
return gen_data[i].data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unreachable("Unknown generation");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t zlib_inflate(const void *compressed_data,
|
static uint32_t zlib_inflate(const void *compressed_data,
|
||||||
uint32_t compressed_len,
|
uint32_t compressed_len,
|
||||||
void **out_ptr)
|
void **out_ptr)
|
||||||
@@ -563,9 +530,22 @@ gen_spec_load(const struct gen_device_info *devinfo)
|
|||||||
{
|
{
|
||||||
struct parser_context ctx;
|
struct parser_context ctx;
|
||||||
void *buf;
|
void *buf;
|
||||||
const void *zlib_data;
|
uint8_t *text_data;
|
||||||
void *text_data;
|
uint32_t text_offset = 0, text_length = 0, total_length;
|
||||||
uint32_t zlib_length = 0, text_length;
|
uint32_t gen_10 = devinfo_to_gen(devinfo);
|
||||||
|
|
||||||
|
for (int i = 0; i < ARRAY_SIZE(genxml_files_table); i++) {
|
||||||
|
if (genxml_files_table[i].gen_10 == gen_10) {
|
||||||
|
text_offset = genxml_files_table[i].offset;
|
||||||
|
text_length = genxml_files_table[i].length;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text_length == 0) {
|
||||||
|
fprintf(stderr, "unable to find gen (%u) data\n", gen_10);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
memset(&ctx, 0, sizeof ctx);
|
memset(&ctx, 0, sizeof ctx);
|
||||||
ctx.parser = XML_ParserCreate(NULL);
|
ctx.parser = XML_ParserCreate(NULL);
|
||||||
@@ -580,11 +560,13 @@ gen_spec_load(const struct gen_device_info *devinfo)
|
|||||||
|
|
||||||
ctx.spec = xzalloc(sizeof(*ctx.spec));
|
ctx.spec = xzalloc(sizeof(*ctx.spec));
|
||||||
|
|
||||||
zlib_data = devinfo_to_xml_data(devinfo, &zlib_length);
|
total_length = zlib_inflate(compress_genxmls,
|
||||||
text_length = zlib_inflate(zlib_data, zlib_length, &text_data);
|
sizeof(compress_genxmls),
|
||||||
|
(void **) &text_data);
|
||||||
|
assert(text_offset + text_length <= total_length);
|
||||||
|
|
||||||
buf = XML_GetBuffer(ctx.parser, text_length);
|
buf = XML_GetBuffer(ctx.parser, text_length);
|
||||||
memcpy(buf, text_data, text_length);
|
memcpy(buf, &text_data[text_offset], text_length);
|
||||||
|
|
||||||
if (XML_ParseBuffer(ctx.parser, text_length, true) == 0) {
|
if (XML_ParseBuffer(ctx.parser, text_length, true) == 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
2
src/intel/genxml/.gitignore
vendored
2
src/intel/genxml/.gitignore
vendored
@@ -1,3 +1,3 @@
|
|||||||
gen*_bits.h
|
gen*_bits.h
|
||||||
gen*_pack.h
|
gen*_pack.h
|
||||||
gen*_xml.h
|
genX_xml.h
|
||||||
|
@@ -26,22 +26,46 @@ from __future__ import print_function
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import zlib
|
import zlib
|
||||||
|
import xml.etree.cElementTree as et
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) < 2:
|
if len(sys.argv) < 2:
|
||||||
print("No input xml file specified")
|
print("No input xml file specified")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
with open(sys.argv[1]) as f:
|
compress = zlib.compressobj()
|
||||||
compressed_data = zlib.compress(f.read())
|
|
||||||
|
|
||||||
gen_name = os.path.splitext(os.path.basename(sys.argv[1]))[0]
|
print("static const struct {")
|
||||||
print("static const uint8_t %s_xml[] = {" % gen_name)
|
print(" uint32_t gen_10;")
|
||||||
|
print(" uint32_t offset;")
|
||||||
|
print(" uint32_t length;")
|
||||||
|
print("} genxml_files_table[] = {")
|
||||||
|
|
||||||
|
xml_offset = 0
|
||||||
|
compressed_data = ''
|
||||||
|
for i in range(1, len(sys.argv)):
|
||||||
|
filename = sys.argv[i]
|
||||||
|
xml = open(filename).read()
|
||||||
|
xml_length = len(xml)
|
||||||
|
root = et.fromstring(xml)
|
||||||
|
|
||||||
|
print(" { %i, %i, %i }," %
|
||||||
|
(int(float(root.attrib['gen']) * 10), xml_offset, xml_length))
|
||||||
|
|
||||||
|
compressed_data += compress.compress(xml)
|
||||||
|
xml_offset += xml_length
|
||||||
|
|
||||||
|
print("};")
|
||||||
|
|
||||||
|
compressed_data += compress.flush()
|
||||||
|
|
||||||
|
print("")
|
||||||
|
print("static const uint8_t compress_genxmls[] = {")
|
||||||
print(" ", end='')
|
print(" ", end='')
|
||||||
|
|
||||||
for i, c in enumerate(compressed_data, start=1):
|
for i, c in enumerate(compressed_data, start=1):
|
||||||
print("0x%.2x, " % ord(c), end='\n ' if not i % 12 else '')
|
print("0x%.2x, " % ord(c), end='\n ' if not i % 12 else '')
|
||||||
print('\n};')
|
print('\n};')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
Reference in New Issue
Block a user