Skip to content

Commit f0cf217

Browse files
committed
build: add Vulkan-Loader to dependencies
1 parent cd7158a commit f0cf217

File tree

3 files changed

+171
-3
lines changed

3 files changed

+171
-3
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ jobs:
8686
if: (steps.cache-sysroot.outputs.cache-matched-key == '' || github.event.inputs.rebuild_sysroot == 'true') && needs.configuration.outputs.runner == env.RUNNER_IMAGE
8787
run: |
8888
brew uninstall cmake
89-
brew install bison pkg-config gettext glib-utils libgpg-error nasm make meson
90-
pip3 install --user six pyparsing
89+
brew install bison pkg-config gettext glib-utils libgpg-error nasm make meson cmake
90+
pip3 install --user six pyparsing pyyaml setuptools
9191
rm -f /usr/local/lib/pkgconfig/*.pc
9292
- name: Build Sysroot
9393
if: steps.cache-sysroot.outputs.cache-matched-key == '' || github.event.inputs.rebuild_sysroot == 'true'

patches/sources

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ WEBKIT_COMMIT="e9f29559b009011a1ee420d67e1994d3d5295f1a"
4343
WEBKIT_SUBDIRS="Source/ThirdParty/ANGLE Configurations Tools/ccache"
4444
EPOXY_REPO="https://github.com/utmapp/libepoxy.git"
4545
EPOXY_COMMIT="5014658f79e4d6872a1ad6754da9098ccd9d4fc5"
46+
VULKAN_LOADER_REPO="https://github.com/KhronosGroup/Vulkan-Loader.git"
47+
VULKAN_LOADER_COMMIT="057ca1e5f2b61bbb3942e3a7464d488d5bde4a3c"
4648
VIRGLRENDERER_REPO="https://github.com/utmapp/virglrenderer.git"
4749
VIRGLRENDERER_COMMIT="31d91c3860749534aed7bd26af8f47f7de412681"
4850

scripts/build_dependencies.sh

Lines changed: 167 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ check_env () {
6969
python_module_test distutils >/dev/null 2>&1 || { echo >&2 "${RED}'setuptools' not found in your Python 3 installation.${NC}"; exit 1; }
7070
python_module_test yaml >/dev/null 2>&1 || { echo >&2 "${RED}'pyyaml' not found in your Python 3 installation.${NC}"; exit 1; }
7171
command -v meson >/dev/null 2>&1 || { echo >&2 "${RED}You must install 'meson' on your host machine.${NC}"; exit 1; }
72+
command -v cmake >/dev/null 2>&1 || { echo >&2 "${RED}You must install 'cmake' on your host machine.${NC}"; exit 1; }
7273
command -v msgfmt >/dev/null 2>&1 || { echo >&2 "${RED}You must install 'gettext' on your host machine.\n\t'msgfmt' needs to be in your \$PATH as well.${NC}"; exit 1; }
7374
command -v glib-mkenums >/dev/null 2>&1 || { echo >&2 "${RED}You must install 'glib-utils' on your host machine.\n\t'glib-mkenums' needs to be in your \$PATH as well.${NC}"; exit 1; }
7475
command -v glib-compile-resources >/dev/null 2>&1 || { echo >&2 "${RED}You must install 'glib-utils' on your host machine.\n\t'glib-compile-resources' needs to be in your \$PATH as well.${NC}"; exit 1; }
@@ -165,6 +166,7 @@ download_all () {
165166
fi
166167
clone $WEBKIT_REPO $WEBKIT_COMMIT "$WEBKIT_SUBDIRS"
167168
clone $EPOXY_REPO $EPOXY_COMMIT
169+
clone $VULKAN_LOADER_REPO $VULKAN_LOADER_COMMIT
168170
clone $VIRGLRENDERER_REPO $VIRGLRENDERER_COMMIT
169171
clone $HYPERVISOR_REPO $HYPERVISOR_COMMIT
170172
clone $LIBUCONTEXT_REPO $LIBUCONTEXT_COMMIT
@@ -255,6 +257,128 @@ generate_meson_cross() {
255257
echo "endian = 'little'" >> $cross
256258
}
257259

260+
generate_cmake_toolchain() {
261+
toolchain="$1"
262+
263+
# Extract compiler executables
264+
CC_BIN="${CC%% *}"
265+
CXX_BIN="${CXX%% *}"
266+
OBJC_BIN="${OBJCC%% *}"
267+
268+
echo "# Automatically generated - do not modify" > "$toolchain"
269+
echo "" >> "$toolchain"
270+
echo "cmake_minimum_required(VERSION 3.28)" >> "$toolchain"
271+
echo "" >> "$toolchain"
272+
273+
#
274+
# Target platform
275+
#
276+
case $PLATFORM in
277+
ios_simulator* )
278+
echo "set(CMAKE_SYSTEM_NAME iOS)" >> "$toolchain"
279+
echo "set(CMAKE_OSX_SYSROOT iphonesimulator)" >> "$toolchain"
280+
;;
281+
ios* )
282+
echo "set(CMAKE_SYSTEM_NAME iOS)" >> "$toolchain"
283+
echo "set(CMAKE_OSX_SYSROOT iphoneos)" >> "$toolchain"
284+
;;
285+
visionos_simulator* )
286+
echo "set(CMAKE_SYSTEM_NAME visionOS)" >> "$toolchain"
287+
echo "set(CMAKE_OSX_SYSROOT xrsimulator)" >> "$toolchain"
288+
;;
289+
visionos* )
290+
echo "set(CMAKE_SYSTEM_NAME visionOS)" >> "$toolchain"
291+
echo "set(CMAKE_OSX_SYSROOT xros)" >> "$toolchain"
292+
;;
293+
macos )
294+
echo "set(CMAKE_SYSTEM_NAME Darwin)" >> "$toolchain"
295+
;;
296+
esac
297+
echo "" >> "$toolchain"
298+
299+
#
300+
# Architecture
301+
#
302+
echo "set(CMAKE_SYSTEM_PROCESSOR \"$ARCH\")" >> "$toolchain"
303+
echo "set(CMAKE_OSX_ARCHITECTURES \"$ARCH\")" >> "$toolchain"
304+
echo "" >> "$toolchain"
305+
306+
#
307+
# Deployment target (derive from -m* flags if present, otherwise leave unset)
308+
#
309+
case "$PLATFORM" in
310+
ios* )
311+
echo "set(CMAKE_OSX_DEPLOYMENT_TARGET \"$IOS_SDKMINVER\")" >> "$toolchain"
312+
;;
313+
visionos* )
314+
echo "set(CMAKE_OSX_DEPLOYMENT_TARGET \"$VISIONOS_SDKMINVER\")" >> "$toolchain"
315+
;;
316+
macos )
317+
echo "set(CMAKE_OSX_DEPLOYMENT_TARGET \"$MAC_SDKMINVER\")" >> "$toolchain"
318+
;;
319+
esac
320+
echo "" >> "$toolchain"
321+
322+
#
323+
# Compilers
324+
#
325+
echo "set(CMAKE_C_COMPILER \"$CC_BIN\")" >> "$toolchain"
326+
echo "set(CMAKE_CXX_COMPILER \"$CXX_BIN\")" >> "$toolchain"
327+
echo "set(CMAKE_OBJC_COMPILER \"$OBJC_BIN\")" >> "$toolchain"
328+
echo "" >> "$toolchain"
329+
330+
#
331+
# Binutils
332+
#
333+
echo "set(CMAKE_AR \"$AR\")" >> "$toolchain"
334+
echo "set(CMAKE_NM \"$NM\")" >> "$toolchain"
335+
echo "set(CMAKE_RANLIB \"$RANLIB\")" >> "$toolchain"
336+
echo "set(CMAKE_STRIP \"$STRIP\")" >> "$toolchain"
337+
echo "" >> "$toolchain"
338+
339+
#
340+
# Flags
341+
#
342+
if [ -n "$CFLAGS" ]; then
343+
echo "set(CMAKE_C_FLAGS \"$CFLAGS\" CACHE STRING \"\" FORCE)" >> "$toolchain"
344+
echo "set(CMAKE_OBJC_FLAGS \"$CFLAGS\" CACHE STRING \"\" FORCE)" >> "$toolchain"
345+
fi
346+
347+
if [ -n "$CXXFLAGS" ]; then
348+
echo "set(CMAKE_CXX_FLAGS \"$CXXFLAGS\" CACHE STRING \"\" FORCE)" >> "$toolchain"
349+
fi
350+
351+
if [ -n "$LDFLAGS" ]; then
352+
echo "set(CMAKE_EXE_LINKER_FLAGS \"$LDFLAGS\" CACHE STRING \"\" FORCE)" >> "$toolchain"
353+
echo "set(CMAKE_SHARED_LINKER_FLAGS \"$LDFLAGS\" CACHE STRING \"\" FORCE)" >> "$toolchain"
354+
echo "set(CMAKE_MODULE_LINKER_FLAGS \"$LDFLAGS\" CACHE STRING \"\" FORCE)" >> "$toolchain"
355+
fi
356+
echo "" >> "$toolchain"
357+
358+
#
359+
# pkg-config (critical for Apple cross builds)
360+
#
361+
echo "set(ENV{PKG_CONFIG} \"$PREFIX/host/bin/pkg-config\")" >> "$toolchain"
362+
echo "set(ENV{PKG_CONFIG_SYSROOT_DIR} \"$PREFIX\")" >> "$toolchain"
363+
echo "set(ENV{PKG_CONFIG_PATH} \"$PREFIX/host/lib/pkgconfig:$PREFIX/host/share/pkgconfig\")" >> "$toolchain"
364+
echo "" >> "$toolchain"
365+
366+
#
367+
# Python (for find_package(Python3))
368+
#
369+
echo "set(Python3_EXECUTABLE \"$(which python3)\")" >> "$toolchain"
370+
echo "" >> "$toolchain"
371+
372+
#
373+
# Cross-compile search behavior
374+
#
375+
echo "set(CMAKE_FIND_ROOT_PATH \"$PREFIX\")" >> "$toolchain"
376+
echo "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> "$toolchain"
377+
echo "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> "$toolchain"
378+
echo "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> "$toolchain"
379+
echo "set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)" >> "$toolchain"
380+
}
381+
258382
# Prevent contamination from host pkg-config files by building our own
259383
build_pkg_config() {
260384
FILE="$(basename $PKG_CONFIG_SRC)"
@@ -411,6 +535,47 @@ meson_build () {
411535
cd "$pwd"
412536
}
413537

538+
cmake_build () {
539+
SRCDIR="$1"
540+
shift 1
541+
FILE="$(basename $SRCDIR)"
542+
NAME="${FILE%.tar.*}"
543+
544+
case $SRCDIR in
545+
http* | ftp* )
546+
SRCDIR="$BUILD_DIR/$NAME"
547+
;;
548+
esac
549+
BUILDDIR="$SRCDIR/utm_build"
550+
CMAKE_TOOLCHAIN="$(realpath "$BUILD_DIR")/cross.cmake"
551+
if [ ! -f "$CMAKE_TOOLCHAIN" ]; then
552+
generate_cmake_toolchain "$CMAKE_TOOLCHAIN"
553+
fi
554+
pwd="$(pwd)"
555+
556+
cd "$SRCDIR"
557+
558+
if [ -z "$REBUILD" ]; then
559+
rm -rf "$BUILDDIR"
560+
mkdir -p "$BUILDDIR"
561+
562+
echo "${GREEN}Configuring ${NAME}...${NC}"
563+
cmake -S . -B "$BUILDDIR" \
564+
-DCMAKE_INSTALL_PREFIX="$PREFIX" \
565+
-DCMAKE_BUILD_TYPE=Release \
566+
-DCMAKE_TOOLCHAIN_FILE="$CMAKE_TOOLCHAIN" \
567+
"$@"
568+
fi
569+
570+
echo "${GREEN}Building ${NAME}...${NC}"
571+
cmake --build "$BUILDDIR" --parallel "$NCPU"
572+
573+
echo "${GREEN}Installing ${NAME}...${NC}"
574+
cmake --install "$BUILDDIR"
575+
576+
cd "$pwd"
577+
}
578+
414579
build_angle () {
415580
OLD_PATH=$PATH
416581
export PATH="$(realpath "$BUILD_DIR/depot_tools.git"):$OLD_PATH"
@@ -490,7 +655,8 @@ build_qemu_dependencies () {
490655
# GPU support
491656
build_angle
492657
meson_build $EPOXY_REPO -Dtests=false -Dglx=no -Degl=yes
493-
meson_build $VIRGLRENDERER_REPO -Dtests=false -Dcheck-gl-errors=false -Dvenus=true -Drender-server-worker=thread
658+
cmake_build $VULKAN_LOADER_REPO -D UPDATE_DEPS=On
659+
meson_build $VIRGLRENDERER_REPO -Dtests=false -Dcheck-gl-errors=false -Dvenus=true -Dvulkan-dload=false -Drender-server-worker=thread
494660
# Hypervisor for iOS
495661
if [ "$PLATFORM" == "ios" ] || [ "$PLATFORM" == "ios_simulator" ]; then
496662
build_hypervisor

0 commit comments

Comments
 (0)