-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathdockerfile
More file actions
138 lines (114 loc) · 3.65 KB
/
dockerfile
File metadata and controls
138 lines (114 loc) · 3.65 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
FROM ubuntu:24.04
ARG CURL_VERSION=7.62.0
ARG LLVM_VERSION=18
ARG XWIN_VERSION=0.8.0
ARG XWIN_TRIPLE=x86_64-unknown-linux-musl
ARG WINDOWS_CRT_VERSION=14.29.16.11
# Old known working = 10.0.20348
ARG WINDOWS_SDK_VERSION=10.0.26100
ADD "https://github.com/Jake-Shadle/xwin/releases/download/${XWIN_VERSION}/xwin-${XWIN_VERSION}-${XWIN_TRIPLE}.tar.gz" \
/tmp/xwin.tar.gz
RUN <<-EOF
set -eux
cd /tmp
tar -xf xwin.tar.gz
mv xwin-*/xwin /usr/local/bin/
rm -r xwin.tar.gz xwin-*
EOF
RUN apt update && apt install -y --no-install-recommends ca-certificates && apt autoremove -y && apt clean -y
RUN xwin --accept-license --arch x86 \
--crt-version ${WINDOWS_CRT_VERSION} --sdk-version ${WINDOWS_SDK_VERSION} \
splat --output /opt/xwin --include-debug-libs
RUN <<-EOF
set -eux
export DEBIAN_FRONTEND=noninteractive
apt update
apt install -y \
openssh-client \
build-essential cmake cppcheck gdb ninja-build valgrind \
clang-${LLVM_VERSION} clang-tools-${LLVM_VERSION} \
lld-${LLVM_VERSION} llvm-${LLVM_VERSION}
apt autoremove -y
apt clean -y
EOF
ENV LLVM_VERSION=${LLVM_VERSION}
ADD "https://gist.githubusercontent.com/19wintersp/084cd0d4810a25c11559107491525655/raw/31fce25c66837af5538857f1624ff7acb409d7a9/insensitive.c" \
/tmp/insensitive.c
RUN <<-EOF
set -eux
mkdir /opt/xwin/bin
cd /opt/xwin/bin
cc -O0 -std=c2x -fPIC -shared -o libinsensitive.so /tmp/insensitive.c
<<-EOF2 cat > cc
#!/bin/env bash
LD_PRELOAD=/opt/xwin/bin/libinsensitive.so \
clang-cl-$LLVM_VERSION \
-Wno-microsoft --target=i686-pc-windows-msvc /EHa /arch:SSE \
/imsvc /opt/xwin/crt/include /imsvc /opt/xwin/sdk/include/shared \
/imsvc /opt/xwin/sdk/include/ucrt /imsvc /opt/xwin/sdk/include/um \
\$@
EOF2
<<-EOF2 cat > lib
#!/bin/env bash
LD_PRELOAD= \
lld-link-$LLVM_VERSION /lib \
/libpath:/opt/xwin/crt/lib/x86 /libpath:/opt/xwin/sdk/lib/shared/x86 \
/libpath:/opt/xwin/sdk/lib/ucrt/x86 /libpath:/opt/xwin/sdk/lib/um/x86 \
\$@
EOF2
<<-EOF2 cat > link
#!/bin/env bash
LD_PRELOAD=/opt/xwin/bin/libinsensitive.so \
lld-link-$LLVM_VERSION \
/libpath:/opt/xwin/crt/lib/x86 /libpath:/opt/xwin/sdk/lib/shared/x86 \
/libpath:/opt/xwin/sdk/lib/ucrt/x86 /libpath:/opt/xwin/sdk/lib/um/x86 \
\$@
EOF2
<<-EOF2 cat > rc
#!/bin/env bash
LD_PRELOAD=/opt/xwin/bin/libinsensitive.so \
llvm-rc-$LLVM_VERSION \
/I /opt/xwin/crt/include /I /opt/xwin/sdk/include/shared \
/I /opt/xwin/sdk/include/ucrt /I /opt/xwin/sdk/include/um \
\$@
EOF2
ln -s `which llvm-mt-$LLVM_VERSION` mt
chmod u+x cc lib link rc
<<-EOF2 cat > xwin.cmake
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_AR "/opt/xwin/bin/lib")
set(CMAKE_C_COMPILER "/opt/xwin/bin/cc")
set(CMAKE_CXX_COMPILER "/opt/xwin/bin/cc")
set(CMAKE_LINKER "/opt/xwin/bin/link")
set(CMAKE_MT "/opt/xwin/bin/mt")
set(CMAKE_RC_COMPILER "/opt/xwin/bin/rc")
EOF2
EOF
ENV TOOLCHAIN=/opt/xwin/bin/xwin.cmake
ADD "https://curl.se/download/curl-${CURL_VERSION}.tar.gz" \
/tmp/curl.tar.gz
RUN <<-EOF
set -eux
cd /tmp
tar -xf curl.tar.gz
mv curl-* /opt/curl
EOF
RUN <<-EOF
set -eux
cd /opt/curl
sed -ie "s/\\\\xa9/(c)/g" lib/libcurl.rc src/curl.rc # curl/curl#7765
cmake --fresh \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN \
-DBUILD_CURL_EXE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF \
-DCURL_CA_PATH=none -DCURL_USE_LIBPSL=OFF \
-G Ninja -B build
ninja -C build
cd build/lib
cp libcurl_imp.lib libcurl_a.lib
cp libcurl_imp.lib libcurl_a_debug.lib
EOF
ENV CURL_INCLUDEDIR=/opt/curl/include/
ENV CURL_LIBRARYDIR=/opt/curl/build/lib/
ENV CURL_DEBUG_LIBRARYDIR=/opt/curl/build/lib/
USER ubuntu
CMD ["/bin/bash"]