#!/usr/bin/env groovy def BuildX64(tag, args) { dir ('edk2') { sh """ unset WORKSPACE source ./edksetup.sh make -C BaseTools build $args -t GCC5 -n \$(nproc) -a X64 -p OvmfPkg/OvmfPkgX64.dsc """ } dir ('edk2/Build/OvmfX64') { stash name: tag, includes: '*/FV/OVMF*.fd' } dir ('edk2/Build') { deleteDir() } } def TestSimpleX64(tag, args) { dir (tag) { unstash tag } sh """ scripts/qemu-boot-kernel $args \ -bios $tag/*/FV/OVMF.fd """ dir (tag) { deleteDir() } } def TestFlashX64(tag, args) { dir (tag) { unstash tag } sh """ code=\$(echo $tag/*/FV/OVMF_CODE.fd) vars=\$(echo $tag/*/FV/OVMF_VARS.fd) scripts/qemu-boot-kernel $args \ -drive file=\${code},if=pflash,format=raw,unit=0,readonly=on \ -drive file=\${vars},if=pflash,format=raw,unit=1 """ dir (tag) { deleteDir() } } pipeline { agent { node 'dist-fedora-x86_64' } triggers { pollSCM('H/6 * * * *') } stages { stage ('Prepare') { steps { dir ('edk2') { checkout([ $class: 'GitSCM', branches: [ [ name: '*/master' ] ], extensions: [ [ $class: 'CloneOption', timeout: 60 ],[ $class: 'SubmoduleOption', timeout: 60 ] ], userRemoteConfigs: [ [ url: 'git://github.com/tianocore/edk2' ] ]]) } } } stage ('Build x64') { steps { BuildX64("x64", ""); } } stage ('Build x64+smm') { steps { BuildX64("x64+smm", "-D SECURE_BOOT_ENABLE -D SMM_REQUIRE"); } } stage ('Test pc') { steps { TestSimpleX64("x64", "-M pc") } } stage ('Test q35') { steps { TestSimpleX64("x64", "-M q35") } } stage ('Test q35 smp4 pflash') { steps { TestFlashX64("x64", "-M q35 -smp 4") } } stage ('Test q35 smp4 pflash smm') { steps { TestFlashX64("x64+smm", "-M q35,smm=on -global ICH9-LPC.disable_s3=1 -smp 4") } } } }