[CI, Drone] Add GCC builds

* Switch to starlark language to simplify configuration
* Use image `xeniaproject/buildenv:2022-01-01`
This commit is contained in:
Joel Linn 2021-09-23 11:57:47 +02:00 committed by Rick Gibbed
parent b2e51fd24f
commit 657645fb2c
3 changed files with 255 additions and 216 deletions

View File

@ -8,9 +8,8 @@ skip_tags: true
skip_commits:
files:
- .drone.yml
- .drone.star
- .github/**
- .travis.yml
- docs/**
- src/**/*_posix.*
- src/**/*_linux.*

254
.drone.star Normal file
View 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',
],
},
],
}

View File

@ -1,214 +0,0 @@
---
kind: pipeline
type: docker
name: lint
# Run this in a separate pipeline so that it will build even if this fails
steps:
- name: lint
image: xeniaproject/buildenv:2021-06-21
commands:
- clang-format --version
- ./xenia-build lint --all
---
kind: pipeline
type: docker
name: x86_64-linux
platform:
os: linux
arch: amd64
# Some expressions in this file are duplicates. Scripting support is
# available using jsonnet but increases complexity
# https://docs.drone.io/pipeline/scripting/jsonnet/
# 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: xeniaproject/buildenv:2021-06-21
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: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-premake
path: /drone/src/build
commands:
- $CXX --version
- $AR --version
- python3 --version
- ./xenia-build premake
depends_on:
- clone-submodules
# Development toolchain
- name: toolchain-cmake
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-cmake
path: /drone/src/build
commands:
- |
./xenia-build premake --devenv=cmake
cd build
for c in Debug Release
do
mkdir cmake-$c
cd cmake-$c
cmake -DCMAKE_BUILD_TYPE=$c ..
cd ..
done
depends_on:
# Premake itself needs to be build first:
- toolchain-premake
#
# Building
#
- name: build-premake-debug-all
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-premake
path: /drone/src/build
commands:
- ./xenia-build build --no_premake -j$(nproc) --config=Debug
depends_on:
- toolchain-premake
- name: build-premake-release-tests
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-premake
path: /drone/src/build
commands:
- ./xenia-build build --no_premake -j$(nproc) --config=Release --target=xenia-base-tests
depends_on:
- toolchain-premake
- name: build-premake-release-all
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-premake
path: /drone/src/build
commands:
- ./xenia-build build --no_premake -j$(nproc) --config=Release
depends_on:
- build-premake-release-tests
- name: build-cmake-debug-all
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-cmake
path: /drone/src/build
commands:
- cd build/cmake-Debug
- cmake --build . -j$(nproc)
depends_on:
- toolchain-cmake
- name: build-cmake-release-tests
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-cmake
path: /drone/src/build
commands:
- cd build/cmake-Release
- cmake --build . -j$(nproc) --target xenia-base-tests
depends_on:
- toolchain-cmake
- name: build-cmake-release-all
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-cmake
path: /drone/src/build
commands:
- cd build/cmake-Release
- cmake --build . -j$(nproc)
depends_on:
- build-cmake-release-tests
#
# Tests
#
- name: test-premake
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-premake
path: /drone/src/build
commands:
- ./build/bin/Linux/Release/xenia-base-tests
depends_on:
- build-premake-release-tests
- name: test-cmake
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-cmake
path: /drone/src/build
commands:
- ./build/bin/Linux/Release/xenia-base-tests
depends_on:
- build-cmake-release-tests
#
# Stat
#
- name: stat
image: xeniaproject/buildenv:2021-06-21
volumes:
- name: build-premake
path: /build-premake
- name: build-cmake
path: /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