-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild-all-kernels.sh
More file actions
executable file
·152 lines (122 loc) · 3.85 KB
/
build-all-kernels.sh
File metadata and controls
executable file
·152 lines (122 loc) · 3.85 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
#!/bin/bash
set -e
ARCH="arm"
CROSS_COMPILE="arm-linux-gnueabihf-"
CONFIG_LOCALVERSION="-citronics-lime"
ROOT_DIR=$(pwd)
TAG=$(git describe --tags --exact-match 2>/dev/null) || TAG=""
if [ -n "$TAG" ]; then
PKG_VERSION=${TAG#v}
else
PKG_VERSION=$(git describe --tags --always 2>/dev/null || echo "0.0")
PKG_VERSION=${PKG_VERSION#v}
echo "WARNING: No exact git tag on current commit. Using version: $PKG_VERSION" >&2
echo " For releases, tag first: git tag v2.0" >&2
fi
CONFIGS_DIR="$ROOT_DIR/configs"
SOURCES_DIR="$ROOT_DIR/sources"
OUTPUT_BASE="$ROOT_DIR/output"
BUILD_BASE="$ROOT_DIR/build"
KERNELS_CONF="$ROOT_DIR/kernels.conf"
if [ ! -f "$KERNELS_CONF" ]; then
echo "ERROR: kernels.conf not found" >&2
exit 1
fi
# Allow building a single kernel: ./build-all-kernels.sh msm8x74-6.15.y
FILTER="${1:-}"
mkdir -p "$SOURCES_DIR"
# Collect available kernel names for validation
AVAILABLE_KERNELS=()
while IFS= read -r line; do
[[ "$line" =~ ^[[:space:]]*# ]] && continue
[[ -z "${line// /}" ]] && continue
AVAILABLE_KERNELS+=("$(echo "$line" | awk '{print $1}')")
done < "$KERNELS_CONF"
# Validate filter against available kernels
if [ -n "$FILTER" ]; then
FOUND=0
for k in "${AVAILABLE_KERNELS[@]}"; do
[ "$k" = "$FILTER" ] && FOUND=1 && break
done
if [ "$FOUND" -eq 0 ]; then
echo "ERROR: Unknown kernel '$FILTER'" >&2
echo "Available kernels:" >&2
for k in "${AVAILABLE_KERNELS[@]}"; do
echo " - $k" >&2
done
exit 1
fi
fi
BUILD_COUNT=0
while IFS= read -r line; do
# Skip comments and empty lines
[[ "$line" =~ ^[[:space:]]*# ]] && continue
[[ -z "${line// /}" ]] && continue
NAME=$(echo "$line" | awk '{print $1}')
REPO_URL=$(echo "$line" | awk '{print $2}')
BRANCH=$(echo "$line" | awk '{print $3}')
# If filter is set, skip non-matching kernels
if [ -n "$FILTER" ] && [ "$NAME" != "$FILTER" ]; then
continue
fi
CONFIG_FILE="${CONFIGS_DIR}/${NAME}.config"
SOURCE_DIR="${SOURCES_DIR}/${NAME}"
OUTPUT_DIR="${OUTPUT_BASE}/${NAME}"
BUILD_DIR="${BUILD_BASE}/${NAME}"
rm -rf "$OUTPUT_DIR"
if [ ! -f "$CONFIG_FILE" ]; then
echo "ERROR: Config file not found: $CONFIG_FILE" >&2
exit 1
fi
echo "🔁 Building kernel: $NAME"
echo " Repo: $REPO_URL (branch: $BRANCH)"
echo " Config: $CONFIG_FILE"
# Clone or fetch the kernel source
if [ -d "$SOURCE_DIR/.git" ]; then
echo " Fetching updates..."
git -C "$SOURCE_DIR" fetch origin "$BRANCH"
else
echo " Cloning..."
rm -rf "$SOURCE_DIR"
git clone --single-branch --branch "$BRANCH" "$REPO_URL" "$SOURCE_DIR"
fi
# Clean up any previous build dir
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR"
# Copy source to build dir (avoid polluting the cached clone)
git -C "$SOURCE_DIR" checkout "origin/$BRANCH" -- .
cp -a "$SOURCE_DIR/." "$BUILD_DIR/"
cd "$BUILD_DIR"
# Setup build environment
export ARCH="$ARCH"
export CROSS_COMPILE="$CROSS_COMPILE"
export DEBEMAIL="info@citronics.eu"
export DEBFULLNAME="Citronics"
# Copy config and build
cp "$CONFIG_FILE" .config
make olddefconfig
echo "🚧 Building kernel .deb packages for $NAME"
make -j$(nproc) \
LOCALVERSION=$CONFIG_LOCALVERSION \
KDEB_PKGVERSION=$PKG_VERSION \
deb-pkg
# Move packages to output
mkdir -p "$OUTPUT_DIR"
cd "$BUILD_DIR/.."
mv ./*.deb "$OUTPUT_DIR/" 2>/dev/null || true
# Also check build dir parent for debs (different kernel versions place them differently)
cd "$BUILD_DIR"
mv ../*.deb "$OUTPUT_DIR/" 2>/dev/null || true
rm -f "$OUTPUT_DIR"/*-dbg_*.deb "$OUTPUT_DIR"/linux-libc-dev_*.deb
BUILD_COUNT=$((BUILD_COUNT + 1))
echo "✅ Done: $OUTPUT_DIR"
cd "$ROOT_DIR"
done < "$KERNELS_CONF"
if [ "$BUILD_COUNT" -eq 0 ]; then
echo "ERROR: No kernels were built." >&2
exit 1
fi
echo ""
echo "🎉 $BUILD_COUNT kernel(s) built successfully."
echo "Output:"
ls -la "$OUTPUT_BASE"/*/