Skip to content

Commit 3dc6a28

Browse files
committed
Bundle Python runtime in Debian package
1 parent fc3fbac commit 3dc6a28

1 file changed

Lines changed: 60 additions & 9 deletions

File tree

scripts/build_deb.sh

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,28 @@ BUILD_ROOT="$DIST_DIR/deb-build"
88

99
PKG_NAME="sky130-flow-gui"
1010
VERSION="${1:-0.1.0}"
11-
ARCH="${2:-all}"
11+
ARCH="${2:-$(dpkg --print-architecture)}"
1212
PKG_DIR="$BUILD_ROOT/${PKG_NAME}_${VERSION}_${ARCH}"
13+
PACKAGE_VENV="$PKG_DIR/opt/$PKG_NAME/.venv"
14+
SOURCE_VENV="$REPO_ROOT/.venv"
15+
16+
REQUIRED_GUI_PACKAGES=(
17+
libxcb-cursor0
18+
libxkbcommon-x11-0
19+
libxcb-xkb1
20+
libxcb-xfixes0
21+
libgl1
22+
)
23+
24+
RECOMMENDED_GUI_PACKAGES=(
25+
libxcb-xinerama0
26+
libxcb-icccm4
27+
libxcb-image0
28+
libxcb-keysyms1
29+
libxcb-render-util0
30+
libxcb-randr0
31+
libxcb-shape0
32+
)
1333

1434
rm -rf "$PKG_DIR"
1535
mkdir -p \
@@ -27,6 +47,14 @@ cp -R \
2747

2848
cp -R "$REPO_ROOT/scripts" "$PKG_DIR/opt/$PKG_NAME/"
2949

50+
if [ -x "$SOURCE_VENV/bin/python" ]; then
51+
cp -a "$SOURCE_VENV" "$PACKAGE_VENV"
52+
else
53+
python3 -m venv "$PACKAGE_VENV"
54+
"$PACKAGE_VENV/bin/python" -m pip install --upgrade pip
55+
"$PACKAGE_VENV/bin/python" -m pip install -r "$REPO_ROOT/requirements.txt"
56+
fi
57+
3058
find "$PKG_DIR/opt/$PKG_NAME" -type d -name "__pycache__" -prune -exec rm -rf {} +
3159
find "$PKG_DIR/opt/$PKG_NAME" -type f \( -name "*.pyc" -o -name "*.pyo" \) -delete
3260

@@ -35,12 +63,26 @@ cat > "$PKG_DIR/usr/bin/$PKG_NAME" <<'EOF'
3563
set -euo pipefail
3664
3765
APP_ROOT="/opt/sky130-flow-gui"
66+
LOG_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/sky130-flow-gui"
67+
LOG_FILE="$LOG_DIR/launcher.log"
68+
69+
mkdir -p "$LOG_DIR"
70+
exec >>"$LOG_FILE" 2>&1
71+
72+
echo
73+
echo "[$(date -Is)] launching sky130-flow-gui"
74+
3875
cd "$APP_ROOT"
3976
4077
if [ -x "$APP_ROOT/.venv/bin/python" ]; then
4178
exec "$APP_ROOT/.venv/bin/python" -m app.main "$@"
4279
fi
4380
81+
if python3 -c "import PySide6, pyqtgraph" >/dev/null 2>&1; then
82+
exec python3 -m app.main "$@"
83+
fi
84+
85+
echo "Missing packaged or system Python dependencies for SKY130 Flow GUI."
4486
exec python3 -m app.main "$@"
4587
EOF
4688
chmod 755 "$PKG_DIR/usr/bin/$PKG_NAME"
@@ -52,14 +94,26 @@ cp "$REPO_ROOT/app/resources/sky130-flow-gui.svg" \
5294

5395
INSTALLED_SIZE="$(du -sk "$PKG_DIR" | awk '{print $1}')"
5496

97+
REQUIRED_DEPENDS="python3"
98+
for pkg in "${REQUIRED_GUI_PACKAGES[@]}"; do
99+
REQUIRED_DEPENDS+=", ${pkg}"
100+
done
101+
102+
RECOMMENDS_FIELD=""
103+
if [ "${#RECOMMENDED_GUI_PACKAGES[@]}" -gt 0 ]; then
104+
RECOMMENDS_JOINED="$(IFS=, ; echo "${RECOMMENDED_GUI_PACKAGES[*]}")"
105+
RECOMMENDS_FIELD="Recommends: ${RECOMMENDS_JOINED}"
106+
fi
107+
55108
cat > "$PKG_DIR/DEBIAN/control" <<EOF
56109
Package: $PKG_NAME
57110
Version: $VERSION
58111
Section: electronics
59112
Priority: optional
60113
Architecture: $ARCH
61114
Maintainer: ROMERUU-dev
62-
Depends: python3, python3-venv, python3-pip
115+
Depends: $REQUIRED_DEPENDS
116+
$RECOMMENDS_FIELD
63117
Installed-Size: $INSTALLED_SIZE
64118
Description: SKY130 workflow manager with setup assistant
65119
A desktop app for coordinating simulation, extraction, LVS,
@@ -75,14 +129,11 @@ APP_ROOT="/opt/sky130-flow-gui"
75129
cat <<MSG
76130
SKY130 Flow GUI was installed under $APP_ROOT.
77131
78-
This package intentionally does not create $APP_ROOT/.venv during post-install.
79-
Prepare the Python environment later as the normal desktop user if needed:
80-
cd "$APP_ROOT"
81-
python3 -m venv .venv
82-
.venv/bin/python -m pip install --upgrade pip
83-
.venv/bin/python -m pip install -r requirements.txt
132+
This package includes its own Python runtime under:
133+
$APP_ROOT/.venv
84134
85-
Do not create or repair .venv under /opt with sudo/pkexec.
135+
If the desktop launcher fails, check:
136+
~/.local/state/sky130-flow-gui/launcher.log
86137
MSG
87138
88139
update-desktop-database /usr/share/applications >/dev/null 2>&1 || true

0 commit comments

Comments
 (0)