From 81cf8b68eca2636574f3d0a9fa1cf0b428c163e9 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Sat, 1 Aug 2026 04:30:34 +0800 Subject: [Backend] Establish standalone build infrastructure Add the thin monorepo CMake entry point and an independently configurable backend project. Enforce the Clang/C++23 toolchain, expose Make/Ninja-neutral tests and developer checks, export an installable RCCBackend package, and introduce the first Support error abstraction. --- cmake/modules/RCCPreventInSourceBuild.cmake | 8 ++++++ cmake/modules/RCCProjects.cmake | 40 +++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 cmake/modules/RCCPreventInSourceBuild.cmake create mode 100644 cmake/modules/RCCProjects.cmake (limited to 'cmake/modules') diff --git a/cmake/modules/RCCPreventInSourceBuild.cmake b/cmake/modules/RCCPreventInSourceBuild.cmake new file mode 100644 index 0000000..97b3392 --- /dev/null +++ b/cmake/modules/RCCPreventInSourceBuild.cmake @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: GPL-3.0-or-later + +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + message( + FATAL_ERROR + "RCC does not support in-source builds. Configure a separate build directory." + ) +endif() diff --git a/cmake/modules/RCCProjects.cmake b/cmake/modules/RCCProjects.cmake new file mode 100644 index 0000000..59c4fc5 --- /dev/null +++ b/cmake/modules/RCCProjects.cmake @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: GPL-3.0-or-later + +set(RCC_KNOWN_PROJECTS backend) +set(RCC_DEFAULT_PROJECTS backend) + +set( + RCC_ENABLE_PROJECTS + "${RCC_DEFAULT_PROJECTS}" + CACHE STRING + "Semicolon-separated RCC projects to build, or 'all'" +) + +function(rcc_add_enabled_projects RCCSourceRoot) + if(RCC_ENABLE_PROJECTS STREQUAL "all") + set(EnabledProjects ${RCC_KNOWN_PROJECTS}) + else() + set(EnabledProjects ${RCC_ENABLE_PROJECTS}) + endif() + + if(NOT EnabledProjects) + message(FATAL_ERROR "RCC_ENABLE_PROJECTS must name at least one project") + endif() + + list(REMOVE_DUPLICATES EnabledProjects) + + foreach(Project IN LISTS EnabledProjects) + if(NOT Project IN_LIST RCC_KNOWN_PROJECTS) + message( + FATAL_ERROR + "Unknown RCC project '${Project}'. Known projects: ${RCC_KNOWN_PROJECTS}" + ) + endif() + endforeach() + + # Component order is controlled here rather than by the user-provided list. + # Future inter-project dependency closure will also be resolved here. + if("backend" IN_LIST EnabledProjects) + add_subdirectory("${RCCSourceRoot}/backend" "${CMAKE_BINARY_DIR}/backend") + endif() +endfunction() -- cgit v1.2.3