@@ -7,15 +7,29 @@
import sys
import tempfile
-_, tmp_root, ar, archive, output, *pmdinfogen = sys.argv
+_, tmp_root, archiver, archive, output, *pmdinfogen = sys.argv
with tempfile.TemporaryDirectory(dir=tmp_root) as temp:
paths = []
- for name in subprocess.run([ar, "t", archive], stdout=subprocess.PIPE,
- check=True).stdout.decode().splitlines():
+ if archiver == "lib":
+ archiver_options = ["/LIST", "/NOLOGO"]
+ else:
+ archiver_options = ["t"]
+ for name in (
+ subprocess.run(
+ [archiver] + archiver_options + [archive],
+ stdout=subprocess.PIPE,
+ check=True,
+ )
+ .stdout.decode()
+ .splitlines()
+ ):
if os.path.exists(name):
paths.append(name)
else:
- subprocess.run([ar, "x", os.path.abspath(archive), name],
- check=True, cwd=temp)
+ if archiver == "lib":
+ run_args = [archiver, f"/EXTRACT:{name}", os.path.abspath(archive)]
+ else:
+ run_args = [archiver, "x", os.path.abspath(archive), name]
+ subprocess.run(run_args, check=True, cwd=temp)
paths.append(os.path.join(temp, name))
subprocess.run(pmdinfogen + paths + [output], check=True)
@@ -37,7 +37,9 @@ install_data([
pmdinfo = py3 + files('gen-pmdinfo-cfile.py') + [meson.current_build_dir()]
pmdinfogen = py3 + files('pmdinfogen.py')
if host_machine.system() == 'windows'
- if cc.get_id() == 'gcc'
+ if cc.get_id() == 'msvc'
+ pmdinfo += 'lib'
+ elif cc.get_id() == 'gcc'
pmdinfo += 'ar'
else
pmdinfo += 'llvm-ar'
@@ -87,7 +87,7 @@ def get_value(self, offset, size):
@property
def string_value(self):
value = self._symbol.get_value(0)
- return coff.decode_asciiz(value) if value else ''
+ return coff.decode_asciiz(value) if value else ""
class COFFImage:
@@ -192,7 +192,7 @@ def dump(self, file):
dumped = json.dumps(self.__dict__)
escaped = dumped.replace('"', '\\"')
print(
- 'const char %s_pmd_info[] __attribute__((used)) = "PMD_INFO_STRING= %s";'
+ 'RTE_INCLUDE(const char, %s_pmd_info)[] = "PMD_INFO_STRING= %s";'
% (self.name, escaped),
file=file,
)
@@ -215,7 +215,7 @@ def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("format", help="object file format, 'elf' or 'coff'")
parser.add_argument(
- "input", nargs='+', help="input object file path or '-' for stdin"
+ "input", nargs="+", help="input object file path or '-' for stdin"
)
parser.add_argument("output", help="output C file path or '-' for stdout")
return parser.parse_args()
@@ -252,13 +252,14 @@ def open_output(path):
def write_header(output):
output.write(
- "static __attribute__((unused)) const char *generator = \"%s\";\n" % sys.argv[0]
+ "#include <rte_common.h>\n"
+ 'static __rte_unused const char *generator = "%s";\n' % sys.argv[0]
)
def main():
args = parse_args()
- if args.input.count('-') > 1:
+ if args.input.count("-") > 1:
raise Exception("'-' input cannot be used multiple times")
if args.format == "elf" and "ELFFile" not in globals():
raise Exception("elftools module not found")