|
MCC
|
Documentation: API and build guide · API class index
MCC is a portable music-composition library. CMake packages and direct source builds use C++17; Arduino source builds also support the C++11 mode selected by stock cores. This repository is a clean reconstruction of earlier Music Composition Core experiments and uses Foundation as its low-level dependency.
Clone MCC with its pinned build infrastructure:
For an existing checkout:
It contains music theory only: no MIDI concepts. Available modules:
The rules every type follows are in docs/Topics/Specification/MusicDomain.dox, and the roadmap is in ACTION_PLAN.md. The API documentation is published to the docs branch.
MCC consumes the CMake target Foundation::Foundation from Foundation 2.0.10 or a newer 2.x release, which builds on CPSTL 1.1.12 or newer (the cpstd standard vocabulary). Configuring MCC resolves it in this order (see cmake/MCCFoundation.cmake):
Downloads are kept in build/<preset>/_deps/ and reused. No setup is needed on a fresh machine:
To develop both libraries together, export Foundation next to MCC or build your working copy directly:
Use -DMCC_FETCH_FOUNDATION=OFF to forbid network access. MCC rejects Foundation packages recorded for a different platform preset.
Public MCC presets and scripts remain the supported interface. Their generic configure, build, test, install, clean, native preset, and cross-toolchain implementation comes from the pinned tools/RoModularBuild submodule; MCC retains its module options, Foundation resolution, packaging, examples, documentation, and release policy.
On Windows PowerShell:
Tests use GoogleTest through CMake FetchContent and link only the public MCC::MCC target.
Validate the installed package from an isolated downstream project:
This smoke test exports MCC, resolves it with find_package(MCC), links only MCC::MCC, and calls a Foundation API. It catches regressions in both package discovery and the transitive Foundation dependency.
Each export contains one Release MCC library, public headers, and a relocatable CMake package. When Foundation came from a package, it remains a separate dependency and must be discoverable when a downstream project calls find_package(MCC CONFIG REQUIRED); when it was built from sources, it is installed next to MCC.
The generated documentation starts at build/documentation/docs/html/index.html.
Install both Foundation and MCC as Arduino libraries, then include MCC, or only the modules the sketch uses. Every MCC header also brings in Foundation, so the Arduino builder finds both libraries:
No language-standard override is required. Arduino source mode supports the C++11 default used by the stock AVR core, while CMake packages and direct source builds continue to require C++17. Operations that need C++14 relaxed constexpr remain constexpr on modern toolchains and become ordinary inline functions in Arduino C++11 mode; their runtime behavior is unchanged.
./scripts/test-arduino.sh (or .\scripts\test-arduino.ps1) compiles every example sketch for the Arduino Uno with the core's default flags and fails on warnings emitted by MCC or its examples.
For MCC 0.5.2, all seven example sketches were also executed successfully on a physical Arduino Mega 2560 with the stock AVR core and its default C++11 mode. This is manual hardware evidence; CI currently automates compilation, not physical-board execution.
Copyright (c) 2026 José Manuel Romo. All rights reserved.
MCC is currently proprietary. No permission is granted for external use, compilation, modification, redistribution, integration, or commercial use without prior written authorization. See [LICENSE](LICENSE).
Shared embedded build support is pinned to RoModularBuild v0.6.2. The atmega328p_avrgcc_avr5, atmega2560_avrgcc_avr6 and stm32g0b1cbt6_armgcc_cortex_m0plus_soft presets retain repository-specific feature and package policy. CI compile/package checks do not establish physical board execution.