Repository navigation
v0.38.0
Single source-of-truth ge source manifest (tools/ge-sources.mk)
Module.mk and tools/prebuild.sh previously maintained parallel copies of the ge source list. Three real omissions were already in tree:
src/manifest.cpp+src/long_press.cppin Module.mk but missing from every prebuilt libge.a — silent linker risk for any consumer usingge::BuildManifestorge::LongPressWatchervia the prebuilts.src/log_apple.mmin prebuilt iOS but missing from Module.mk desktop — apple'sos_logsink wasn't linked into desktoplibge.a.
Same drift class that bit T39 verification (RefreshRateBoost_android.cpp missing from the top-level CMakeLists.txt's Android branch).
Approach
tools/ge-sources.mk is the canonical manifest. A handful of Make variables (GE_SRC_COMMON, GE_SRC_APPLE, GE_SRC_ANDROID, GE_SRC_STUB_*, GE_SRC_ORIENTATION_*, GE_SRC_BROKERED) factor the list along natural per-platform / per-modality lines. Three rollups expose what callers actually consume:
GE_SRC_DIRECT_APPLE_DESKTOPGE_SRC_DIRECT_IOSGE_SRC_DIRECT_ANDROID
Module.mk includes the manifest and uses GE_SRC_DIRECT_APPLE_DESKTOP + GE_SRC_BROKERED to compose ge/SRC_DIRECT + ge/SRC_BROKERED — same external variables consumer Makefiles already reference, just driven by one canonical list now.
tools/prebuild.sh selects a per-platform target name (GE_MANIFEST_TARGET = print-direct-ios / print-direct-android) and extracts the source list via make -s -f tools/ge-sources.mk $target piped through mapfile. The script's per-platform case statement no longer carries a GE_PLATFORM_SOURCES array at all.
Side effects
prebuilt/{ios-arm64,ios-arm64-simulator,android-arm64}/libge.anow includemanifest.cpp+long_press.cpp— the drift fix.- Desktop
libge.anow includeslog_apple.mm— apple'sos_logsink wired in on macOS dev builds the same way it is on iOS. - All three prebuilds regenerated; manifests refreshed; verifier exits 0 across all platforms.
Consumer impact
External Makefile consumers (multimaze2 etc.) keep working unchanged — ge/SRC_DIRECT + ge/SRC_BROKERED still resolve via Module.mk's existing surface. Pre-built consumers (iOS Distribution builds via build_project.rb) automatically link the newly-included .o's when they bump their ge submodule pointer.