Skip to content

CppInterOp version 1.9.0

Latest

Choose a tag to compare

@aaronj0 aaronj0 released this 26 Mar 14:42
· 44 commits to main since this release

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::IsExplicit for constructors, conversion operators and deduction
    guides.
  • Adds Cpp::GetLanguage for language detection support.
  • Replaces string comparison with AST check in IsBuiltin for std::complex.
  • Merges GetCompleteName and GetQualifiedCompleteName into 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 SynthesizingCodeRAII for clang-repl (#819).
  • Uses a common compat::Value to avoid macro guard duplication.

Misc

  • Adds GetDoxygenComment to the API dispatch table.
  • Disables verbose LoadAPI message 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::fs instead of <filesystem> to check resource-dir.
  • Includes API after undef of windows.h LoadLibrary.
  • Removes using namespace std from 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 GetLanguage for 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 GetDoxygenComment to Dispatch table by @aaronj0 in #789
  • Add IsExplicit for 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 GetTypeFromScope by @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::Value to avoid macro guard duplication by @aaronj0 in #855
  • include API after undef windows.h LoadLibrary by @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 GetLanguage for 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

Full Changelog: v1.8.0...v1.9.0