Skip to content

[HC-016] Hard cutover CMake and build graph to the new module tree #8147

@doublemover

Description

@doublemover

Hard cutover policy: the build graph matches the new ownership tree exactly. No stale monolithic comments, no catchall compiler target, no old source files compiled through alias targets, no oversized source file accepted by build lint.

Source facts already established:

  • native/objc3c/CMakeLists.txt contains stale text describing a monolithic src/main.cpp state.
  • Current CMake already defines split libraries, while the source files remain oversized.
  • Source-size limits are not enforced by the build.

Required build tree:

  • native/objc3c/CMakeLists.txt: project setup and top-level add-subdirectory calls only.
  • native/objc3c/cmake/
    • Objc3CompilerOptions.cmake
    • Objc3Module.cmake
    • Objc3SourceSizeGate.cmake
    • Objc3Sanitizers.cmake
    • Objc3Platform.cmake
  • native/objc3c/src/CMakeLists.txt: module target wiring.
  • Per-module CMakeLists.txt files under:
    • ast/
    • config/
    • lex/
    • parse/
    • sema/
    • lower/
    • ir/
    • runtime/
    • pipeline/
    • artifacts/
    • io/
    • support/
    • driver/
    • tools/

Required target families:

  • objc3c_support_*
  • objc3c_io_*
  • objc3c_ast_*
  • objc3c_config
  • objc3c_lex
  • objc3c_parse_*
  • objc3c_sema_*
  • objc3c_lower_*
  • objc3c_ir_*
  • objc3c_runtime_*
  • objc3c_pipeline_*
  • objc3c_artifacts_*
  • objc3c_driver
  • objc3c_frontend_c_api
  • objc3c_tools_*

Required work:

  • Replace the top-level native CMake file with a small orchestration file.
  • Add one CMake module helper for declaring Objective-C 3.0 compiler modules.
  • Add source-size gate integration that fails any native source file over 1,500 lines and any native model header over 1,000 lines.
  • Compile each ownership module as its own target.
  • Link dependencies according to the ownership tree.
  • Delete target aliases for old module names.
  • Delete stale architecture comments and old monolithic state text.

Maximum effort shared hoist pass:

  • Hoist shared compiler options to Objc3CompilerOptions.cmake.
  • Hoist platform-specific settings to Objc3Platform.cmake.
  • Hoist source-size checks to Objc3SourceSizeGate.cmake.
  • Hoist sanitizer flags to Objc3Sanitizers.cmake.

Acceptance criteria:

  • rg "monolithic|src/main.cpp state|planned steady-state|alias target|compat" native/objc3c/CMakeLists.txt native/objc3c/cmake native/objc3c/src returns no stale build commentary or old target alias.
  • CMake config fails on oversized source files.
  • Ninja or MSBuild target names mirror the module tree.
  • Native build passes after the split.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions