diff --git a/build_tools/blob.py b/build_tools/blob.py new file mode 100644 index 0000000000..3d93c45cc8 --- /dev/null +++ b/build_tools/blob.py @@ -0,0 +1,41 @@ +# Copyright 2021 Google, Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import array +import functools + +def bytesToCppArray(code, symbol, data): + ''' + Output an array of bytes to a code formatter as a c++ array declaration. + ''' + code('const std::uint8_t ${symbol}[] = {') + code.indent() + step = 16 + for i in range(0, len(data), step): + x = array.array('B', data[i:i+step]) + strs = map(lambda i: f'{i},', x) + code(functools.reduce(lambda x, y: x + y, strs)) + code.dedent() + code('};') diff --git a/site_scons/gem5_scons/builders/blob.py b/site_scons/gem5_scons/builders/blob.py index fe74fcdc7b..20d804a2e9 100644 --- a/site_scons/gem5_scons/builders/blob.py +++ b/site_scons/gem5_scons/builders/blob.py @@ -40,7 +40,7 @@ import os.path from gem5_scons import Transform, MakeAction -from gem5_scons.util import bytesToCppArray +from blob import bytesToCppArray from code_formatter import code_formatter diff --git a/site_scons/gem5_scons/util.py b/site_scons/gem5_scons/util.py index 6049fedab2..b62cc0164e 100644 --- a/site_scons/gem5_scons/util.py +++ b/site_scons/gem5_scons/util.py @@ -38,8 +38,6 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -import array -import functools import itertools import re import sys @@ -111,17 +109,3 @@ def compareVersions(v1, v2): if n1 > n2: return 1 return 0 - -def bytesToCppArray(code, symbol, data): - ''' - Output an array of bytes to a code formatter as a c++ array declaration. - ''' - code('const std::uint8_t ${symbol}[] = {') - code.indent() - step = 16 - for i in range(0, len(data), step): - x = array.array('B', data[i:i+step]) - strs = map(lambda i: f'{i},', x) - code(functools.reduce(lambda x, y: x + y, strs)) - code.dedent() - code('};') diff --git a/src/SConscript b/src/SConscript index 2b7cafbe6e..24acf400c9 100644 --- a/src/SConscript +++ b/src/SConscript @@ -54,7 +54,7 @@ import SCons from gem5_scons import Transform, warning, error, ToValue, FromValue from gem5_scons.sources import * -from gem5_scons.util import bytesToCppArray +from blob import bytesToCppArray Export(SourceFilter.factories)