From 26c6844d92750f180f59059e342ecd5017fd5502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= Date: Wed, 17 Jun 2026 05:16:40 -0400 Subject: [PATCH 1/3] ci: also build in/against ossia score (dev / SDK / JIT) Add a `score` job calling the score-addon.yml reusable workflow alongside the standalone back-end build, so the template is validated as an ossia score add-on too (dev tree + SDK + JIT tracks). release left off: the templates ship no release.sh. Renames the existing standalone job ci -> standalone for clarity. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/builds.yaml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/builds.yaml b/.github/workflows/builds.yaml index ef0dd3b..f0c98cb 100644 --- a/.github/workflows/builds.yaml +++ b/.github/workflows/builds.yaml @@ -11,7 +11,15 @@ concurrency: cancel-in-progress: true jobs: - ci: + # Build in/against ossia score: dev tree, SDK, and JIT artifact tracks. + score: + uses: ossia/actions/.github/workflows/score-addon.yml@master + secrets: inherit + with: + release: false # the templates ship no release.sh + + # Build the same object(s) standalone, one artifact per back-end. + standalone: uses: ossia/actions/.github/workflows/avnd-addon.yml@master secrets: inherit with: From e3d32687ac4921fb7b56b242a2d945bac5c845b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= Date: Wed, 17 Jun 2026 08:38:27 -0400 Subject: [PATCH 2/3] fix: integer plugin VERSION + addon NAME distinct from object class In an in-tree score build the bootstrap generator emits a Plugin_QtInterface class named after the addon NAME and bakes in VERSION. NAME equalled the avnd object class, so the generated class redefined it; and VERSION 1.0.0 was emitted as an invalid C++ float literal. Rename NAME (keeping the object CLASS and the standalone project()/artifact name) and use an integer VERSION. Co-Authored-By: Claude Opus 4.7 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29046bd..ec4ef16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ if(NOT Avendish_FOUND) find_package(Avendish REQUIRED) endif() -avnd_addon_init(NAME MyGeometry) +avnd_addon_init(NAME MyGeometryAddon) # The geometry / mesh back-ends -- ossia, Max/MSP, TouchDesigner SOP and POP, and Godot # (a Node3D producing an ArrayMesh) -- plus `dump`, the plain-C++ introspection target @@ -25,7 +25,7 @@ avnd_addon_init(NAME MyGeometry) # is ignored and only the ossia process is produced. Back-ends whose SDK is absent are # silently skipped. avnd_addon_object( - BASE MyGeometry + BASE MyGeometryAddon C_NAME my_geometry CLASS MyGeometry BACKENDS dump ossia max:GEOMETRY touchdesigner:SOP touchdesigner:POP godot:GEOMETRY @@ -36,4 +36,4 @@ avnd_addon_object( src/UI.hpp src/Processor.hpp) -avnd_addon_finalize(NAME MyGeometry UUID 95b84273-50ed-4968-b32c-5c82bf3d184c VERSION 1.0.0) +avnd_addon_finalize(NAME MyGeometryAddon UUID 95b84273-50ed-4968-b32c-5c82bf3d184c VERSION 1) From d1b8c952579c1108e5455814516987cd2e5ec20c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= Date: Wed, 17 Jun 2026 12:52:35 -0400 Subject: [PATCH 3/3] fix: addon-scope static CRT (Windows/Max) + complete ui in the class header - Set CMAKE_MSVC_RUNTIME_LIBRARY at the top of the addon so the object library and every back-end external share the /MT runtime the Max external needs (mixing /MT and /MD trips MSVC LNK2038). - Include UI.hpp from the class header so ::ui is a complete type for the score plugin generator (it includes the class header, not the MAIN_FILE, and needs the full ui to build the process layer). Co-Authored-By: Claude Opus 4.7 --- CMakeLists.txt | 8 ++++++++ src/Model.hpp | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ec4ef16..ac84a33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,14 @@ cmake_minimum_required(VERSION 3.24 FATAL_ERROR) project(MyGeometry CXX) +# Max/MSP externals link the static CRT (/MT) on Windows, as the official +# max-sdk-base requires. Set it for the whole addon -- before Avendish and the +# object library are created -- so every target shares one runtime; mixing /MT +# and /MD trips MSVC with LNK2038. (CMP0091 is NEW via cmake_minimum_required.) +if(MSVC) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +endif() + # Use the Avendish the host already provides (e.g. ossia score); otherwise fetch it. # The same CMakeLists builds this as an ossia/score add-on or as a standalone object. find_package(Avendish QUIET) diff --git a/src/Model.hpp b/src/Model.hpp index 295dd75..0bba460 100644 --- a/src/Model.hpp +++ b/src/Model.hpp @@ -197,3 +197,8 @@ inline void MyGeometry::operator()() outputs.geometry.dirty_mesh = true; outputs.geometry.dirty_transform = true; } + +// Pull in the UI so MyGeometry::ui is complete wherever this class header is +// included -- the score plugin generator includes the class header, not the +// MAIN_FILE, and needs the full ui type to build the process's layer. +#include "UI.hpp"