Introduction
This document contains the release notes for the language interoperability library CppInterOp, release 1.9.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.9.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.
This release drops LLVM 18 support, adds CUDA/GPU support with automatic SDK and architecture detection, improves introspection and type reflection APIs, hardens the incremental C++ and dispatch infrastructure, and includes ROOT-Cling integration changes for Cppyy.
External Dependencies
- CppInterOp v1.9.0 supports llvm 19-21
- Drops llvm18 support.
Introspection
- Adds
Cpp::IsExplicitfor constructors, conversion operators and deduction
guides. - Adds
Cpp::GetLanguagefor language detection support. - Replaces string comparison with AST check in
IsBuiltinforstd::complex. - Merges
GetCompleteNameandGetQualifiedCompleteNameinto a shared helper. - Makes
GetTypeAsString()use the printing policy from ASTContext.
Just-in-Time Compilation
- Cling specific changes required for Cppyy in ROOT (#787).
- Improved CUDA interpreter creation, uses clang::Driver to detect CUDA SDK and GPU architecture.
- Adds incremental CUB BlockReduce test for CUDA.
Incremental C++
- Fixes
SynthesizingCodeRAIIfor clang-repl (#819). - Uses a common
compat::Valueto avoid macro guard duplication.
Misc
- Adds
GetDoxygenCommentto the API dispatch table. - Disables verbose
LoadAPImessage unless debug mode is enabled. - Allows reset of dispatch data to test load/unload.
- Prioritizes user-provided resource-dir over auto-detection (#791).
- Uses
llvm::sys::fsinstead of<filesystem>to check resource-dir. - Includes API after undef of windows.h
LoadLibrary. - Removes
using namespace stdfrom CppInterOp.cpp (#801). - Removes no-soname from cmake (#816).
- Numerous improvements to CMake configuration, CI workflows, and documentation.
Fixed Bugs
- Fix error-prone failure path in
GetTypeFromScope. - Fix
GetLanguagefor CUDA/HIP where CXX standard was returned. - Fix CUDA runtime error detection in tests.
- Fixes thread-safe initialization of Dispatch API using function-local
static (#844). - Sets default build type if not provided.
Special Kudos
This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):
Matthew Barton (21; CI, Emscripten, build and deployment improvements)
Aaron Jomy (19; CUDA support, Dispatch, IsExplicit API, CI, build and cmake fixes)
Vassil Vassilev (5; coverage, test fixes, release preparation)
Vipul Cariappa (3; ROOT-Cling integration, SynthesizingCodeRAII fix, resource-dir)
Adriteyo Das (3; IsBuiltin AST check, GetCompleteName refactoring, default build type)
Emery Conrad (2; Dispatch reset, path resolution in detection test)
Kerem Şahin (1; language detection support)
Jonas Hahnfeld (1; resource-dir check)
Caevan Lin (1; thread-safe Dispatch API initialization)
Janak Shah (1; printing policy fix)
What's Changed
- [ci] Drop cppyy support and testing with LLVM18 by @aaronj0 in #788
- Add
GetDoxygenCommentto Dispatch table by @aaronj0 in #789 - Add
IsExplicitfor constructors and conversion operators by @aaronj0 in #790 - prioritize resource-dir provided by user over auto-detecting by @Vipul-Cariappa in #791
- Turn cppyy to on for cling jobs by @mcbarton in #792
- [cmake] explicitly link against stdc++fs if GCC<9 by @aaronj0 in #794
- Expand Build_and_Test_CppInterOp action to deal with Emscripten case by @mcbarton in #781
- [interop] Avoid usage of
<filesystem>by @hahnjo in #797 - Fix deployment job name to enable deployment after #781 by @mcbarton in #798
- make path resolved absolute in detection test by @conrade-ctc in #800
- ROOT-Cling specific changes required for Cppyy in ROOT by @Vipul-Cariappa in #787
- enable dispatch load/reload in single binary, add error message with dlerror by @conrade-ctc in #799
- Remove using namespace std; from CppInterOp.cpp by @mcbarton in #801
- Merge Emscripten ci stages into 1 by @mcbarton in #805
- Reduce initial memory in creation of tests to 64Mb by @mcbarton in #807
- Drop llvm 18 support by @mcbarton in #785
- Remove -sSUPPORT_LONGJMP=wasm and use of EMCC_CFLAGS when building xeus-cpp by @mcbarton in #803
- Update Ubuntu cling jobs to use gcc 14 as compiler by @mcbarton in #820
- Remove ci matrix options which are off by @mcbarton in #815
- fix SynthesizingCodeRAII for clang-repl by @Vipul-Cariappa in #819
- [dispatch] disable verbose loadapi message unless debug by @aaronj0 in #822
- Fix llvm, lld and clang max supported versions in cmake by @mcbarton in #825
- Run ci for python 3.12 to 3.14 by @mcbarton in #823
- [ci] Use dated ROOT/llvm tag to build Cling 1.3 by @aaronj0 in #827
- fix error prone failure path in
GetTypeFromScopeby @aaronj0 in #826 - Fix macos cmake build by @tryh4rd-26 in #829
- make GetTypeAsString() use printing policy from ASTContext by @codegallivant in #840
- Constrain xeus to < 6.0.0 in Emscripten environment by @mcbarton in #843
- Remove restriction on xeus by @mcbarton in #845
- Re: Adding API functions for detecting interpreter language and standard by @keremsahn in #839
- Merge GetCompleteName and GetQualifiedCompleteName into shared helper by @tryh4rd-26 in #846
- Replace string comparison with AST check in IsBuiltin for std::complex by @tryh4rd-26 in #842
- Fix read the docs developer documentation by @mcbarton in #824
- Fix Windows Emscripten build instructions in Emscripten-build-instructions.md by @mcbarton in #817
- use a common
compat::Valueto avoid macro guard duplication by @aaronj0 in #855 - include API after undef windows.h
LoadLibraryby @aaronj0 in #854 - Remove no soname from cmake by @mcbarton in #816
- Make use of self hosted runners by @mcbarton in #848
- Create CPPINTEROP_COMMON_WASM_TEST_COMPILE_FLAGS and CPPINTEROP_COMMON_WASM_TEST_LINK_FLAGS cmake variables to avoid repetition when creating tests by @mcbarton in #818
- Remove duplicate Valgrind install ci by @mcbarton in #865
- Fix self-hosted runner labels for CUDA CI job by @aaronj0 in #864
- [ci] Rely on setup compiler step for gcc12, add apt-get update by @aaronj0 in #867
- Fix FIXME: thread-safe initialization of DispatchInitializer by @voyager-jhk in #844
- Remove Emscripten llvm 20 jobs by @mcbarton in #869
- [ci] Move the coverage to the cuda bot. by @vgvassilev in #868
- Fix
GetLanguagefor CUDA/HIP where CXX standard was returned by @aaronj0 in #870 - Fix CUDA tests by @aaronj0 in #866
- [cuda] Add CUB BlockReduce test by @aaronj0 in #872
- [debug] CUB tests on NUC machine by @aaronj0 in #874
- Prepare for release v1.9.0 by @aaronj0 in #876
New Contributors
- @conrade-ctc made their first contribution in #800
- @tryh4rd-26 made their first contribution in #829
- @codegallivant made their first contribution in #840
- @keremsahn made their first contribution in #839
- @voyager-jhk made their first contribution in #844
Full Changelog: v1.8.0...v1.9.0