Skip to content

Julia 1.13 release: OMRuntimeExternalC 0.3.3 (step 1) - #18

Merged
JKRT merged 11 commits into
masterfrom
release-1.13
Oct 2, 2026
Merged

JKRT merged 11 commits into
masterfrom
release-1.13

Conversation

@JKRT

@JKRT JKRT commented Oct 2, 2026

Copy link
Copy Markdown
Member

Merges the 1.13 line into master for the Julia 1.13 release of the OM.jl packages: OMRuntimeExternalC 0.3.3.

Changes (9 commits)

  • Project.toml for the 1.13 release: version and sibling compat
  • Julia 1.13 only: compat and CI
  • ModelicaFFT_kiss_fftr: the real FFT as a direct sum
  • CI: the 1.13 line is tested on Julia 1.13
  • Find the package directory from the source file, not the environment
  • Test changes together with OM.jl
  • Add a workflow that builds and publishes the macOS libraries
  • Build the external C libraries for macOS from the MSL C sources
  • README: link OM.jl under OpenModelica (1.13: README link to OpenModelica/OM.jl #17)

Merge order

The OM.jl packages are released in lockstep. Merge in this order, and register each package in the
OpenModelica registry right after its merge, so that the next one resolves against it:

Step Package Version
0 OM.jl (CI workflow) (JKRT/OM.jl) -
1 ImmutableList (OpenModelica/ImmutableList.jl) 0.4.2
1 OMRuntimeExternalC (OpenModelica/OMRuntimeExternalC.jl) 0.3.3 this PR
2 MetaModelica (OpenModelica/MetaModelica.jl) 0.4.2
3 Absyn (OpenModelica/Absyn.jl) 1.3.5
3 DoubleEnded (OpenModelica/DoubleEnded.jl) 0.2.3
3 ArrayUtil (OpenModelica/ArrayUtil.jl) 0.3.2
4 ListUtil (OpenModelica/ListUtil.jl) 0.4.1
4 SCode (OpenModelica/SCode.jl) 1.2.0
4 OMParser (OpenModelica/OMParser.jl) 0.2.1
5 DAE (OpenModelica/DAE.jl) 1.2.0
6 OMFrontend (OpenModelica/OMFrontend.jl) 1.3.1
7 OMBackend (OpenModelica/OMBackend.jl) 0.5.1
8 OM (JKRT/OM.jl) 0.5.0
9 OMLibraryTesting (OpenModelica/OMLibraryTesting.jl) 0.1.1

Please use Create a merge commit (not squash): OM.jl's submodule pointers and the sibling checkouts in CI
refer to these commits.

Verification (local, macOS, Julia 1.13 with threads)

  • Every package's tests and OM.jl's suite, in fresh processes: all green (OM.jl 1012/1012, OMBackend 376/376,
    OMFrontend 378/378, OMLibraryTesting 25/25, MetaModelica 262/262, OMRuntimeExternalC 274/274).
  • MSL coverage (425 models, OMLibraryTesting): frontend 424, backend 400, simulate 327, validate 303.
  • CI here runs the same set: every repo's PR comes from a branch named release-1.13, and OM.jl's integration
    workflow checks out the siblings at that branch.

Notes

  • Julia 1.13 only: julia = "1.13" in compat, and every workflow tests on 1.13.
  • Sibling compat entries are bounded below by their release versions (lockstep).

🤖 Generated with Claude Code

SVAGEN26 and others added 11 commits September 24, 2026 10:30
OM.jl lives at github.com/OpenModelica/OM.jl.

Co-authored-by: SVAGEN26 <247156613+SVAGEN26@users.noreply.github.com>
Co-authored-by: JKRT <jtinnerholm@gmail.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The OpenModelica build of these libraries does not work on macOS, so on
macOS every native call failed (54 of 55 tests). deps/build_msl_c_macos.sh
builds libModelica{MatIO,IO,StandardTables,ExternalC} from the Modelica
Standard Library C sources, plus the ModelicaCallbacks shim; that is all
src/api.jl calls. -D_LITTLE_ENDIAN is needed because MatIO's MAT v4 writer
does not recognise arm64 macOS.

deps/build.jl now downloads <arch>-apple-darwin.zip from the libs-*
release on macOS, like on Linux and Windows. If the release has no macOS
zip it warns and goes on, as before.

Installing the downloaded files is also safer on every platform:
- each file is renamed into place instead of written over, so a Julia
  session that has the old library loaded keeps working (overwriting a
  loaded Mach-O can get that session killed);
- the downloaded archives are removed even when extraction fails;
- a <platform>-callbacks.tar.gz is extracted through a temporary
  directory: Tar.extract refuses the non-empty library directory and
  needs an IO, not the inflated bytes, so a published callbacks tarball
  could never be used before.

Tests: 269/269 on Julia 1.12.7 and 1.13 (Apple silicon), with the
libraries installed by the new build.jl path and by the script.

Assisted-by: Claude Opus 5.5
.github/workflows/macos-libs.yml builds <arch>-apple-darwin.zip for
Apple silicon (macos-latest) and Intel (macos-15-intel) from the MSL C
sources (tag v4.0.0 by default), tests the package against exactly those
libraries on Julia 1.12 and 1.13, and, when run by hand with release_tag,
uploads the zips to that libs-* release.

It only uploads to an existing libs-* release: deps/build.jl uses the
newest libs-* release for every platform, so a new one without the Linux
and Windows zips would break them. Pull requests that touch the build
script, build.jl, the shim or the workflow run the build and tests.

Assisted-by: Claude Opus 5.5
.github/workflows/omjl.yml calls OM.jl's shared integration workflow
(JKRT/OM.jl .github/workflows/omjl-ci.yml) on every pull request and on
pushes to master and 1.13: this package's tests run against the other
OM.jl packages at the matching branch (the PR branch if a sibling has it,
else the PR base branch, else master), then OM.jl's test suite runs with
it, on Julia 1.12 and 1.13.

Assisted-by: Claude Opus 5.5
Base.find_package("OMRuntimeExternalC") resolves the name only where the
active environment lists the package directly. Precompiled under an
environment with OM only (a coverage environment), the package found no
shared libraries, and the cache kept that: every external C function
(MSL tables) then failed. The directory is now the one the source file
is in, as OMParser finds its own.

Assisted-by: Claude Opus 5.5
Pushes to 1.13 and pull requests into it run OM.jl's integration workflow
on Julia 1.13 only; master keeps 1.12 and 1.13.

Assisted-by: Claude Opus 5.5
MSL's real FFT (Modelica.Math.FastFourierTransform.realFFT) called a
stub that raised "FFT support not compiled into this build". It is now
ModelicaFFT.c's definition summed over a table of the nu roots of unity:
amplitudes |X_k| / nf, phases arg(X_k) in radians, info 1 for an odd nu
and 2 for a work array too small. About 7 ms for nu = 4000, the largest
in the MSL examples. Tested on a signal with known coefficients.

Assisted-by: Claude Opus 5.5
The OM.jl packages are verified on Julia 1.13 only (since 2026-09-28): compat
julia = "1.13" (added where it was missing), and every workflow tests on 1.13.

Assisted-by: Claude Opus 5.5
One version per package for the release (bumped where the version was
already registered in the OpenModelica registry), and every OM.jl sibling
dependency bounded below by its release version: the packages are
developed in lockstep, and the registry must not pair this version with an
older sibling.

Assisted-by: Claude Opus 5.5
HTTP 2 dropped HTTP.download. With no compat bound on HTTP, Julia 1.13
resolved HTTP 2.8, and the build downloaded none of the prebuilt libraries
on Linux and Windows (CI: "shared libraries not found", every table test
errored). On Julia 1.10 the same build had resolved HTTP 1.x. The build now
uses the standard library for the release-tag query and the downloads
(a non-success status still raises), and HTTP is no longer a dependency.

Assisted-by: Claude Opus 5.5
The library paths are looked up when the package precompiles. Julia 1.13's
Pkg.instantiate precompiles the active project before Pkg.build has
downloaded the libraries, and the tests then loaded a cache that holds "not
found" (Linux and Windows). Auto-precompile is off in the install step.

Assisted-by: Claude Opus 5.5
@JKRT
JKRT merged commit be33a94 into master Oct 2, 2026
9 of 10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants