Introduction
This document contains the release notes for the language interoperability library CppInterOp, release 1.6.0. CppInterOp is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of CppInterOp in some detail, including major improvements from the previous release and new feature work. Note that if you are reading this file from a git checkout, this document
applies to the next release, not the current one.
CppInterOp exposes API from Clang and LLVM in a backward compatibe way. The API support downstream tools that utilize interactive C++ by using the compiler as a service. That is, embed Clang and LLVM as a libraries in their codebases. The API are designed to be minimalistic and aid non-trivial tasks such as language interoperability on the fly. In such scenarios CppInterOp can be used to provide the necessary introspection information to the other side helping the language cross talk.
What's New in CppInterOp 1.6.0?
Some of the major new features and improvements to CppInterOp are listed here. Generic improvements to CppInterOp as a whole or to its underlying infrastructure are described first.
External Dependencies
- CppInterOp now works with:
- llvm19
Introspection
- Added
IsPointerType
andGetPointerType
functions. - Added
IsReferenceType
andGetNonReferenceType
functions. - Introduced
IsFunctionPointerType
function. - Implemented
GetEnumConstantDatamembers
function to resolve all EnumConstantDecls declared in a class. - Added IsClassPolymorphic function.
Just-in-Time Compilation
- Introduced Demangle function for handling name demangling.
Incremental C++
- Code generation fixes for
MakeFunctionCallable
for template operators and incorrect handling when the return type is a function pointer.
Misc
- Fixed a bug preventing users from disabling testing in CMake.
- Prefixed interpreter CMake option for better clarity.
- Multiple improvements in the continuous integration infrastructure including
compilation times, cache sizes, added new jobs for arm.
Special Kudos
This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):
FirstName LastName (#commits)
A B (N)
mcbarton (57)
Vipul Cariappa (11)
Aaron Jomy (7)
Aaron Jomy (3)
maximusron (1)
Vassil Vassilev (1)
Gnimuc (1)
What's Changed
- Make llvm build options match emscripten forge recipe by @mcbarton in #416
- Update
GetBinaryOperator
toGetOperator
by @Vipul-Cariappa in #394 - Use Ninja to build llvm in the ci (osx and Ubuntu) by @mcbarton in #423
- fix
MakeFunctionCallable
for dealing with public typedef to private type by @Vipul-Cariappa in #407 - Add correct options to build xeus-cpp-lite deployment correctly by @mcbarton in #420
- Fix emscripten build instructions by @mcbarton in #421
- Add example notebooks to deployment by @mcbarton in #426
- Reference notebook where everything is known to work by @mcbarton in #428
- Add jupyter notebook view as alternative to jupyter lab in deployment by @mcbarton in #427
- Upgrade Windows ci runners to Windows 2025 by @mcbarton in #429
- Add discord link to Readme by @mcbarton in #430
- Fix Windows 2025 ci by @mcbarton in #431
- Switch deploy runner to MacOS by @mcbarton in #432
- Restrict the use of
_s
(Annex K) functions to MSVC by @Gnimuc in #436 - Add instructions so users can add notebooks to Jupyter lite deployments by @mcbarton in #435
- Shallow clone emsdk by @mcbarton in #437
- Remove valgrind install emscripten.yml by @mcbarton in #438
- Move enable language in cmakelist.txt to avoid configure warning by @mcbarton in #439
- Shallow clone xeus cpp emscripten build by @mcbarton in #442
- Remove NVPTX llvm targets to build MacOS.yml by @mcbarton in #444
- Use Ninja for emscripten build of llvm by @mcbarton in #433
- Remove cppyy options llvm build stage ci by @mcbarton in #443
- Add nightly build forndeployment workflow by @mcbarton in #441
- Install libarchive-c to remove warning when building jupyter lite deployment by @mcbarton in #434
- Change from jupyter_server to jupyterlite-core jupyterlab by @mcbarton in #449
- Add emscripten build instructions to online documentation by @mcbarton in #450
- [test] Use platform pointer size in type reflection test by @aaronj0 in #452
- Replace std::regex in codecomplete to use llvm::regex by @aaronj0 in #424
- Improve unittest cmake and gitignore by @aaronj0 in #453
- [cmake] Perform symbol exports depending on winx86 and winx64 by @aaronj0 in #455
- Remove soname and zdefs flags emscripten build by @mcbarton in #446
- Add ubuntu 22.04 arm runners by @mcbarton in #457
- Fix deployment due to new jupyter lite xeus by @mcbarton in #458
- Implement
Demangle
andIsClassPolymorphic
APIs by @Vipul-Cariappa in #451 - Minor patches to unittests, improve offset initialization in getExecutionEngine by @aaronj0 in #459
- Reduce emscripten cache size by removing everything but llvm, clang and build folders by @mcbarton in #460
- Reduce emscripten cache size further by removing unneeded llvm and clang folders after build is done by @mcbarton in #462
- Reduce MacOS llvm cache by @mcbarton in #465
- Add back CUDA target to MacOS cling jobs by @mcbarton in #466
- Fix previous commit and move nvptx to targets to builds macos cling builds by @mcbarton in #467
- Reduce Windows cache size by only building necessary targets by @mcbarton in #468
- Remove Windows llvm 17 and 18 jobs from ci by @mcbarton in #464
- Reduce Ubuntu cache size by only building necessary targets by @mcbarton in #469
- Use clangInterpreter clangStaticAnalyzerCore instead of clang-repl target to reduce emscripten llvm cache size by @mcbarton in #470
- Update MacOS.yml to use gnu-sed by @mcbarton in #471
- Reduce Ubuntu cache size by not including benchmarks, examples and tests by @mcbarton in #472
- Reduce MacOS cache size by not including benchmarks, examples and tests by @mcbarton in #473
- Fix mistake added to main for Valgrind by @mcbarton in #474
- Add Ubuntu 24.04 arm runners to ci by @mcbarton in #463
- Add Ubuntu 24.04 x86 runners to ci by @mcbarton in #475
- Remove unneeded built tools and compile_commands.json build.ninja Ubuntu ci by @mcbarton in #476
- Add content to deployment needed to use all of demo notebook by @mcbarton in #479
- Remove osx x86 job and Ubuntu 22 emscripten jobs from ci by @mcbarton in #478
- Remove unneeded built tools and compile_commands.json build.ninja MacOS ci by @mcbarton in #477
- Split Ubuntu workflow into one for x86 and one for arm by @mcbarton in #480
- Fix Ubuntu arm badge by @mcbarton in #482
- Split macos workflow into x86 and arm by @mcbarton in #481
- Swap cling target for clingInterpreter llvm build Ubuntu ci by @mcbarton in #484
- Change cling to clingInterpreter target macos ci by @mcbarton in #485
- Update codecov/codecov-action to v5 ci by @mcbarton in #486
- Turn on cppyy for Ubuntu 24.04 x86 jobs by @mcbarton in #487
- Turn on Ubuntu 22.04 arm cppyy jobs by @mcbarton in #488
- Turn on Ubuntu 24.04 arm cppyy jobs ci by @mcbarton in #489
- No longer extern the
CreateInterpreter
API by @aaronj0 in #490 - Upgrade to emsdk to version 3.1.73 by @mcbarton in #456
- Check for clang binary before running resourcedir unittest by @aaronj0 in #497
- Fix clang-format workflow by @mcbarton in #494
- Add
GetEnumConstantDatamembers
function by @Vipul-Cariappa in #499 - Add
IsFunctionPointerType
function by @Vipul-Cariappa in #503 - Disable JitCall test that fails on windows + cling by @aaronj0 in #504
- Prefix the interpreter cmake options by @aaronj0 in #505
- fix
MakeFunctionCallable
's codegen when return type is a function pointer by @Vipul-Cariappa in #502 - fix bug in CMake preventing user from disabling testing by @aaronj0 in #506
- fix
MakeFunctionCallable
's codegen for templated operators by @Vipul-Cariappa in #509 - Add Is/Get Pointer & Reference functions by @Vipul-Cariappa in #510
Full Changelog: v1.5.0...v1.6.0