Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
188 lines (176 loc) · 5.55 KB
/
Copy pathDockerfile
File metadata and controls
188 lines (176 loc) · 5.55 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# 跨平台 C/C++ 编译环境
# 基于 Ubuntu 24.04 Server,支持 AMD64 native 编译和 ARM64 交叉编译
FROM ubuntu:24.04
# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
# 创建工作目录
WORKDIR /workspace
# 配置国内镜像源加速下载
RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.aliyun.com@g' /etc/apt/sources.list.d/ubuntu.sources && \
sed -i 's@//.*security.ubuntu.com@//mirrors.aliyun.com@g' /etc/apt/sources.list.d/ubuntu.sources
# 更新包管理器并安装基础工具
RUN apt-get update && apt-get install -y \
# 基础系统工具
curl \
wget \
git \
unzip \
zip \
tar \
gzip \
xz-utils \
ca-certificates \
software-properties-common \
# 编译工具链 (不包含cmake,稍后单独安装最新版)
build-essential \
ninja-build \
pkg-config \
autotools-dev \
automake \
autoconf \
libtool \
# 文本处理
vim \
&& rm -rf /var/lib/apt/lists/*
# 安装最新版本的 CMake (支持 Aeron 3.30+ 要求)
RUN echo "安装最新版 CMake..." && \
# 移除旧版本 cmake
apt-get update && apt-get remove -y cmake || true && \
# 下载并安装 CMake 3.30.9
CMAKE_VERSION="3.30.9" && \
CMAKE_ARCH="x86_64" && \
CMAKE_URL="https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-${CMAKE_ARCH}.tar.gz" && \
cd /tmp && \
curl -fsSL "${CMAKE_URL}" -o cmake.tar.gz && \
tar -xzf cmake.tar.gz && \
mv cmake-${CMAKE_VERSION}-linux-${CMAKE_ARCH} /opt/cmake && \
ln -sf /opt/cmake/bin/cmake /usr/local/bin/cmake && \
ln -sf /opt/cmake/bin/ctest /usr/local/bin/ctest && \
ln -sf /opt/cmake/bin/cpack /usr/local/bin/cpack && \
ln -sf /opt/cmake/bin/ccmake /usr/local/bin/ccmake && \
rm -rf /tmp/cmake.tar.gz && \
# 验证 CMake 版本
cmake --version && \
rm -rf /var/lib/apt/lists/*
# 安装常用开发库 (AMD64 native)
RUN apt-get update && apt-get install -y \
# 加密和网络库
libssl-dev \
libcurl4-openssl-dev \
# UUID 库 (Aeron 需要)
uuid-dev \
libuuid1 \
# 压缩库
zlib1g-dev \
libbz2-dev \
liblzma-dev \
# 数据库
libsqlite3-dev \
libpq-dev \
# JSON 和 XML
libjson-c-dev \
libxml2-dev \
libxslt1-dev \
# 其他常用库
libreadline-dev \
libffi-dev \
libevent-dev \
libpcre3-dev \
# 图形和媒体库
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
# 数学库
libgsl-dev \
liblapack-dev \
libopenblas-dev \
&& rm -rf /var/lib/apt/lists/*
# 安装 ARM64 交叉编译工具链
RUN apt-get update && apt-get install -y \
# ARM64 交叉编译器和工具
binutils-aarch64-linux-gnu \
cpp-13-aarch64-linux-gnu \
cpp-aarch64-linux-gnu \
gcc-13-aarch64-linux-gnu \
gcc-13-aarch64-linux-gnu-base \
gcc-13-cross-base \
gcc-14-cross-base \
gcc-aarch64-linux-gnu \
g++-13-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
# ARM64 系统库
libc6-arm64-cross \
libc6-dev-arm64-cross \
linux-libc-dev-arm64-cross \
# ARM64 GCC 库
libgcc-13-dev-arm64-cross \
libgcc-s1-arm64-cross \
libstdc++6-arm64-cross \
# ARM64 运行时库
libasan8-arm64-cross \
libatomic1-arm64-cross \
libgomp1-arm64-cross \
libhwasan0-arm64-cross \
libitm1-arm64-cross \
liblsan0-arm64-cross \
libtsan2-arm64-cross \
libubsan1-arm64-cross \
&& rm -rf /var/lib/apt/lists/*
# 设置交叉编译环境变量
ENV CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc
ENV CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++
ENV AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar
ENV STRIP_aarch64_unknown_linux_gnu=aarch64-linux-gnu-strip
# 创建便捷的编译脚本
RUN echo '#!/bin/bash\n\
# 编译脚本帮助函数\n\
\n\
compile_x64() {\n\
echo "编译 AMD64 (x86_64) 版本..."\n\
export CC=gcc\n\
export CXX=g++\n\
export AR=ar\n\
export STRIP=strip\n\
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig\n\
"$@"\n\
}\n\
\n\
compile_arm64() {\n\
echo "编译 ARM64 (aarch64) 版本..."\n\
export CC=aarch64-linux-gnu-gcc\n\
export CXX=aarch64-linux-gnu-g++\n\
export AR=aarch64-linux-gnu-ar\n\
export STRIP=aarch64-linux-gnu-strip\n\
export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig\n\
export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig\n\
"$@"\n\
}\n\
\n\
show_help() {\n\
echo "交叉编译环境使用帮助:"\n\
echo " compile_x64 <命令> - 编译 AMD64 版本"\n\
echo " compile_arm64 <命令> - 编译 ARM64 版本"\n\
echo ""\n\
echo "示例:"\n\
echo " compile_x64 make"\n\
echo " compile_arm64 cmake .. && make"\n\
echo ""\n\
echo "可用的工具版本:"\n\
echo " CMake: $(cmake --version | head -1)"\n\
echo " Ninja: $(ninja --version)"\n\
echo " GCC (AMD64): $(gcc --version | head -1)"\n\
echo " GCC (ARM64): $(aarch64-linux-gnu-gcc --version | head -1)"\n\
}\n\
' > /usr/local/bin/build-helper && chmod +x /usr/local/bin/build-helper
# 设置 bashrc
RUN echo 'source /usr/local/bin/build-helper' >> /root/.bashrc && \
echo 'alias help="show_help"' >> /root/.bashrc && \
echo 'echo "欢迎使用 xsyphon/cross-builder:2.0 编译环境!"' >> /root/.bashrc && \
echo 'echo "✅ 支持 CMake 3.30+,可编译 Aeron C MediaDriver"' >> /root/.bashrc && \
echo 'echo "输入 help 查看使用帮助"' >> /root/.bashrc
# 设置默认工作目录
VOLUME ["/workspace"]
WORKDIR /workspace
# 默认启动 bash
CMD ["/bin/bash"]