[CI, Drone] Add GCC builds
* Switch to starlark language to simplify configuration * Use image `xeniaproject/buildenv:2022-01-01`
This commit is contained in:
254
.drone.star
Normal file
254
.drone.star
Normal file
@@ -0,0 +1,254 @@
|
||||
def main(ctx):
|
||||
return [
|
||||
pipeline_lint(),
|
||||
pipeline_linux_desktop('x86_64-linux-clang', image_linux_x86_64(), 'amd64', 'clang'),
|
||||
pipeline_linux_desktop('x86_64-linux-gcc', image_linux_x86_64(), 'amd64', 'gcc'),
|
||||
]
|
||||
|
||||
def image_linux_x86_64():
|
||||
return 'xeniaproject/buildenv:2022-01-01'
|
||||
|
||||
def volume_build(toolchain, path='/drone/src/build'):
|
||||
return {
|
||||
'name': 'build-' + toolchain,
|
||||
'path': path,
|
||||
}
|
||||
|
||||
def command_cc(cc):
|
||||
# set CC, CXX, ...
|
||||
return 'export $(cat /{}.env | sed \'s/#.*//g\' | xargs)'.format(cc)
|
||||
|
||||
# Run lint in a separate pipeline so that it will try building even if lint fails
|
||||
def pipeline_lint():
|
||||
return {
|
||||
'kind': 'pipeline',
|
||||
'type': 'docker',
|
||||
'name': 'lint',
|
||||
'steps': [
|
||||
{
|
||||
'name': 'lint',
|
||||
'image': image_linux_x86_64(),
|
||||
'commands': [
|
||||
'clang-format --version',
|
||||
'./xenia-build lint --all',
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
def pipeline_linux_desktop(name, image, arch, cc):
|
||||
return {
|
||||
'kind': 'pipeline',
|
||||
'type': 'docker',
|
||||
'name': name,
|
||||
'platform': {
|
||||
'os': 'linux',
|
||||
'arch': arch,
|
||||
},
|
||||
# These volumes will be mounted at the build directory, allowing to
|
||||
# run different premake toolchains from the same source tree
|
||||
'volumes': [
|
||||
{
|
||||
'name': 'build-premake',
|
||||
'temp': {},
|
||||
},
|
||||
{
|
||||
'name': 'build-cmake',
|
||||
'temp': {},
|
||||
},
|
||||
],
|
||||
|
||||
'steps': [
|
||||
#
|
||||
# Setup the source tree
|
||||
#
|
||||
{
|
||||
'name': 'clone-submodules',
|
||||
'image': image,
|
||||
'commands': [
|
||||
'pwd',
|
||||
# May miss recursive submodules (but faster than xb setup)
|
||||
'git submodule update --init --depth 1 -j $(nproc)',
|
||||
],
|
||||
},
|
||||
|
||||
|
||||
#
|
||||
# Setup the two build systems
|
||||
#
|
||||
|
||||
# Native premake Makefiles for production
|
||||
{
|
||||
'name': 'toolchain-premake',
|
||||
'image': image,
|
||||
'volumes': [volume_build('premake')],
|
||||
'commands': [
|
||||
command_cc(cc),
|
||||
'$CXX --version',
|
||||
'python3 --version',
|
||||
'./xenia-build premake --cc={}'.format(cc),
|
||||
],
|
||||
'depends_on': ['clone-submodules'],
|
||||
},
|
||||
|
||||
# Development toolchain
|
||||
{
|
||||
'name': 'toolchain-cmake',
|
||||
'image': image,
|
||||
'volumes': [volume_build('cmake')],
|
||||
'commands': [
|
||||
command_cc(cc),
|
||||
'''
|
||||
./xenia-build premake --cc={} --devenv=cmake
|
||||
cd build
|
||||
for c in Debug Release
|
||||
do
|
||||
mkdir cmake-$c
|
||||
cd cmake-$c
|
||||
cmake -DCMAKE_BUILD_TYPE=$c ..
|
||||
cd ..
|
||||
done
|
||||
'''.format(cc),
|
||||
],
|
||||
# Premake itself needs to be build first:
|
||||
'depends_on': ['toolchain-premake'],
|
||||
},
|
||||
|
||||
#
|
||||
# Building
|
||||
#
|
||||
{
|
||||
'name': 'build-premake-debug-all',
|
||||
'image': image,
|
||||
'volumes': [volume_build('premake')],
|
||||
'commands': [
|
||||
command_cc(cc),
|
||||
'./xenia-build build --no_premake -j$(nproc) --config=Debug',
|
||||
],
|
||||
'depends_on': ['toolchain-premake'],
|
||||
},
|
||||
|
||||
{
|
||||
'name': 'build-premake-release-tests',
|
||||
'image': image,
|
||||
'volumes': [volume_build('premake')],
|
||||
'commands': [
|
||||
command_cc(cc),
|
||||
'./xenia-build build --no_premake -j$(nproc) --config=Release --target=xenia-base-tests',
|
||||
],
|
||||
'depends_on': ['toolchain-premake'],
|
||||
},
|
||||
|
||||
{
|
||||
'name': 'build-premake-release-all',
|
||||
'image': image,
|
||||
'volumes': [volume_build('premake')],
|
||||
'commands': [
|
||||
command_cc(cc),
|
||||
'./xenia-build build --no_premake -j$(nproc) --config=Release',
|
||||
],
|
||||
'depends_on': ['build-premake-release-tests'],
|
||||
},
|
||||
|
||||
{
|
||||
'name': 'build-cmake-debug-all',
|
||||
'image': image,
|
||||
'volumes': [volume_build('cmake')],
|
||||
'commands': [
|
||||
command_cc(cc),
|
||||
'cd build/cmake-Debug',
|
||||
'cmake --build . -j$(nproc)',
|
||||
],
|
||||
'depends_on': ['toolchain-cmake'],
|
||||
},
|
||||
|
||||
{
|
||||
'name': 'build-cmake-release-tests',
|
||||
'image': image,
|
||||
'volumes': [volume_build('cmake')],
|
||||
'commands': [
|
||||
command_cc(cc),
|
||||
'cd build/cmake-Release',
|
||||
'cmake --build . -j$(nproc) --target xenia-base-tests',
|
||||
],
|
||||
'depends_on': ['toolchain-cmake'],
|
||||
},
|
||||
|
||||
{
|
||||
'name': 'build-cmake-release-all',
|
||||
'image': image,
|
||||
'volumes': [volume_build('cmake')],
|
||||
'commands': [
|
||||
command_cc(cc),
|
||||
'cd build/cmake-Release',
|
||||
'cmake --build . -j$(nproc)',
|
||||
],
|
||||
'depends_on': ['build-cmake-release-tests'],
|
||||
},
|
||||
|
||||
|
||||
#
|
||||
# Tests
|
||||
#
|
||||
{
|
||||
'name': 'test-premake',
|
||||
'image': image,
|
||||
'volumes': [volume_build('premake')],
|
||||
'commands': [
|
||||
'./build/bin/Linux/Release/xenia-base-tests',
|
||||
],
|
||||
'depends_on': ['build-premake-release-tests'],
|
||||
},
|
||||
|
||||
{
|
||||
'name': 'test-cmake',
|
||||
'image': image,
|
||||
'volumes': [volume_build('cmake')],
|
||||
'commands': [
|
||||
'./build/bin/Linux/Release/xenia-base-tests',
|
||||
],
|
||||
'depends_on': ['build-cmake-release-tests'],
|
||||
},
|
||||
|
||||
|
||||
#
|
||||
# Stat
|
||||
#
|
||||
{
|
||||
'name': 'stat',
|
||||
'image': image,
|
||||
'volumes': [
|
||||
volume_build('premake', '/build-premake'),
|
||||
volume_build('cmake', '/build-cmake'),
|
||||
],
|
||||
'commands': [
|
||||
'''
|
||||
header() {
|
||||
SEP='============================================================'
|
||||
echo
|
||||
echo $SEP
|
||||
echo $@
|
||||
echo $SEP
|
||||
}
|
||||
|
||||
for v in premake cmake
|
||||
do
|
||||
for c in Debug Release
|
||||
do
|
||||
header $v $c
|
||||
p=/build-$v/bin/Linux/$c
|
||||
ls -la $p
|
||||
sha256sum $p/*
|
||||
done
|
||||
done
|
||||
'''
|
||||
],
|
||||
'depends_on': [
|
||||
'build-premake-debug-all',
|
||||
'build-premake-release-all',
|
||||
'build-cmake-debug-all',
|
||||
'build-cmake-release-all',
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
Reference in New Issue
Block a user