build: Report gcc and binutils versions in debug log
Attempt to extract the gcc and binutils versions. Report that information in the debug log. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
a6c877401b
commit
efd70a5006
4
Makefile
4
Makefile
|
@ -158,7 +158,7 @@ $(OUT)romlayout.o: src/romlayout.S $(OUT)autoconf.h $(OUT)asm-offsets.h
|
|||
|
||||
$(OUT)romlayout16.lds: $(OUT)ccode32flat.o $(OUT)code32seg.o $(OUT)ccode16.o $(OUT)romlayout.o src/version.c scripts/layoutrom.py scripts/buildversion.py
|
||||
@echo " Building ld scripts"
|
||||
$(Q)$(PYTHON) ./scripts/buildversion.py -e "$(EXTRAVERSION)" $(OUT)autoversion.h
|
||||
$(Q)$(PYTHON) ./scripts/buildversion.py -e "$(EXTRAVERSION)" -t "$(CC);$(AS);$(LD);$(OBJCOPY);$(OBJDUMP);$(STRIP)" $(OUT)autoversion.h
|
||||
$(Q)$(CC) $(CFLAGS32FLAT) -c src/version.c -o $(OUT)version.o
|
||||
$(Q)$(LD) $(LD32BIT_FLAG) -r $(OUT)ccode32flat.o $(OUT)version.o -o $(OUT)code32flat.o
|
||||
$(Q)$(LD) $(LD32BIT_FLAG) -r $(OUT)ccode16.o $(OUT)romlayout.o -o $(OUT)code16.o
|
||||
|
@ -230,7 +230,7 @@ $(OUT)vgaentry.o: vgasrc/vgaentry.S $(OUT)autoconf.h $(OUT)asm-offsets.h
|
|||
|
||||
$(OUT)vgarom.o: $(OUT)vgaccode16.o $(OUT)vgaentry.o $(OUT)vgasrc/vgalayout.lds vgasrc/vgaversion.c scripts/buildversion.py
|
||||
@echo " Linking $@"
|
||||
$(Q)$(PYTHON) ./scripts/buildversion.py -e "$(EXTRAVERSION)" $(OUT)autovgaversion.h
|
||||
$(Q)$(PYTHON) ./scripts/buildversion.py -e "$(EXTRAVERSION)" -t "$(CC);$(AS);$(LD);$(OBJCOPY);$(OBJDUMP);$(STRIP)" $(OUT)autovgaversion.h
|
||||
$(Q)$(CC) $(CFLAGS16) -c vgasrc/vgaversion.c -o $(OUT)vgaversion.o
|
||||
$(Q)$(LD) --gc-sections -T $(OUT)vgasrc/vgalayout.lds $(OUT)vgaccode16.o $(OUT)vgaentry.o $(OUT)vgaversion.o -o $@
|
||||
|
||||
|
|
|
@ -4,11 +4,12 @@
|
|||
# Copyright (C) 2015 Kevin O'Connor <kevin@koconnor.net>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
import sys, os, subprocess, time, socket, optparse
|
||||
import sys, os, subprocess, time, socket, optparse, re
|
||||
|
||||
VERSION_FORMAT = """
|
||||
/* DO NOT EDIT! This is an autogenerated file. See scripts/buildversion.py. */
|
||||
#define BUILD_VERSION "%s"
|
||||
#define BUILD_TOOLS "%s"
|
||||
"""
|
||||
|
||||
# Obtain version info from "git" program
|
||||
|
@ -35,23 +36,61 @@ def file_version():
|
|||
return ver
|
||||
|
||||
# Generate an output file with the version information
|
||||
def write_version(outfile, version):
|
||||
def write_version(outfile, version, toolstr):
|
||||
sys.stdout.write("Version: %s\n" % (version,))
|
||||
f = open(outfile, 'w')
|
||||
f.write(VERSION_FORMAT % (version,))
|
||||
f.write(VERSION_FORMAT % (version, toolstr))
|
||||
f.close()
|
||||
|
||||
re_gcc = re.compile(r'^(?P<prog>.*) \(GCC\) (?P<version>.*)$')
|
||||
re_binutils = re.compile(r'^GNU (?P<prog>.*) version (?P<version>.*)$')
|
||||
|
||||
# Run "tool --version" for each specified tool and extract versions
|
||||
def tool_versions(tools):
|
||||
tools = [t.strip() for t in tools.split(';')]
|
||||
gcc = binutils = ""
|
||||
success = 0
|
||||
for tool in tools:
|
||||
try:
|
||||
ver = subprocess.check_output([tool, '--version']).decode()
|
||||
except:
|
||||
continue
|
||||
ver = ver.split('\n')[0]
|
||||
m = re_gcc.match(ver)
|
||||
if m:
|
||||
ver = m.group('version')
|
||||
if gcc and gcc != ver:
|
||||
gcc = "mixed"
|
||||
continue
|
||||
gcc = ver
|
||||
success += 1
|
||||
continue
|
||||
m = re_binutils.match(ver)
|
||||
if m:
|
||||
ver = m.group('version')
|
||||
if binutils and binutils != ver:
|
||||
binutils = "mixed"
|
||||
continue
|
||||
binutils = ver
|
||||
success += 1
|
||||
cleanbuild = binutils and gcc and success == len(tools)
|
||||
return cleanbuild, "gcc: %s binutils: %s" % (gcc, binutils)
|
||||
|
||||
def main():
|
||||
usage = "%prog [options] <outputheader.h>"
|
||||
opts = optparse.OptionParser(usage)
|
||||
opts.add_option("-e", "--extra", dest="extra", default="",
|
||||
help="extra version string to append to version")
|
||||
opts.add_option("-t", "--tools", dest="tools", default="",
|
||||
help="list of build programs to extra version from")
|
||||
|
||||
options, args = opts.parse_args()
|
||||
if len(args) != 1:
|
||||
opts.error("Incorrect arguments")
|
||||
outfile = args[0]
|
||||
|
||||
cleanbuild, toolstr = tool_versions(options.tools)
|
||||
|
||||
ver = git_version()
|
||||
if not ver:
|
||||
ver = file_version()
|
||||
|
@ -60,7 +99,7 @@ def main():
|
|||
btime = time.strftime("%Y%m%d_%H%M%S")
|
||||
hostname = socket.gethostname()
|
||||
ver = "%s-%s-%s%s" % (ver, btime, hostname, options.extra)
|
||||
write_version(outfile, ver)
|
||||
write_version(outfile, ver, toolstr)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
|
@ -30,6 +30,7 @@ void
|
|||
debug_banner(void)
|
||||
{
|
||||
dprintf(1, "SeaBIOS (version %s)\n", VERSION);
|
||||
dprintf(1, "BUILD: %s\n", BUILDINFO);
|
||||
}
|
||||
|
||||
// Write a character to debug port(s).
|
||||
|
|
|
@ -236,6 +236,6 @@ void vgahook_setup(struct pci_device *pci);
|
|||
|
||||
|
||||
// version (auto generated file out/version.c)
|
||||
extern const char VERSION[];
|
||||
extern const char VERSION[], BUILDINFO[];
|
||||
|
||||
#endif // util.h
|
||||
|
|
|
@ -2,3 +2,4 @@
|
|||
#include "autoversion.h"
|
||||
|
||||
char VERSION[] = BUILD_VERSION;
|
||||
char BUILDINFO[] = BUILD_TOOLS;
|
||||
|
|
|
@ -150,6 +150,7 @@ vga_post(struct bregs *regs)
|
|||
{
|
||||
serial_debug_preinit();
|
||||
dprintf(1, "Start SeaVGABIOS (version %s)\n", VERSION);
|
||||
dprintf(1, "VGABUILD: %s\n", BUILDINFO);
|
||||
debug_enter(regs, DEBUG_VGA_POST);
|
||||
|
||||
if (CONFIG_VGA_PCI && !GET_GLOBAL(HaveRunInit)) {
|
||||
|
|
|
@ -3,3 +3,4 @@
|
|||
#include "types.h"
|
||||
|
||||
char VERSION[] VAR16 = BUILD_VERSION;
|
||||
char BUILDINFO[] VAR16 = BUILD_TOOLS;
|
||||
|
|
Loading…
Reference in New Issue