Commit Graph
18 Commits
Author SHA1 Message Date
Ole André Vadla Ravnås 1aa3cbca29 deps: Bump frida-core, frida-swift and gir2swift 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 02962abfa3 deps: Bump SwiftyPharo
Its VM now starts on macOS 27.
2026-09-26 20:43:53 +02:00
Ole André Vadla Ravnås 74f3f499e6 deps: Bump SwiftyPharo
Its VM now builds from frida/pharo-vm, and the image comes from the
release built that way.
2026-09-26 09:11:26 +02:00
Ole André Vadla Ravnås b9b5047928 deps: Bump Frida to 17.19.0 2026-09-25 17:55:01 +02:00
Ole André Vadla Ravnås 761ee194fb core: Run the Android emulator on Windows
The emulator's control channel was the only thing pulling grpc-swift
in, and with it swift-nio-ssl, which does not build on Windows at all
-- it has no branch for the platform and its PosixPort reaches for
mlock, lstat and readlink. Nothing here wants TLS: the endpoint is
plaintext on the loopback, and only seven calls are ever made.

So the wire is spoken directly. GRPCConnection opens one HTTP/2
stream per call over swift-nio-http2 and frames length-prefixed
protobuf into it; EmulatorControlClient names the seven. That drops
grpc-swift-2, grpc-swift-nio-transport, grpc-swift-protobuf and
swift-nio-ssl from the graph, along with 7840 lines of generated
service stubs. The generated messages stay.

The rest is what running it on Windows turned up:

  - AVD discovery split on "\n" and trimmed only .whitespaces, so
    every name kept a trailing \r and every AVD was dropped.
  - An AVD config spells its paths with backslashes, which URL keeps
    as ordinary characters rather than separators.
  - emulator and adb want .exe, and the SDK sits under LOCALAPPDATA.
  - Port reservation and process lookup move into HostPort and
    HostProcessLookup, which QemuMachine's two copies also wanted.
  - The launcher re-execs into QEMU there, so the discovery ini is
    named after that process; the one naming this launch's debug port
    is taken when the launcher's own is absent.

Frames still arrive through a mapping rather than the socket:
CreateFileMapping backs the same file:// handle the emulator is
handed elsewhere.

A guest without vsock is refused outright on Windows, where the
virtio-serial fallback would ask QEMU for a QMP UNIX socket and be
told "unix sockets are not available on windows".

LUMA_EMULATOR_DISPLAY_ONLY drives launch, control and streaming
without a guest agent. Against a Pixel_2 AVD it reports a 1080x1920
first frame and nine more in three seconds.
2026-09-17 13:13:47 +02:00
Ole André Vadla Ravnås 4767b7ded0 ci: Build QEMU on Windows from source
The emulators were downloaded from a qemu-<build> release built in
MSYS2 against MinGW's GLib and pixman, so the installer carried
those beside the vcpkg ones the app links: two copies of GLib and
friends.

Build them in the Windows job instead, against the vcpkg prefix,
cached like the other dependencies on the QEMU version and the
build script. QEMU builds under MinGW and nowhere else on Windows,
but UCRT64 and CLANGARM64 sit on the same C runtime as the MSVC
DLLs they now link, so a descriptor means the same on both sides.
The x86_64 environment moves from MINGW64 for that reason.

The emulators live a directory below the app, where nothing looks
for its GLib on its own, so they are started with the installation
root on PATH.

Windows drops out of the QEMU workflow, which macOS still uses.
2026-09-15 13:45:03 +02:00
Ole André Vadla Ravnås 00c053339e build: Bump SwiftyR2 and radare2
The new xcframework carries the RIOPlugin layout change.
2026-09-11 14:52:59 +02:00
Ole André Vadla Ravnås 69882da7a8 build: Pin radare2 to what the xcframework has
SwiftyR2 links a prebuilt radare2 on Apple platforms, so the other
platforms have to build the same revision.
2026-09-10 22:44:22 +02:00
Ole André Vadla Ravnås 54fdc97e6d build: Pin the QEMU archives
The scripts printed the build on stdout too, so the release body was a
truncated log without the checksums. Keep stdout for the notes.
2026-09-10 15:46:58 +02:00
Ole André Vadla Ravnås b7513fc6a1 build: Build and bundle QEMU for Windows
Extract with shortcuts, since the tarball's dangling symlinks defeat
MSYS2's habit of copying what one points at, and install base-devel
for the make and diff that meson and the build itself want.

Build the arm64 flavour on an arm64 runner under CLANGARM64, name the
archive after the arch -- the MSYS2 runtime is x86_64 whatever it
builds for -- and stage it into that installer too.
2026-09-10 14:41:40 +02:00
Ole André Vadla Ravnås 88c96c3423 build: Bundle QEMU in the macOS app
Unpack the published archive beside the LumaCore bundle, where the
app already looks, and sign every emulator for the hardened runtime;
TCG needs the JIT entitlements.

Name the build once now that more than Windows uses it, and keep a
checksum per platform.
2026-09-10 13:37:04 +02:00
Ole André Vadla Ravnås 278196d2e5 build: Bump dependencies
frida-swift to 141d200c, which carries FridaCore 17.18.0. frida-core
to 0602e5dc and radare2 to 84e28a44 for the Windows and Linux builds.
GRDB 7.11.1, swift-asn1 1.7.2, Sparkle 2.9.6.
2026-09-10 13:02:03 +02:00
Ole André Vadla Ravnås d7b10ee6b8 Move to the Frida with stable device ids
Pick up frida-core's caller-set Barebone device id and the binding
that passes it, so a machine's device keeps the same id.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås c0c0f49b3e Move to the Frida with guest fixes
frida-swift resolves the main context off a worker thread, a halted
guest can be let go, and a script that errors or overflows its stack
no longer takes the guest down. Fetch the matching barebone agents
from the 17.17.1-barebone lineage.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 38fc3a9e88 gtk: Take QEMU from our own release
Fetch the qemu-<build> archive our workflow publishes instead of
unpacking the upstream installer, dropping the 7-Zip requirement and
the list of graphics libraries that only existed to leave that
installer's cruft behind. The checksum pin moves to the new archive;
fill it in from the release notes once qemu-11.1.0-luma.1 has built.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 7bce5c84c5 gtk: Provision QEMU on Windows
Nothing packages a QEMU to build against, so the official build is
taken as it comes, pinned by date and by hash. Upstream publishes no
checksum, so the hash is of the bytes this was verified with.

Its installer wants administrator rights, which this script does not
ask for, so 7-Zip unpacks it instead. A QEMU built without the D-Bus
display cannot draw a guest, and is refused here rather than at boot.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 2f008edc2c Move to the Frida with the trampoline fix
Windows hooks the loader at startup, and until this the thunks wrote
over the slice next door.
2026-09-08 18:54:43 +02:00
Ole André Vadla Ravnås 205bbb9892 gtk: Bring up the Windows build
Bootstrap provisions Frida, radare2 and the Pharo VM at their pinned
revisions and skips what is present, so a re-run resumes. The Windows
CI job drives it a component at a time. Build from a plain shell via
vcvars, and order the prefixes so a stale Frida cannot win the load.
2026-09-08 18:54:43 +02:00