Skip to content

Commit e3fc16e

Browse files
committed
Pre-compile Julia sysimage
1 parent 363e057 commit e3fc16e

6 files changed

Lines changed: 50 additions & 21 deletions

File tree

TestBaseModelica/Manifest.toml

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TestBaseModelica/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ To speed up the execution of the test and reduce the TTFP-overhad of Julia there
2727
julia> create_sysimage(["TestBaseModelica"]; sysimage_path="TestBaseModelica.so", precompile_execution_file="precompile_skript.jl" )
2828
```
2929

30+
```bash
31+
time julia --project=$(pwd) -e 'using TestBaseModelica; solver_settings=SolverSettings(start_time=0.0, stop_time=1.0, interval=0.02, tolerance=1e-6); test_settings=TestSettings(modelname="ExampleFirstOrder", output_directory="ExampleFirstOrder", solver_settings=solver_settings); run_test(joinpath("examples", "ExampleFirstOrder.mo"); settings=test_settings)'
32+
33+
time julia --sysimage=TestBaseModelica.so -e 'using .TestBaseModelica; solver_settings=SolverSettings(start_time=0.0, stop_time=1.0, interval=0.02, tolerance=1e-6); test_settings=TestSettings(modelname="ExampleFirstOrder", output_directory="ExampleFirstOrder", solver_settings=solver_settings); run_test(joinpath("examples", "ExampleFirstOrder.mo"); settings=test_settings)'
34+
```
35+
3036
2. Keep a Julia daemon running in the background for all tests by using
3137
[DaemonMode.jl](https://github.com/dmolina/DaemonMode.jl)
3238

TestBaseModelica/precompile_skript.jl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ solver_settings = SolverSettings(
77
tolerance = 1e-6
88
)
99

10+
output_directory = "tmp_out_dir"
1011
test_settings = TestSettings(
1112
modelname = "ExampleFirstOrder",
12-
output_directory = "ExampleFirstOrder",
13-
solver_settings = solver_settings)
14-
15-
run_test(joinpath("examples", "ExampleFirstOrder.mo"); settings = test_settings)
13+
output_directory = output_directory,
14+
solver_settings = solver_settings
15+
)
1616

17-
rm("ExampleFirstOrder", force=true, recursive=true)
17+
run_test(joinpath(@__DIR__, "examples", "ExampleFirstOrder.mo"); settings = test_settings)
18+
rm(output_directory, force=true, recursive=true)

basemodelica.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
import monotonic
2+
import os.path
13
import subprocess
4+
25
from juliacall import Main as jl
6+
from omcommon import friendlyStr
37

4-
def print_julia_version():
8+
def print_julia_version() -> None:
59

610
julia = None
711
try:
@@ -13,10 +17,27 @@ def print_julia_version():
1317

1418
jl.seval("using InteractiveUtils; versioninfo()")
1519

16-
def dev_testbasemodelica_jl():
20+
def precompile_testbaesmodelica(systemImage: os.path) -> None:
21+
"""Update and pre-compile TestBaseModelica to `sysimage`.
1722
18-
jl.seval('import Pkg; Pkg.develop(path="TestBaseModelica")')
23+
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!
26+
"""
1927

20-
def update_testbasemodelica():
28+
start = monotonic.monotonic()
29+
print("Updating and pre-compiling Julia package TestBaseModelica. This might take a while, hang tight!")
30+
jl.seval('import Pkg;'
31+
"Pkg.activate();"
32+
'Pkg.add("PackageCompiler");'
33+
'using PackageCompiler;'
34+
'Pkg.activate("TestBaseModelica");'
35+
'Pkg.update();'
36+
'Pkg.status();'
37+
'create_sysimage(["TestBaseModelica"]; sysimage_path="%s", precompile_execution_file="TestBaseModelica/precompile_skript.jl")'
38+
% systemImage)
39+
execTime = monotonic.monotonic() - start
40+
print("Done pre-compiling in %s." % friendlyStr(execTime))
2141

22-
jl.seval('import Pkg; Pkg.activate("TestBaseModelica"); Pkg.update(); Pkg.status()')
42+
if not os.path.isfile(systemImage):
43+
raise FileNotFoundError("Something went wrong, couldn't find %s" % systemImage)

test.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,10 @@ def timeSeconds(f):
314314
sys.stdout.flush()
315315

316316
# Print Julia versions for BaseModelica.jl import
317+
julia_sysimage = os.path.abspath("TestBaseModelica.so")
317318
if basemodelica_mtk_import:
318319
basemodelica.print_julia_version()
319-
basemodelica.dev_testbasemodelica_jl()
320-
basemodelica.update_testbasemodelica()
320+
basemodelica.precompile_testbaesmodelica(julia_sysimage)
321321

322322
try:
323323
os.unlink("HelloWorld"+exeExt)
@@ -516,6 +516,7 @@ def testHelloWorld(cmd):
516516
if basemodelica_mtk_import:
517517
c["basemodelica-export"] = True
518518
c["basemodelica-mtk-import"] = True
519+
c["julia-system-image"] = julia_sysimage
519520

520521
# Create mos-files
521522

testmodel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ def sendExpressionOldOrNew(cmd):
546546
fp.write("test_settings = TestSettings(modelname=\"%s\", solver_settings=solver_settings)\n" % (conf["fileName"]))
547547
fp.write("run_test(\"%s.mo\"; settings = test_settings)\n" % (conf["modelName"]))
548548

549-
cmd = "julia %s" % juliaCallFile
549+
cmd = "julia --sysimage=%s %s" % (conf["julia-system-image"], juliaCallFile)
550550
with open(simFile,"w") as fp:
551551
fp.write("%s\n" % (cmd))
552552
res = checkOutputTimeout(

0 commit comments

Comments
 (0)