Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 36 additions & 5 deletions .CI/Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ pipeline {
booleanParam(name: 'ida', defaultValue: false, description: 'master branch, simulated with -s ida, filling ida (ryzen-5950x-1). Ticking it together with master, cvode or gbode runs one job that builds every model once and simulates it with each of them. This is an experimental job that does not run on a fixed schedule.')
booleanParam(name: 'generateSymbolicJacobian', defaultValue: false, description: 'master branch, with --generateSymbolicJacobian (ryzen-5950x-1). This is an experimental job that does not run on a fixed schedule.')
booleanParam(name: 'wasm_jit', defaultValue: false, description: 'master branch, with --simCodeTarget=wasm-jit (ryzen-9950x). Every model is translated and simulated the way simulate() does, filling wasm-jit. This is an experimental job that does not run on a fixed schedule.')
booleanParam(name: 'wasm_web', defaultValue: false, description: 'master branch, with --simCodeTarget=wasm-jit (ryzen-9950x), simulated the way the web omc does: the driver and the linear and nonlinear solvers in wasm, the in-wasm libm, and external "C" only from prebuilt wasm libraries. Fills wasm-web. This is an experimental job that does not run on a fixed schedule.')
booleanParam(name: 'wasm_fmu', defaultValue: false, description: 'master branch, with --simCodeTarget=wasm-jit (ryzen-9950x). Every model is exported once as an unzipped wasm FMU and simulated through both of its FMI 3.0 interfaces, filling wasm-jit-me (Model Exchange) and wasm-jit-cs (Co-Simulation). This is an experimental job that does not run on a fixed schedule.')
booleanParam(name: 'c_plus_rust', defaultValue: false, description: 'master branch, with --simCodeTarget=C+Rust, filling c-plus-rust (ryzen-5950x-1). The C code generator emits what it always did; the executable links libSimulationRuntimeRust instead of libSimulationRuntimeC, so the difference against master is the simulation runtime alone. This is an experimental job that does not run on a fixed schedule.')
booleanParam(name: 'heavy_tests', defaultValue: false, description: 'master branch, runs one test at a time. That is, no parallel launching of tests. omc will use multiple threads for each test (-n=1 is not set unlike the other regression tests.), (ryzen-5950x-1). This is an experimental job that does not run on a fixed schedule.')
Expand Down Expand Up @@ -365,6 +366,27 @@ pipeline {
wasmCmakeFlags())
}
}
stage('wasm-web') {
agent {
node {
label 'ryzen-9950x'
customWorkspace 'ws/OpenModelicaLibraryTestingWork'
}
}
options { skipDefaultCheckout() }
when {
beforeAgent true
expression { params.wasm_web }
}
steps {
// Its own build (~/saved_omc/wasm-web): the runtime links the web's in-wasm
// driver and solvers, which the environment below selects.
withEnv(wasmWebEnv()) {
runRegressiontest('master', 'wasm-web', 'setCommandLineOptions("--simCodeTarget=wasm-jit")', '', false, '', '--nobuildmodel', false, false, 0, 'configs/conf.json',
wasmCmakeFlags() + ' -DRUST_OMC_WASM_INWASM_DRIVER=ON')
}
}
}
stage('C+Rust') {
agent {
node {
Expand Down Expand Up @@ -480,7 +502,7 @@ pipeline {
}
when {
beforeAgent true
expression { params.v1_25 || params.v1_26 || params.v1_27 || params.master || params.conversion_script || params.report_ryzen_5950x_1 || params.report_ryzen_5950x_2 || params.newInst_newBackend || params.generateSymbolicJacobian || params.heavy_tests || params.fmi_v1_25 || params.fmi_v1_26 || params.fmi_v1_27 || params.fmi_master || params.fmpy_fmi_v1_25 || params.fmpy_fmi_v1_26 || params.fmpy_fmi_v1_27 || params.fmpy_fmi_master || params.newInst_daeMode || params.newBackend_daeMode || params.oldInst || params.cpp || params.cvode || params.gbode || params.ida || params.wasm_jit || params.wasm_fmu || params.c_plus_rust}
expression { params.v1_25 || params.v1_26 || params.v1_27 || params.master || params.conversion_script || params.report_ryzen_5950x_1 || params.report_ryzen_5950x_2 || params.newInst_newBackend || params.generateSymbolicJacobian || params.heavy_tests || params.fmi_v1_25 || params.fmi_v1_26 || params.fmi_v1_27 || params.fmi_master || params.fmpy_fmi_v1_25 || params.fmpy_fmi_v1_26 || params.fmpy_fmi_v1_27 || params.fmpy_fmi_master || params.newInst_daeMode || params.newBackend_daeMode || params.oldInst || params.cpp || params.cvode || params.gbode || params.ida || params.wasm_jit || params.wasm_fmu || params.wasm_web || params.c_plus_rust}
}
environment {
GITBRANCHES = 'maintenance/v1.20 maintenance/v1.21 maintenance/v1.22 maintenance/v1.23 maintenance/v1.24 maintenance/v1.25 maintenance/v1.26 maintenance/v1.27 master newInst-newBackend'
Expand All @@ -489,7 +511,7 @@ pipeline {
GITBRANCHES_DAE = 'newInst-daeMode'
GITBRANCHES_NEWBACKEND_DAE = 'newBackend-daeMode'
GITBRANCHES_CPP = 'v1.19-cpp v1.20-cpp v1.21-cpp v1.22-cpp v1.23-cpp v1.24-cpp v1.25-cpp cpp v1.26-cpp v1.27-cpp'
GITBRANCHES_WASM_JIT = 'wasm-jit-me wasm-jit-cs wasm-jit'
GITBRANCHES_WASM_JIT = 'wasm-jit-me wasm-jit-cs wasm-jit wasm-web'
GITBRANCHES_C_PLUS_RUST = 'c-plus-rust'
GITBRANCHES_SPECIAL = 'master newInst-newBackend'
// The C+Rust job ran a few times before it was added to this stage, so
Expand Down Expand Up @@ -585,9 +607,10 @@ pipeline {
sh "./report.py --branches='ida master' configs/conf.json"
sh "mv overview.html overview-ida.html"

// The three ways a wasm-jit model is simulated, against master: the plain
// simulation path, and the two FMI 3.0 interfaces of one exported wasm FMU,
// which share an export and differ only in simulation and verification.
// The ways a wasm-jit model is simulated, against master: the plain
// simulation path, the two FMI 3.0 interfaces of one exported wasm FMU,
// which share an export and differ only in simulation and verification,
// and the web omc's in-wasm path.
sh "./report.py --branches='master ${env.GITBRANCHES_C_PLUS_RUST} ${env.GITBRANCHES_WASM_JIT}' configs/conf.json"
sh "mv overview.html overview-wasm-jit.html"

Expand Down Expand Up @@ -877,6 +900,14 @@ def wasmCmakeFlags() {
return '-DOM_OMC_ENABLE_RUST=ON -DRUST_OMC_CI=ON -DRUST_OMC_THREADS=4 -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache'
}

/* What makes the wasm-web job's omc simulate the way the web omc does. */
def wasmWebEnv() {
return ['OMC_WASM_INWASM_DRIVER=1',
'OMC_WASM_HOST_LIN_SOLVE=0',
'OMC_WASM_HOST_LIBM=0',
'OMC_WASM_NATIVE_EXTERNALS=0']
}

def runRegressiontest(branch, name, extraFlags, omsHash, omcompiler, extrasimflags, testFlags, boolean removePackageOrder, boolean conversionScript, int jobs=0, libs_config_file = 'configs/conf.json', cmakeFlags = '', dockerfile = '.CI/testing', fmiSimulators = null, solvers = null) {
sh '''
find /tmp -name "*openmodelica.hudson*" -exec rm {} ";" || true
Expand Down
Loading