Jenkins: Port Linux build improvements (lighter SDL2, AppStream metadata) from CLI branch
This commit is contained in:
@@ -8,6 +8,15 @@
|
||||
#
|
||||
# Recipe file for appimage-builder.
|
||||
#
|
||||
# build.sh processes conditional comments based on CMakeCache
|
||||
# options at the end of each line. For example, a line ending in:
|
||||
#
|
||||
# # if QT:BOOL=ON
|
||||
#
|
||||
# will be removed from the dynamically-generated copy of this
|
||||
# file if "QT" is not a boolean option set to ON, either through
|
||||
# a -D definition or the option's default value in CMakeLists.
|
||||
#
|
||||
#
|
||||
# Authors: RichardG, <richardg867@gmail.com>
|
||||
#
|
||||
@@ -18,7 +27,7 @@ version: 1
|
||||
AppDir:
|
||||
path: ./archive_tmp
|
||||
app_info:
|
||||
id: !ENV 'net.${project_lower}.${project}'
|
||||
id: !ENV '${project_id}'
|
||||
name: !ENV '${project}'
|
||||
icon: !ENV '${project_icon}'
|
||||
version: !ENV '${project_version}'
|
||||
@@ -34,29 +43,31 @@ AppDir:
|
||||
- sourceline: 'deb http://deb.debian.org/debian bullseye-updates main'
|
||||
key_url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xac530d520f2f3269f5e98313a48449044aad5c5d'
|
||||
include:
|
||||
- libevdev2
|
||||
- libedit2 # if (CLI:BOOL=ON|QT:BOOL=OFF)
|
||||
- libevdev2 # if QT:BOOL=ON
|
||||
- libfluidsynth2
|
||||
- libfreetype6
|
||||
- libgbm1
|
||||
- libgl1
|
||||
- libgles2
|
||||
- libglvnd0
|
||||
- libglx0
|
||||
- libgbm1 # if QT:BOOL=ON
|
||||
- libgl1 # if QT:BOOL=ON
|
||||
- libgles2 # if QT:BOOL=ON
|
||||
- libglvnd0 # if QT:BOOL=ON
|
||||
- libglx0 # if QT:BOOL=ON
|
||||
- libgs9
|
||||
- libpng16-16
|
||||
- libqt5core5a
|
||||
- libqt5gui5
|
||||
- libqt5widgets5
|
||||
- libslirp0
|
||||
- libsndio7.0
|
||||
- libwayland-client0
|
||||
- libx11-6
|
||||
- libx11-xcb1
|
||||
- libxcb1
|
||||
- libxcb-render0
|
||||
- libxcb-shape0
|
||||
- libxcb-shm0
|
||||
- libxcb-xfixes0
|
||||
- libqt5core5a # if QT:BOOL=ON
|
||||
- libqt5gui5 # if QT:BOOL=ON
|
||||
- libqt5widgets5 # if QT:BOOL=ON
|
||||
- libsixel1 # if CLI:BOOL=ON
|
||||
- libslirp0 # if SLIRP_EXTERNAL:BOOL=ON
|
||||
- libsndio7.0 # if OPENAL:BOOL=ON
|
||||
- libwayland-client0 # if QT:BOOL=ON
|
||||
- libx11-6 # if QT:BOOL=ON
|
||||
- libx11-xcb1 # if QT:BOOL=ON
|
||||
- libxcb1 # if QT:BOOL=ON
|
||||
- libxcb-render0 # if QT:BOOL=ON
|
||||
- libxcb-shape0 # if QT:BOOL=ON
|
||||
- libxcb-shm0 # if QT:BOOL=ON
|
||||
- libxcb-xfixes0 # if QT:BOOL=ON
|
||||
- zlib1g
|
||||
files:
|
||||
exclude:
|
||||
@@ -69,8 +80,10 @@ AppDir:
|
||||
- usr/lib/cmake
|
||||
- usr/lib/pkgconfig
|
||||
- usr/s[a-gi-zA-Z]*
|
||||
- usr/share/[a-hj-zA-Z]*
|
||||
- usr/share/[a-hj-ln-zA-Z]*
|
||||
- usr/share/i[a-bd-zA-Z]*
|
||||
- usr/share/m[a-df-zA-Z]*
|
||||
- var
|
||||
AppImage:
|
||||
arch: !ENV '${arch_appimage}'
|
||||
file_name: '-n' # nasty hack to disable metainfo validation
|
||||
|
46
.ci/build.sh
46
.ci/build.sh
@@ -20,6 +20,7 @@
|
||||
# to produce Jenkins-like builds on your local machine by following these notes:
|
||||
#
|
||||
# - Run build.sh without parameters to see its usage
|
||||
# - Any boolean CMake definitions (-D ...=ON/OFF) must be ON or OFF to ensure correct behavior
|
||||
# - For Windows (MSYS MinGW) builds:
|
||||
# - Packaging requires 7-Zip on Program Files
|
||||
# - Packaging the Ghostscript DLL requires 32-bit and/or 64-bit Ghostscript on Program Files
|
||||
@@ -93,7 +94,6 @@ make_tar() {
|
||||
|
||||
# Set common variables.
|
||||
project=86Box
|
||||
project_lower=86box
|
||||
cwd=$(pwd)
|
||||
|
||||
# Parse arguments.
|
||||
@@ -355,7 +355,7 @@ else
|
||||
esac
|
||||
|
||||
# Establish general dependencies.
|
||||
pkgs="cmake ninja-build pkg-config git wget p7zip-full wayland-protocols tar gzip file"
|
||||
pkgs="cmake ninja-build pkg-config git wget p7zip-full wayland-protocols tar gzip file appstream"
|
||||
if [ "$(dpkg --print-architecture)" = "$arch_deb" ]
|
||||
then
|
||||
pkgs="$pkgs build-essential"
|
||||
@@ -606,6 +606,10 @@ else
|
||||
sdl_ss=ON
|
||||
fi
|
||||
|
||||
# Build SDL2 with video systems (and some dependencies) only if the SDL interface is used.
|
||||
sdl_ui=OFF
|
||||
grep -qiE "^QT:BOOL=ON" build/CMakeCache.txt || sdl_ui=ON
|
||||
|
||||
# Build rtmidi without JACK support to remove the dependency on libjack.
|
||||
prefix="$cache_dir/rtmidi-4.0.0"
|
||||
if [ -d "$prefix" ]
|
||||
@@ -626,15 +630,25 @@ else
|
||||
wget -qO - https://www.libsdl.org/release/SDL2-2.0.20.tar.gz | tar zxf - -C "$cache_dir" || rm -rf "$prefix"
|
||||
fi
|
||||
rm -rf "$cache_dir/sdlbuild"
|
||||
cmake -G Ninja -D SDL_DISKAUDIO=OFF -D SDL_DIRECTFB_SHARED=OFF -D SDL_OPENGL=OFF -D SDL_OPENGLES=OFF -D SDL_OSS=OFF -D SDL_ALSA=$sdl_ss \
|
||||
-D SDL_ALSA_SHARED=$sdl_ss -D SDL_JACK=$sdl_ss -D SDL_JACK_SHARED=$sdl_ss -D SDL_ESD=OFF -D SDL_ESD_SHARED=OFF -D SDL_PIPEWIRE=$sdl_ss \
|
||||
cmake -G Ninja -D SDL_SHARED=ON -D SDL_STATIC=OFF \
|
||||
\
|
||||
-D SDL_AUDIO=$sdl_ss -D SDL_DUMMYAUDIO=$sdl_ss -D SDL_DISKAUDIO=OFF -D SDL_OSS=OFF -D SDL_ALSA=$sdl_ss -D SDL_ALSA_SHARED=$sdl_ss \
|
||||
-D SDL_JACK=$sdl_ss -D SDL_JACK_SHARED=$sdl_ss -D SDL_ESD=OFF -D SDL_ESD_SHARED=OFF -D SDL_PIPEWIRE=$sdl_ss \
|
||||
-D SDL_PIPEWIRE_SHARED=$sdl_ss -D SDL_PULSEAUDIO=$sdl_ss -D SDL_PULSEAUDIO_SHARED=$sdl_ss -D SDL_ARTS=OFF -D SDL_ARTS_SHARED=OFF \
|
||||
-D SDL_NAS=$sdl_ss -D SDL_NAS_SHARED=$sdl_ss -D SDL_SNDIO=$sdl_ss -D SDL_SNDIO_SHARED=$sdl_ss -D SDL_FUSIONSOUND=OFF \
|
||||
-D SDL_FUSIONSOUND_SHARED=OFF -D SDL_LIBSAMPLERATE=$sdl_ss -D SDL_LIBSAMPLERATE_SHARED=$sdl_ss -D SDL_X11=OFF -D SDL_X11_SHARED=OFF \
|
||||
-D SDL_WAYLAND=OFF -D SDL_WAYLAND_SHARED=OFF -D SDL_WAYLAND_LIBDECOR=OFF -D SDL_WAYLAND_LIBDECOR_SHARED=OFF -D SDL_WAYLAND_QT_TOUCH=OFF \
|
||||
-D SDL_RPI=OFF -D SDL_VIVANTE=OFF -D SDL_VULKAN=OFF -D SDL_KMSDRM=OFF -D SDL_KMSDRM_SHARED=OFF -D SDL_OFFSCREEN=OFF \
|
||||
-D SDL_HIDAPI_JOYSTICK=ON -D SDL_VIRTUAL_JOYSTICK=ON -D SDL_SHARED=ON -D SDL_STATIC=OFF -S "$prefix" -B "$cache_dir/sdlbuild" \
|
||||
-D "CMAKE_TOOLCHAIN_FILE=$cwd_root/toolchain.cmake" -D "CMAKE_INSTALL_PREFIX=$cwd_root/archive_tmp/usr" || exit 99
|
||||
-D SDL_FUSIONSOUND_SHARED=OFF -D SDL_LIBSAMPLERATE=$sdl_ss -D SDL_LIBSAMPLERATE_SHARED=$sdl_ss \
|
||||
\
|
||||
-D SDL_VIDEO=$sdl_ui -D SDL_X11=$sdl_ui -D SDL_X11_SHARED=$sdl_ui -D SDL_WAYLAND=$sdl_ui -D SDL_WAYLAND_SHARED=$sdl_ui \
|
||||
-D SDL_WAYLAND_LIBDECOR=$sdl_ui -D SDL_WAYLAND_LIBDECOR_SHARED=$sdl_ui -D SDL_WAYLAND_QT_TOUCH=OFF -D SDL_RPI=OFF -D SDL_VIVANTE=OFF \
|
||||
-D SDL_VULKAN=OFF -D SDL_KMSDRM=$sdl_ui -D SDL_KMSDRM_SHARED=$sdl_ui -D SDL_OFFSCREEN=$sdl_ui -D SDL_RENDER=$sdl_ui \
|
||||
\
|
||||
-D SDL_JOYSTICK=ON -D SDL_HIDAPI_JOYSTICK=ON -D SDL_VIRTUAL_JOYSTICK=ON \
|
||||
\
|
||||
-D SDL_ATOMIC=OFF -D SDL_EVENTS=ON -D SDL_HAPTIC=OFF -D SDL_POWER=OFF -D SDL_THREADS=$sdl_ui -D SDL_TIMERS=ON -D SDL_FILE=OFF \
|
||||
-D SDL_LOADSO=ON -D SDL_CPUINFO=OFF -D SDL_FILESYSTEM=$sdl_ui -D SDL_DLOPEN=OFF -D SDL_SENSOR=OFF -D SDL_LOCALE=OFF \
|
||||
\
|
||||
-D "CMAKE_TOOLCHAIN_FILE=$cwd_root/toolchain.cmake" -D "CMAKE_INSTALL_PREFIX=$cwd_root/archive_tmp/usr" \
|
||||
-S "$prefix" -B "$cache_dir/sdlbuild" || exit 99
|
||||
cmake --build "$cache_dir/sdlbuild" -j$(nproc) || exit 99
|
||||
cmake --install "$cache_dir/sdlbuild" || exit 99
|
||||
|
||||
@@ -653,11 +667,17 @@ else
|
||||
echo $pkg $version >> archive_tmp/README
|
||||
done
|
||||
|
||||
# Archive metadata.
|
||||
project_id=$(ls src/unix/assets/*.*.xml | head -1 | grep -oP '/\K([^/]+)(?=\.[^\.]+\.[^\.]+$)')
|
||||
metainfo_base=archive_tmp/usr/share/metainfo
|
||||
mkdir -p "$metainfo_base"
|
||||
cp -p "src/unix/assets/$project_id."*".xml" "$metainfo_base/$project_id.appdata.xml"
|
||||
|
||||
# Archive icons.
|
||||
icon_base=archive_tmp/usr/share/icons
|
||||
mkdir -p "$icon_base"
|
||||
cp -rp src/unix/assets/[0-9]*x[0-9]* "$icon_base/"
|
||||
icon_name=$(ls "$icon_base/"[0-9]*x[0-9]*/* | head -1 | grep -oP '/\K([^/]+)(?=\.[^\.]+$)')
|
||||
project_icon=$(ls "$icon_base/"[0-9]*x[0-9]*/* | head -1 | grep -oP '/\K([^/]+)(?=\.[^\.]+$)')
|
||||
|
||||
# Archive executable, while also stripping it if requested.
|
||||
mkdir -p archive_tmp/usr/local/bin
|
||||
@@ -702,9 +722,9 @@ else
|
||||
esac
|
||||
|
||||
# Get version for AppImage metadata.
|
||||
project_version=$(grep -oP '#define\s+EMU_VERSION\s+"\K([^"]+)' "build/src/include/$project_lower/version.h" 2> /dev/null)
|
||||
project_version=$(grep -oP '#define\s+EMU_VERSION\s+"\K([^"]+)' "build/src/include/"*"/version.h" 2> /dev/null)
|
||||
[ -z "$project_version" ] && project_version=unknown
|
||||
build_num=$(grep -oP '#define\s+EMU_BUILD_NUM\s+\K([0-9]+)' "build/src/include/$project_lower/version.h" 2> /dev/null)
|
||||
build_num=$(grep -oP '#define\s+EMU_BUILD_NUM\s+\K([0-9]+)' "build/src/include/"*"/version.h" 2> /dev/null)
|
||||
[ -n "$build_num" -a "$build_num" != "0" ] && project_version="$project_version-b$build_num"
|
||||
|
||||
# Download appimage-builder if necessary.
|
||||
@@ -716,7 +736,7 @@ else
|
||||
rm -rf "$project-"*".AppImage"
|
||||
|
||||
# Run appimage-builder in extract-and-run mode for Docker compatibility.
|
||||
project="$project" project_lower="$project_lower" project_version="$project_version" project_icon="$icon_name" arch_deb="$arch_deb" \
|
||||
project="$project" project_id="$project_id" project_version="$project_version" project_icon="$project_icon" arch_deb="$arch_deb" \
|
||||
arch_appimage="$arch_appimage" APPIMAGE_EXTRACT_AND_RUN=1 ./appimage-builder.AppImage --recipe .ci/AppImageBuilder.yml
|
||||
status=$?
|
||||
|
||||
|
Reference in New Issue
Block a user