1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Dockerfile.windows
#
# Cross-compiles asyncai to self-contained PE32+ x86-64 binaries using the
# mingw-w64 toolchain. Build it from the repo root:
#
# container build --platform linux/arm64 -m 8G -c 4 \
# -f Dockerfile.windows -o type=local,dest=$HOME/.tmp/asyncai-win-out .
#
# The build container architecture does not affect the Windows binaries; it
# only needs to run on your machine. Use linux/amd64 on Intel hosts.
FROM rust:1.97-bookworm AS build
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc-mingw-w64-x86-64 \
g++-mingw-w64-x86-64 \
binutils-mingw-w64-x86-64 \
nasm \
cmake \
perl \
make \
pkg-config \
ca-certificates \
&& rm -rf /var/lib/apt/lists/* \
&& rustup target add x86_64-pc-windows-gnu
ENV CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc
# Static CRT so the .exe does not need libgcc_s_seh-1.dll/libwinpthread-1.dll.
ENV CARGO_TARGET_X86_64_PC_WINDOWS_GNU_RUSTFLAGS="-C target-feature=+crt-static"
WORKDIR /work
# The image's pinned 1.97.x toolchain is used here; rust-toolchain.toml is
# intentionally not copied so rustup does not switch to a 1.97.0 toolchain
# that lacks the Windows target installed below.
COPY Cargo.toml Cargo.lock ./
COPY src ./src
COPY prompts ./prompts
RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/work/target \
cargo build --release --bins --target x86_64-pc-windows-gnu -j 2 && \
mkdir /out && \
cp target/x86_64-pc-windows-gnu/release/asyncai.exe \
target/x86_64-pc-windows-gnu/release/asyncai-mcp-simple.exe \
target/x86_64-pc-windows-gnu/release/socialweb-computer-kcp-readonly.exe \
target/x86_64-pc-windows-gnu/release/socialweb-computer-kcp-readwrite.exe \
/out/
FROM scratch
COPY --from=build /out/ /out/