Skip to content

Commit de8f921

Browse files
committed
Option to disable Julia pre-compilation
1 parent e3fc16e commit de8f921

5 files changed

Lines changed: 44 additions & 17 deletions

File tree

.github/workflows/test_julia.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ jobs:
9292
shell: bash
9393
run: |
9494
export MY_SANITY_CHECK_DIRECTORY=sanityCheck
95-
python test.py --branch="${{ matrix.omc-version }}" --basemodelica-mtk-import --noclean --verbose configs/sanityCheck.json
95+
python test.py --branch="${{ matrix.omc-version }}" --basemodelica-mtk-import --no-julia-sys-image --noclean --verbose configs/sanityCheck.json
9696
9797
- name: Generate HTML results
9898
shell: bash

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,3 +185,7 @@ export MY_SANITY_CHECK_DIRECTORY=sanityCheck
185185
./test.py --basemodelica-mtk-import --branch=master --noclean --verbose configs/sanityCheck.json
186186
./report.py --branches="${{ matrix.omc-version }}" configs/sanityCheck.json
187187
```
188+
189+
This will create a Julia system image to speedup tests. This can take a lot of
190+
time, but will reduce the Julia startup penalty. To disable add
191+
`--no-julia-sys-image`.

basemodelica.py

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from omcommon import friendlyStr
77

88
def print_julia_version() -> None:
9+
"""Print Julia `versioninfo()`"""
910

1011
julia = None
1112
try:
@@ -17,27 +18,41 @@ def print_julia_version() -> None:
1718

1819
jl.seval("using InteractiveUtils; versioninfo()")
1920

20-
def precompile_testbaesmodelica(systemImage: os.path) -> None:
21+
def precompile_testbaesmodelica(systemImage: os.PathLike | None = None) -> None:
2122
"""Update and pre-compile TestBaseModelica to `sysimage`.
2223
2324
Update dependencies of TestBaseModelica to get the latest version of
24-
BaseModelica.jl from branch main. Create a pre-compile system image of package
25-
TestBaseModelica with PackageCompiler.jl. This might take a wile!
25+
BaseModelica.jl from branch main.
26+
Create a pre-compile system image of package TestBaseModelica with
27+
PackageCompiler.jl. Skipping this step if `systemImage` is `None`.
28+
This might take a wile!
2629
"""
2730

2831
start = monotonic.monotonic()
29-
print("Updating and pre-compiling Julia package TestBaseModelica. This might take a while, hang tight!")
32+
print("Updating Julia package TestBaseModelica")
33+
3034
jl.seval('import Pkg;'
31-
"Pkg.activate();"
35+
'Pkg.activate();'
3236
'Pkg.add("PackageCompiler");'
3337
'using PackageCompiler;'
3438
'Pkg.activate("TestBaseModelica");'
3539
'Pkg.update();'
36-
'Pkg.status();'
37-
'create_sysimage(["TestBaseModelica"]; sysimage_path="%s", precompile_execution_file="TestBaseModelica/precompile_skript.jl")'
38-
% systemImage)
40+
'Pkg.status();')
41+
42+
if systemImage == None:
43+
jl.seval('Pkg.activate();'
44+
'Pkg.develop(path="TestBaseModelica");'
45+
'Pkg.precompile("TestBaseModelica")')
46+
else:
47+
print("Pre-compiling Julia system image %s for TestBaseModelica."
48+
"This might take a while." % systemImage)
49+
50+
jl.seval('create_sysimage(["TestBaseModelica"];'
51+
'sysimage_path="%s",'
52+
'precompile_execution_file="TestBaseModelica/precompile_skript.jl")'
53+
% systemImage)
54+
if not os.path.isfile(systemImage):
55+
raise FileNotFoundError("Something went wrong, couldn't find %s" % systemImage)
56+
3957
execTime = monotonic.monotonic() - start
4058
print("Done pre-compiling in %s." % friendlyStr(execTime))
41-
42-
if not os.path.isfile(systemImage):
43-
raise FileNotFoundError("Something went wrong, couldn't find %s" % systemImage)

test.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
parser.add_argument('--branch', default='master')
2929
parser.add_argument('--fmi', default=False)
3030
parser.add_argument('--basemodelica-mtk-import', action="store_true", default=False, help='Activate Base Modelica export and test import with BaseModelica.jl / ModelingToolkit.jl.')
31+
parser.add_argument('--julia-sys-image', action=argparse.BooleanOptionalAction, default=True, help='Activate pre-compiling Julia system image.')
3132
parser.add_argument('--output', default='')
3233
parser.add_argument('--docker', default='')
3334
parser.add_argument('--libraries', help="Directory omc will search in to load system libraries/libraries to test.", default='')
@@ -67,7 +68,8 @@
6768
extrasimflags = args.extrasimflags
6869
ompython_omhome = args.ompython_omhome
6970
fmisimulator = args.fmisimulator or None
70-
basemodelica_mtk_import = args.basemodelica_mtk_import or None
71+
basemodelica_mtk_import = args.basemodelica_mtk_import
72+
julia_sys_image = args.julia_sys_image
7173
allTestsFmi = args.fmi
7274
ulimitMemory = args.ulimitvmem
7375
docker = args.docker
@@ -314,7 +316,7 @@ def timeSeconds(f):
314316
sys.stdout.flush()
315317

316318
# Print Julia versions for BaseModelica.jl import
317-
julia_sysimage = os.path.abspath("TestBaseModelica.so")
319+
julia_sysimage = os.path.abspath("TestBaseModelica.so") if julia_sys_image else None
318320
if basemodelica_mtk_import:
319321
basemodelica.print_julia_version()
320322
basemodelica.precompile_testbaesmodelica(julia_sysimage)
@@ -516,7 +518,7 @@ def testHelloWorld(cmd):
516518
if basemodelica_mtk_import:
517519
c["basemodelica-export"] = True
518520
c["basemodelica-mtk-import"] = True
519-
c["julia-system-image"] = julia_sysimage
521+
c["julia-system-image"] = julia_sysimage if julia_sys_image else ""
520522

521523
# Create mos-files
522524

testmodel.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -541,12 +541,18 @@ def sendExpressionOldOrNew(cmd):
541541

542542
juliaCallFile=os.path.normpath("%s_test.jl" % conf["modelName"])
543543
with open(juliaCallFile,"w") as fp:
544-
fp.write("using TestBaseModelica\n")
544+
if conf["julia-system-image"] == "":
545+
fp.write("using TestBaseModelica\n")
546+
else:
547+
fp.write("using .TestBaseModelica\n")
545548
fp.write("solver_settings = SolverSettings(start_time=%g,stop_time=%g,interval=%g,tolerance=%g)\n" %(startTime,stopTime,stepSize,tolerance))
546549
fp.write("test_settings = TestSettings(modelname=\"%s\", solver_settings=solver_settings)\n" % (conf["fileName"]))
547550
fp.write("run_test(\"%s.mo\"; settings = test_settings)\n" % (conf["modelName"]))
548551

549-
cmd = "julia --sysimage=%s %s" % (conf["julia-system-image"], juliaCallFile)
552+
cmd = "julia"
553+
if conf["julia-system-image"] != "":
554+
cmd += " --sysimage=%s" % conf["julia-system-image"]
555+
cmd += " %s" % juliaCallFile
550556
with open(simFile,"w") as fp:
551557
fp.write("%s\n" % (cmd))
552558
res = checkOutputTimeout(

0 commit comments

Comments
 (0)