Skip to content

CxxFlutterSwift: explicitly linkedLibrary backend C libs#21

Merged
lhoward merged 1 commit into
mainfrom
flutterswift-linked-libs
Apr 21, 2026
Merged

CxxFlutterSwift: explicitly linkedLibrary backend C libs#21
lhoward merged 1 commit into
mainfrom
flutterswift-linked-libs

Conversation

@lhoward

@lhoward lhoward commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

The .systemLibrary(pkgConfig: ...) targets (CGBM, CEGL, CXKBCommon, CLibDRM, CLibInput, CLibUDev, and the wayland-cursor/wayland-egl pair) provide pkg-config-driven cflags that compile cleanly, but SwiftPM doesn't always propagate their pkg-config --libs through a C++ intermediate target (CxxFlutterSwift) to the final executable link. The symptom, seen on cross-builds where pkg-config otherwise works, is ld.lld: undefined symbol: gbm_create_device / eglChooseConfig / xkb_keymap_mod_get_index / ... even though the headers were found.

Add an explicit .linkedLibrary list on CxxFlutterSwift, keyed off the same FlutterELinuxBackend switch that drives BackendDependencies, so the final executable is guaranteed to pick up the backend's C libs. The .systemLibrary + pkgConfig plumbing is kept as-is for the -I/-D side and for environments where SwiftPM does propagate --libs through.

Verified: FLUTTER_SWIFT_BACKEND=gbm swift build links counter cleanly, and the resulting binary's NEEDED list contains libgbm.so.1, libEGL.so.1, libGLESv2.so.2, libdrm.so.2, libinput.so.10, libudev.so.1, libxkbcommon.so.0.

The .systemLibrary(pkgConfig: ...) targets (CGBM, CEGL, CXKBCommon,
CLibDRM, CLibInput, CLibUDev, and the wayland-cursor/wayland-egl pair)
provide pkg-config-driven cflags that compile cleanly, but SwiftPM
doesn't always propagate their pkg-config --libs through a C++
intermediate target (CxxFlutterSwift) to the final executable link.
The symptom, seen on cross-builds where pkg-config otherwise works, is
ld.lld: undefined symbol: gbm_create_device / eglChooseConfig /
xkb_keymap_mod_get_index / ... even though the headers were found.

Add an explicit .linkedLibrary list on CxxFlutterSwift, keyed off the
same FlutterELinuxBackend switch that drives BackendDependencies, so
the final executable is guaranteed to pick up the backend's C libs.
The .systemLibrary + pkgConfig plumbing is kept as-is for the -I/-D
side and for environments where SwiftPM does propagate --libs through.

Verified: FLUTTER_SWIFT_BACKEND=gbm swift build links counter cleanly,
and the resulting binary's NEEDED list contains libgbm.so.1, libEGL.so.1,
libGLESv2.so.2, libdrm.so.2, libinput.so.10, libudev.so.1,
libxkbcommon.so.0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@lhoward lhoward merged commit a68c696 into main Apr 21, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant