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.
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.txtcontains stale text describing a monolithicsrc/main.cppstate.Required build tree:
native/objc3c/CMakeLists.txt: project setup and top-level add-subdirectory calls only.native/objc3c/cmake/Objc3CompilerOptions.cmakeObjc3Module.cmakeObjc3SourceSizeGate.cmakeObjc3Sanitizers.cmakeObjc3Platform.cmakenative/objc3c/src/CMakeLists.txt: module target wiring.CMakeLists.txtfiles 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_configobjc3c_lexobjc3c_parse_*objc3c_sema_*objc3c_lower_*objc3c_ir_*objc3c_runtime_*objc3c_pipeline_*objc3c_artifacts_*objc3c_driverobjc3c_frontend_c_apiobjc3c_tools_*Required work:
Maximum effort shared hoist pass:
Objc3CompilerOptions.cmake.Objc3Platform.cmake.Objc3SourceSizeGate.cmake.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/srcreturns no stale build commentary or old target alias.