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:
parent
9dd5144128
commit
fc17601a96
@ -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);
|
||||
|
||||
|
105
support/buildbot/bootstrap.py
Normal file
105
support/buildbot/bootstrap.py
Normal 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()
|
10
support/buildbot/buildconfig.json
Normal file
10
support/buildbot/buildconfig.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"debian8": {
|
||||
"CC": "clang-3.8",
|
||||
"CXX": "clang-3.8"
|
||||
},
|
||||
"debian11": {
|
||||
"CC": "clang-13",
|
||||
"CXX": "clang++-13"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user