blob: e70208797fecaea99a00ca5122e1dee990c9aa90 [file] [log] [blame]
/*
* Copyright (c) 2025, Arm Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
pipeline {
agent {
label 'docker-amd64-tf-a-jammy'
}
parameters {
string(name: 'REPO_URL',
defaultValue: 'https://review.trustedfirmware.org/shared/transfer-list-library',
description: 'Git repository URL.')
string(
name: 'REPO_REFSPEC',
defaultValue: '+refs/heads/main:refs/remotes/origin/main',
description: 'Refspec to fetch from the repository.'
)
string(
name: 'REPO_REFNAME',
defaultValue: 'origin/main',
description: 'Branch or reference to check out.'
)
string(name: 'BASE_REF',
defaultValue: 'origin/main',
description: 'Git base reference for formatting comparison.')
}
stages {
stage('Checkout') {
steps {
script {
def refspec = params.GERRIT_REFSPEC ?: params.REPO_REFSPEC
def refname = params.GERRIT_PATCHSET_REVISION ?: params.REPO_REFNAME
checkout([
$class: 'GitSCM',
branches: [[ name: refname ]],
userRemoteConfigs: [
[ url: params.REPO_URL, refspec: refspec]
]
])
}
}
}
stage('Code style') {
steps {
script {
sh "git-clang-format ${params.BASE_REF} HEAD --diff -q | tee formatted.patch"
sh "[ -s formatted.patch ] || rm formatted.patch"
if (fileExists('formatted.patch')) {
archiveArtifacts artifacts: "formatted.patch", fingerprint: true
error("Code style check failed. See 'formatted.patch' for suggested changes.")
}
}
}
}
stage('Build') {
matrix {
axes {
axis {
name 'COMPILER'
values 'aarch64-clang', 'aarch64-gcc', 'aarch32-clang', 'aarch32-gcc', 'clang', 'gcc'
}
axis {
name 'BUILD_TYPE'
values 'Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'
}
}
stages {
stage('Compile') {
steps {
script {
def toolchains = [
'gcc': [
cc: 'gcc',
cmakeArgs: [],
],
'clang': [
cc: 'clang',
cmakeArgs: [],
],
'aarch32-gcc': [
cc: 'arm-none-eabi-gcc',
cmakeArgs: ['-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY'],
],
'aarch64-gcc': [
cc: 'aarch64-none-elf-gcc',
cmakeArgs: ['-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY'],
],
'aarch32-clang': [
cc: 'clang',
clangTarget: 'arm-none-eabi',
cmakeArgs: ['-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY'],
],
'aarch64-clang': [
cc: 'clang',
clangTarget: 'aarch64-none-elf',
cmakeArgs: ['-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY'],
],
]
def buildDir = "build/${COMPILER}/${BUILD_TYPE}"
def cmakeArgs = toolchains[COMPILER].cmakeArgs
cmakeArgs << "-DCMAKE_C_COMPILER=${toolchains[COMPILER].cc}"
if (toolchains[COMPILER].clangTarget) {
def sysroot = sh(
script: "${toolchains[COMPILER].clangTarget}-gcc -print-sysroot",
returnStdout: true
).trim()
cmakeArgs << "-DCMAKE_C_COMPILER_TARGET=${toolchains[COMPILER].clangTarget}"
cmakeArgs << "-DCMAKE_SYSROOT=${sysroot}"
}
sh """
cmake -B ${buildDir} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${cmakeArgs.join(' ')}
cmake --build ${buildDir}
"""
archiveArtifacts artifacts: "${buildDir}/**", fingerprint: true
}
}
}
}
}
}
stage('Test') {
steps {
script {
def testDir = "build/test"
sh """
cmake -B ${testDir} -DTARGET_GROUP=test
cmake --build ${testDir}
cmake --build ${testDir} -- test
"""
archiveArtifacts artifacts: "${testDir}/**", fingerprint: true
}
}
}
}
}