mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 02:51:10 +00:00
* feat: art-first library cards with a display menu for size, title and storage * build: use native arm64 docker on Apple Silicon and add a fast deploy loop * fix: address review feedback on library cards and local build scripts
103 lines
6.2 KiB
Bash
Executable File
103 lines
6.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
here=$(cd "$(dirname "$0")" && pwd)
|
|
repo=$(cd "$here/../.." && pwd)
|
|
. "$repo/tools/docker_platform.sh"
|
|
|
|
native=0
|
|
if [ "${1:-}" = --native ]; then native=1; shift; fi
|
|
out=${1:-$here/out}
|
|
case "$out" in /*) ;; *) out="$PWD/$out" ;; esac
|
|
|
|
vkinc=${VK_INCLUDE:-}
|
|
if [ -z "$vkinc" ]; then
|
|
for ndk in "${ANDROID_NDK_HOME:-}" "${ANDROID_NDK_LATEST_HOME:-}" \
|
|
$(ls -d "${ANDROID_HOME:-$HOME/Library/Android/sdk}"/ndk/* 2>/dev/null | sort -r); do
|
|
[ -n "$ndk" ] || continue
|
|
cand=$(ls -d "$ndk"/toolchains/llvm/prebuilt/*/sysroot/usr/include 2>/dev/null | head -1)
|
|
if [ -n "$cand" ] && [ -f "$cand/vulkan/vk_layer.h" ]; then vkinc=$cand; break; fi
|
|
done
|
|
fi
|
|
[ -n "$vkinc" ] && [ -f "$vkinc/vulkan/vulkan_core.h" ] || { echo "tools/vr/build.sh: no Vulkan headers (set VK_INCLUDE)" >&2; exit 1; }
|
|
|
|
work="$repo/build/vr"
|
|
rm -rf "$work" && mkdir -p "$work/include"
|
|
cp -R "$vkinc/vulkan" "$work/include/"
|
|
if [ -d "$vkinc/vk_video" ]; then cp -R "$vkinc/vk_video" "$work/include/"; fi
|
|
mkdir -p "$work/out/droiddeck/bin/linuxarm64" "$work/out/layer"
|
|
|
|
compile() {
|
|
local cmd=(sh -c '
|
|
set -e
|
|
cc -std=c11 -O2 -Wall -Wextra -Werror -Ibuild/vr/include -Itools/vr/src \
|
|
-o build/vr/test_fence_tracker tools/vr/tests/test_fence_tracker.c
|
|
build/vr/test_fence_tracker
|
|
cc -std=c11 -O2 -Wall -Wextra -Wno-unused-parameter -pthread -Ibuild/vr/include \
|
|
-o build/vr/test_timeline_bridge tools/vr/tests/test_timeline_bridge.c -ldl
|
|
build/vr/test_timeline_bridge
|
|
cc -std=c11 -O2 -Wall -Wextra -Wno-unused-parameter -pthread -Ibuild/vr/include \
|
|
-o build/vr/test_compositor_submit tools/vr/tests/test_compositor_submit.c -ldl
|
|
build/vr/test_compositor_submit
|
|
c++ -std=c++17 -O2 -Wall -Wextra -Werror -Itools/vr/src \
|
|
-o build/vr/test_render_target tools/vr/tests/test_render_target.cpp
|
|
build/vr/test_render_target
|
|
c++ -std=c++17 -O2 -Wall -Wextra -Werror -Ibuild/vr/include -Itools/vr/src \
|
|
-o build/vr/test_presenter_image tools/vr/tests/test_presenter_image.cpp
|
|
build/vr/test_presenter_image
|
|
c++ -std=c++17 -O2 -Wall -Wextra -Werror -Itools/vr/src \
|
|
-o build/vr/test_spatial_tracking tools/vr/tests/test_spatial_tracking.cpp
|
|
build/vr/test_spatial_tracking
|
|
c++ -std=c++17 -O2 -Wall -Wextra -Werror -Itools/vr/src \
|
|
-o build/vr/test_adaptive_pose tools/vr/tests/test_adaptive_pose.cpp
|
|
build/vr/test_adaptive_pose
|
|
c++ -std=c++17 -O2 -Wall -Wextra -Wno-unused-parameter -pthread -Itools/vr/src \
|
|
-o build/vr/test_optical_controller tools/vr/tests/test_optical_controller.cpp
|
|
build/vr/test_optical_controller
|
|
cc -shared -fPIC -O2 -Wall -Wextra -Werror \
|
|
-o build/vr/libdroiddeck_vr_scheduling.so tools/vr/src/scheduling.c -ldl
|
|
cc -O2 -Wall -Wextra -Werror -o build/vr/test_scheduling tools/vr/tests/test_scheduling.c
|
|
LD_PRELOAD="$PWD/build/vr/libdroiddeck_vr_scheduling.so" build/vr/test_scheduling
|
|
c++ -std=c++17 -O2 -Wall -Wextra -Werror -Wno-unused-parameter -Itools/vr/src \
|
|
-o build/vr/test_joycon tools/vr/tests/test_joycon.cpp
|
|
build/vr/test_joycon
|
|
c++ -std=c++17 -O2 -Wall -Wextra -Werror -Wno-unused-parameter -Itools/vr/src \
|
|
-o build/vr/make_hand_models tools/vr/make_hand_models.cpp
|
|
mkdir -p build/vr/out/droiddeck/resources
|
|
build/vr/make_hand_models build/vr/out/droiddeck/resources/rendermodels
|
|
mkdir -p build/vr/stub
|
|
aarch64-linux-gnu-g++ -std=c++17 -O2 -Wall -Wextra -Werror -static-libstdc++ -static-libgcc -pthread \
|
|
-o build/vr/out/droiddeck/bin/linuxarm64/xr-display-mode tools/vr/src/xr_display_mode.cpp
|
|
aarch64-linux-gnu-gcc -shared -fPIC -O2 -Wl,-soname,libwayland-client.so.0 -Itools/vr/third_party/wayland \
|
|
-o build/vr/stub/libwayland-client.so tools/vr/src/wayland_client_stub.c
|
|
aarch64-linux-gnu-gcc -c -fPIC -O2 -Itools/vr/third_party/wayland -o build/vr/xdg-shell-protocol.o \
|
|
app/src/main/cpp/waylandcomp/generated/xdg-shell-protocol.c
|
|
aarch64-linux-gnu-g++ -std=c++17 -shared -fPIC -O2 -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers \
|
|
-fvisibility=hidden -static-libstdc++ -static-libgcc -pthread -Wl,-z,defs -Ibuild/vr/include \
|
|
-Itools/vr/third_party/wayland -Iapp/src/main/cpp/waylandcomp/generated \
|
|
-o build/vr/out/droiddeck/bin/linuxarm64/driver_droiddeck.so tools/vr/src/driver_droiddeck.cpp tools/vr/src/presenter.cpp \
|
|
build/vr/xdg-shell-protocol.o -Lbuild/vr/stub -lwayland-client -ldl
|
|
aarch64-linux-gnu-gcc -std=c11 -c -fPIC -O2 -Wall -Wextra -Wno-unused-parameter -fvisibility=hidden -pthread \
|
|
-DDROIDDECK_WSI_CAPTURE -Ibuild/vr/include -o build/vr/vk_layer.o tools/vr/src/vk_layer_droiddeck_vr.c
|
|
aarch64-linux-gnu-g++ -std=c++17 -shared -fPIC -O2 -Wall -Wextra -Wno-missing-field-initializers -fvisibility=hidden -pthread \
|
|
-static-libstdc++ -static-libgcc -Wl,-z,defs -Wl,-z,nodelete -Ibuild/vr/include \
|
|
-o build/vr/out/layer/libVkLayer_droiddeck_vr.so build/vr/vk_layer.o tools/vr/src/wsi_capture.cpp -ldl
|
|
aarch64-linux-gnu-gcc -shared -fPIC -O2 -Wall -Wextra -Werror -Wl,-z,defs \
|
|
-o build/vr/out/layer/libdroiddeck_vr_scheduling.so tools/vr/src/scheduling.c -ldl
|
|
aarch64-linux-gnu-strip --strip-unneeded build/vr/out/droiddeck/bin/linuxarm64/driver_droiddeck.so \
|
|
build/vr/out/layer/libVkLayer_droiddeck_vr.so build/vr/out/layer/libdroiddeck_vr_scheduling.so')
|
|
if [ "$native" = 1 ]; then
|
|
(cd "$repo" && "${cmd[@]}")
|
|
else
|
|
docker run --rm --platform "${DROIDDECK_DOCKER_PLATFORM:-linux/amd64}" --user "$(id -u):$(id -g)" -v "$repo:/src" -w /src \
|
|
"${DROIDDECK_BUILD_IMAGE:-droiddeck-local-cross:24.04-v3}" "${cmd[@]}"
|
|
fi
|
|
}
|
|
compile
|
|
|
|
cp -R "$here/driver_droiddeck/." "$work/out/droiddeck/"
|
|
cp "$here/layer/VK_LAYER_DROIDDECK_vr.json" "$here/layer/VK_LAYER_DROIDDECK_vr_implicit.json" "$work/out/layer/"
|
|
rm -rf "$out/droiddeck" "$out/layer"
|
|
mkdir -p "$out"
|
|
cp -R "$work/out/droiddeck" "$work/out/layer" "$out/"
|
|
echo "built $out/droiddeck and $out/layer"
|