#include tcwg/default.yaml.inc - job: #if TOOLCHAIN_llvm && HOST_windows name: tcwg-llvm_woa-build #else name: tcwg-#{TOOLCHAIN}-build #endif project-type: freestyle defaults: global properties: - default-properties parameters: #if TOOLCHAIN_gnu - string: name: release_name default: default description: 'Name of release series; default is "date +%Y%m%d-%H_%M_%S"' #elif TOOLCHAIN_llvm - string: name: release # if !HOST_windows default: '' description: 'Release number. Ex. 4.0.1' # else default: 'main' description: 'Release build ID (13.0.0-rc1, 13.0.0) or git branch/sha1' # endif #endif #if TOOLCHAIN_gnu - string: name: buildnumber default: 0 description: 'Build number in release series' - choice: name: target choices: - aarch64-linux-gnu - aarch64-elf - aarch64-linux-gnu_ilp32 - aarch64_be-elf - aarch64_be-linux-gnu - arm-eabi - arm-linux-gnueabi - arm-linux-gnueabihf - armeb-eabi - armeb-linux-gnueabi - armeb-linux-gnueabihf - armv8l-linux-gnueabihf - native description: 'Target' - choice: name: version choices: - default - latest-rel - master - gcc8 - gcc7 - gcc6 - gcc5 - gcc4_9 description: 'Toolchain version; should match a supported ABE config' #elif TOOLCHAIN_llvm # if !HOST_windows - string: name: candidate default: 'git-ref=main' description: 'RC number. Ex. 1, 2, final' - string: name: toolchain default: '' description: 'URL of the toolchain to use. This needs to be a tarball with a /bin directory inside with either GCC or LLVM from make install' - string: name: compiler default: 'clang' description: 'Override the default system compiler. Only used if "toolchain" is empty.' - bool: name: useninja default: true description: 'Whether or not to use ninja for the release (works for releases > 9.0.0)' - bool: name: testsuite default: true description: 'Whether or not to trigger a test-suite with this build.' # else - choice: name: build_type choices: - test - release # endif #endif #if TOOLCHAIN_gnu - choice: name: distro choices: - lts_1 - lts description: 'Ubuntu distro to use for build environment' #elif TOOLCHAIN_llvm && !HOST_windows - string: name: build_container_tag default: 'lts_1' description: 'Type of image to use in the container: lts_1, lts, ...' #endif - label: name: builder #if HOST_windows default: tcwg-surface #else default: tcwg-x86_64-build #endif description: 'Jenkins label to build on; determines host of the toolchain' #if TOOLCHAIN_gnu - file: name: manifest.txt description: 'Use provided manifest file (which may override above settings)' - bool: name: verbose default: false description: 'Whether to be verbose' #endif - string: name: scripts_branch #if TOOLCHAIN_gnu || HOST_windows default: master #elif TOOLCHAIN_llvm default: tested #endif description: 'Scripts revision to use' #if TOOLCHAIN_gnu - text: name: extra_options default: description: 'Extra options to pass to docker-run' #endif disabled: false concurrent: true display-name: 'TCWG AAA #{TOOLCHAIN} #{HOST} Build' #if HOST_windows # Save bytes in limited 250-byte windows PATHs workspace: ws/tdb$EXECUTOR_NUMBER #endif scm: - jenkins-scripts wrappers: - timeout: #if TOOLCHAIN_gnu timeout: 300 #else TOOLCHAIN_llvm timeout: 1800 #endif - timestamps #if HOST_linux - ssh-agent-credentials: # tcwg-buildslave user id users: - 'e0958a95-204f-4c14-a66c-5e2be6c5d50a' #endif - build-name: #if TOOLCHAIN_gnu name: '#$BUILD_NUMBER-$version-$release_name-$buildnumber/$builder-$target' #elif TOOLCHAIN_llvm && !HOST_windows name: '#$BUILD_NUMBER-$release-$candidate/$builder' #elif TOOLCHAIN_llvm && HOST_windows name: '#$BUILD_NUMBER-$release/$builder' #endif - workspace-cleanup builders: #if TOOLCHAIN_gnu - shell: | #!/bin/bash set -ex abe_branch=tested eval $extra_options ./jenkins-scripts/docker-run.sh --distro "$distro" \ -- \ ./jenkins-scripts/tcwg-dev-build.sh \ --abe_branch "$abe_branch" \ --release_name "$release_name" \ --buildnumber "$buildnumber" \ --target "$target" \ --version "$version" \ --manifest "$(pwd)/manifest.txt" \ --verbose "$verbose" #elif TOOLCHAIN_llvm # if HOST_linux - shell: | #!/bin/bash set -ex rm -rf artifacts mkdir artifacts # Until we figure out a way to use heavy-job with different weights # based on the builder, we hardcode to one. buildjobs=1 # Select builder arch/type/container case ${builder} in tcwg-x86_64-build|tcwg-x86_64-cam) builder_arch=amd64 buildjobs=8 # 1 slot is 32/4 ;; tcwg-tk1_32-build|tcwg-llvm_tk1-*) builder_arch=armhf buildjobs=3 # TK1s only have 4 cores and little RAM ;; tcwg-jade*) builder_arch=arm64 buildjobs=64 # Jades have lots of cores ;; *) echo "ERROR: Unsupported label: $builder"; exit 1 ;; esac # Sets the system compiler compiler_option='' if [ "${toolchain:+set}" != "set" ] && [ "${compiler:+set}" = "set" ]; then compiler_option="--compiler=${compiler}" fi # Trigger toolchain name toolchain_file="${WORKSPACE}/llvm.params.toolchain" toolchain_file_option="" if ${twostage} || ${testsuite}; then toolchain_file_option="--toolchain-file=$toolchain_file" fi # Setup job parameters and run (for now, just pretend to run) ret=0 ./jenkins-scripts/docker-run.sh \ --arch ${builder_arch} \ --distro ${build_container_tag} \ -- \ bash -x ./jenkins-scripts/tcwg-llvm-release.sh \ --workspace=${WORKSPACE} \ --release=${release} \ --candidate=${candidate} \ --buildjobs=${buildjobs} \ --toolchain=${toolchain} \ --use-ninja=${useninja} \ $toolchain_file_option $compiler_option \ > artifacts/release.log 2>&1 || ret=$? if [ $ret -ne 0 ]; then touch llvm.failed fi # Chained jobs if ${testsuite}; then echo "target_list=$builder" > llvm.params.testsuite cat $toolchain_file >> llvm.params.testsuite fi # failure is handled by conditional step on llvm.failed # so that the testsuite job is always triggered exit 0 - conditional-step: condition-kind: file-exists condition-filename: llvm.params.testsuite steps: - trigger-builds: - project: 'tcwg-llvm-testsuite' property-file: llvm.params.testsuite current-parameters: true block: true - conditional-step: condition-kind: file-exists condition-filename: llvm.failed steps: - shell: "exit 1" # elif HOST_windows - batch: | jenkins-scripts\tcwg-llvm-release.bat %release% %build_type% # endif #endif publishers: - archive: artifacts: 'artifacts/**' latest-only: false