diff --git a/.appveyor.yml b/.appveyor.yml index 54ad4f01b..ad7a5db18 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -8,9 +8,8 @@ skip_tags: true skip_commits: files: - - .drone.yml + - .drone.star - .github/** - - .travis.yml - docs/** - src/**/*_posix.* - src/**/*_linux.* diff --git a/.drone.star b/.drone.star new file mode 100644 index 000000000..840008295 --- /dev/null +++ b/.drone.star @@ -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', + ], + }, + ], + } diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index a8c2c21d3..000000000 --- a/.drone.yml +++ /dev/null @@ -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