-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathxbuild.sh
More file actions
139 lines (118 loc) · 2.47 KB
/
xbuild.sh
File metadata and controls
139 lines (118 loc) · 2.47 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
#!/bin/bash
# netmill: cross-build on Linux for Linux/AMD64 | Windows/AMD64
IMAGE_NAME=netmill-debianbw-builder
CONTAINER_NAME=netmill_debianBW_build
BUILD_TARGET=linux
if test "$OS" == "windows" ; then
IMAGE_NAME=netmill-win64-builder
CONTAINER_NAME=netmill_win64_build
BUILD_TARGET=mingw64
fi
ARGS=${@@Q}
set -xe
if ! test -d "../netmill" ; then
exit 1
fi
if ! podman container exists $CONTAINER_NAME ; then
if ! podman image exists $IMAGE_NAME ; then
# Create builder image
if test "$OS" == "windows" ; then
cat <<EOF | podman build -t $IMAGE_NAME -f - .
FROM debian:bookworm-slim
RUN apt update && \
apt install -y \
make
RUN apt install -y \
perl \
zstd zip unzip p7zip \
cmake patch dos2unix curl
RUN apt install -y \
gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64
EOF
else
cat <<EOF | podman build -t $IMAGE_NAME -f - .
FROM debian:bookworm-slim
RUN apt update && \
apt install -y \
make
RUN apt install -y \
perl \
zstd zip unzip p7zip \
cmake patch dos2unix curl
RUN apt install -y \
netcat-traditional dnsutils
RUN apt install -y \
gcc g++
RUN apt install -y \
clang llvm
RUN apt install -y \
libelf-dev
EOF
fi
fi
# Create builder container
podman create --attach --tty \
-v `pwd`/..:/src \
--name $CONTAINER_NAME \
$IMAGE_NAME \
bash -c "cd /src/netmill && source ./build_$BUILD_TARGET.sh"
fi
if ! podman container top $CONTAINER_NAME ; then
cat >build_$BUILD_TARGET.sh <<EOF
sleep 600
EOF
# Start container in background
podman start --attach $CONTAINER_NAME &
# Wait until the container is ready
sleep .5
while ! podman container top $CONTAINER_NAME ; do
sleep .5
done
fi
# Prepare build script
ARGS_OS=""
ODIR=_linux-amd64
XDP_ENABLE=1
TESTS_RUN=1
if test "$OS" == "windows" ; then
ARGS_OS="OS=windows \
COMPILER=gcc \
CROSS_PREFIX=x86_64-w64-mingw32-"
ODIR=_windows-amd64
XDP_ENABLE=0
TESTS_RUN=0
fi
cat >build_$BUILD_TARGET.sh <<EOF
set -xe
mkdir -p ../ffpack/$ODIR
make -j8 zlib \
-C ../ffpack/$ODIR \
-f ../Makefile \
-I .. \
$ARGS_OS
mkdir -p 3pt/$ODIR
make -j8 \
-C 3pt/$ODIR \
-f ../Makefile \
-I .. \
$ARGS_OS
if test "$XDP_ENABLE" == "1" ; then
make -j8 bpf xdp \
-C 3pt
fi
mkdir -p $ODIR
make -j8 \
-C $ODIR \
-f ../Makefile \
ROOT_DIR=../.. \
$ARGS_OS \
CFLAGS_USER=-fno-diagnostics-color \
$ARGS
if test "$TESTS_RUN" == "1" ; then
cd $ODIR/netmill-0
bash /src/netmill/test.sh all
fi
EOF
# Build inside the container
podman exec $CONTAINER_NAME \
bash -c "cd /src/netmill && source ./build_$BUILD_TARGET.sh"