1
0
mirror of https://github.com/alliedmodders/metamod-source.git synced 2024-11-28 10:24:20 +01:00

Move bootstrap.pl to Python.

This also moves env var control back into the local build, so we don't
have to restart buildbot to change that.
This commit is contained in:
David Anderson 2023-10-12 21:34:41 -07:00
parent 9dd5144128
commit fc17601a96
3 changed files with 115 additions and 96 deletions

View File

@ -1,96 +0,0 @@
#!/usr/bin/perl
# vim: set ts=2 sw=2 tw=99 noet:
use strict;
use Cwd;
use File::Basename;
use File::Path;
my ($myself, $path) = fileparse($0);
chdir($path);
use FindBin;
use lib $FindBin::Bin;
require 'helpers.pm';
#Go back to tree root.
my ($result);
chdir(Build::PathFormat('../..'));
$result = `git submodule update --init --recursive`;
print "$result\n";
#Go back above build dir
chdir(Build::PathFormat('..'));
#Get the source path.
our ($root) = getcwd();
my $reconf = 0;
my $trigger_file = 'support/buildbot/trigger_full_rebuild';
if (-f $trigger_file) {
my $trigger_mtime = (stat $trigger_file)[9];
if (-f 'OUTPUT/.ambuild2/graph') {
my $graph_mtime = (stat 'OUTPUT/.ambuild2/graph')[9];
if ($trigger_mtime > $graph_mtime) {
print "Trigger time $trigger_mtime > $graph_mtime, cleaning objdir...\n";
rmtree('OUTPUT');
}
}
}
if (!(-f 'OUTPUT/.ambuild2/graph') || !(-f 'OUTPUT/.ambuild2/vars')) {
rmtree('OUTPUT');
mkdir('OUTPUT') or die("Failed to create output folder: $!\n");
}
chdir('OUTPUT');
my ($result, $argn);
$argn = $#ARGV + 1;
print "Attempting to reconfigure...\n";
my @conf_argv = (
'--enable-optimize',
'--breakpad-dump',
'--no-color',
'--symbol-files'
);
if ($^O =~ /darwin/) {
push(@conf_argv, '--hl2sdk-root=/Volumes/hgshare');
} elsif ($^O =~ /linux/) {
push(@conf_argv, '--hl2sdk-root=/hgshare');
} elsif ($^O =~ /MSWin/) {
push(@conf_argv, '--hl2sdk-root=H:\\');
}
push(@conf_argv, '--targets=x86,x86_64');
push(@conf_argv, '--sdks=all');
my $conf_args = join(' ', @conf_argv);
if ($argn > 0 && $^O !~ /MSWin/) {
$result = `CC=$ARGV[0] CXX=$ARGV[0] python3 ../build/configure.py $conf_args`;
} else {
if ($^O =~ /MSWin/) {
$result = `C:\\Python38\\Python.exe ..\\build\\configure.py $conf_args`;
} else {
$result = `CC=clang CXX=clang python3 ../build/configure.py $conf_args`;
}
}
print "$result\n";
if ($? != 0) {
die("Could not configure: $!\n");
}
sub IsNewer
{
my ($file, $time) = (@_);
my @s = stat($file);
my $mtime = $s[9];
return $mtime > $time;
}
exit(0);

View File

@ -0,0 +1,105 @@
# vim: set sw=4 sts=4 ts=4 sw=99 et:
from contextlib import contextmanager
import argparse
import json
import os
import platform
import shutil
import subprocess
@contextmanager
def Chdir(path):
old = os.getcwd()
os.chdir(path)
print('> cd {} # {}'.format(path, os.getcwd()))
try:
yield
finally:
os.chdir(old)
def run_shell(argv, env = None):
if type(argv) is str:
print('> {}'.format(argv))
shell = True
else:
print('> {}'.format(' '.join(argv)))
shell = False
try:
output = subprocess.check_output(argv, stderr = subprocess.STDOUT, env = env, shell = shell)
except subprocess.CalledProcessError as cpe:
if not shell:
print(cpe.output.decode('utf-8', 'ignore'))
raise
print(output.decode('utf-8', 'ignore'))
def output_needs_cleaning():
if not os.path.isdir('OUTPUT'):
return False
amb2_dir = os.path.join('OUTPUT', '.ambuild2')
if not os.path.isdir(os.path.join(amb2_dir, 'graph')):
return True
if not os.path.isdir(os.path.join(amb2_dir, 'vars')):
return True
return False
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--config', type = str, required = True,
help = 'Buildbot slave name')
parser.add_argument('--hl2sdk-root', type = str, required = True,
help = 'hl2sdk collection')
parser.add_argument('--python-cmd', type = str, required = True,
default = 'python3',
help = 'Python command')
args = parser.parse_args()
run_shell("git submodule update --init --recursive")
source = os.getcwd()
with open(os.path.join('support', 'buildbot', 'buildconfig.json'), 'rt') as fp:
config_root = json.load(fp)
config = config_root.get(args.config, {})
# Set build properties.
build_env = os.environ.copy()
for env_var in ['CC', 'CXX']:
if env_var not in config:
continue
build_env[env_var] = config[env_var]
if platform.system() == 'Windows':
hl2sdk_root = '/Volumes/hgshare'
python_cmd = "C:\\Python38\\Python.exe"
elif platform.system() == 'Linux':
hl2sdk_root = '/hgshare'
python_cmd = "python3"
elif platform.system() == 'Windows':
hl2sdk_root = 'H:\\'
python_cmd = "python3"
config_argv = [
args.python_cmd,
os.path.join(source, 'configure.py'),
'--enable-optimize',
'--breakpad-dump',
'--no-color',
'--symbol-files',
'--targets=x86,x86_64',
'--sdks=all',
'--out=OUTPUT',
'--hl2sdk-root={}'.format(args.hl2sdk_root),
]
print("Attempting to reconfigure...")
with Chdir('..'):
if output_needs_cleaning():
shutil.rmtree('OUTPUT')
if not os.path.isdir('OUTPUT'):
os.makedirs('OUTPUT')
run_shell(config_argv, env = build_env)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,10 @@
{
"debian8": {
"CC": "clang-3.8",
"CXX": "clang-3.8"
},
"debian11": {
"CC": "clang-13",
"CXX": "clang++-13"
}
}