Skip to content

Commit f633b80

Browse files
committed
fix moltenvk build
1 parent c811fc7 commit f633b80

File tree

5 files changed

+86
-19
lines changed

5 files changed

+86
-19
lines changed

configs/libs/shaderc.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#
1717

1818
export LIB_NAME='shaderc'
19-
export LIPO_LIBS="libshaderc libshaderc_combined"
19+
export LIPO_LIBS="libshaderc_combined"
2020
export LIB_DEPENDS_BIN="cmake"
2121
export GIT_LOCAL_REPO=extra/shaderc
2222
export GIT_COMMIT=v2025.3

do-compile/apple/moltenvk.sh

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#
1717

1818
set -e
19+
set -o pipefail
1920

2021
THIS_DIR=$(DIRNAME=$(dirname "$0"); cd "$DIRNAME"; pwd)
2122
cd "$THIS_DIR"
@@ -74,7 +75,7 @@ echo "[*] fetch dependencies for $LIB_NAME"
7475
echo "----------------------"
7576

7677
cd $MR_BUILD_SOURCE
77-
if [ -d "External" ]; then
78+
if [ -d "External/build" ]; then
7879
echo "dependencies already exist"
7980
else
8081
if [ -f "./fetchDependencies" ]; then
@@ -105,11 +106,8 @@ xcodebuild -project "$MR_BUILD_SOURCE/MoltenVKPackaging.xcodeproj" \
105106
-scheme "MoltenVK Package ($scheme_suffix)" \
106107
-destination "generic/platform=$dest" \
107108
-configuration Release \
108-
-parallelizeTargets \
109-
ONLY_ACTIVE_ARCH=YES \
110-
ARCHS="$arch_param" \
111109
CODE_SIGNING_ALLOWED=NO \
112-
build || true
110+
build
113111

114112
pkg_static_dir="$MR_BUILD_SOURCE/Package/Release/MoltenVK/static"
115113
if [[ -d "$pkg_static_dir/MoltenVK.xcframework" ]]; then
@@ -143,3 +141,47 @@ if [[ -d "$vk_video_headers" ]]; then
143141
cp -RL "$vk_video_headers"/* "$MR_BUILD_PREFIX/include/vk_video/"
144142
echo "Copied vk_video headers to $MR_BUILD_PREFIX/include/vk_video/"
145143
fi
144+
145+
echo "----------------------"
146+
echo "[*] generate pkg-config files"
147+
echo "----------------------"
148+
149+
mkdir -p "$MR_BUILD_PREFIX/lib/pkgconfig"
150+
151+
MOLTENVK_MAJOR=$(grep "MVK_VERSION_MAJOR" "$MR_BUILD_PREFIX/include/MoltenVK/mvk_private_api.h" | grep -oE "[0-9]+" | head -1)
152+
MOLTENVK_MINOR=$(grep "MVK_VERSION_MINOR" "$MR_BUILD_PREFIX/include/MoltenVK/mvk_private_api.h" | grep -oE "[0-9]+" | head -1)
153+
MOLTENVK_PATCH=$(grep "MVK_VERSION_PATCH" "$MR_BUILD_PREFIX/include/MoltenVK/mvk_private_api.h" | grep -oE "[0-9]+" | head -1)
154+
MOLTENVK_VERSION="${MOLTENVK_MAJOR}.${MOLTENVK_MINOR}.${MOLTENVK_PATCH}"
155+
156+
VULKAN_VERSION="1.3.250"
157+
158+
cat > "$MR_BUILD_PREFIX/lib/pkgconfig/vulkan.pc" << EOF
159+
prefix=${MR_BUILD_PREFIX}
160+
exec_prefix=\${prefix}
161+
libdir=\${exec_prefix}/lib
162+
includedir=\${prefix}/include
163+
164+
Name: Vulkan
165+
Description: Vulkan loader (MoltenVK)
166+
Version: ${VULKAN_VERSION}
167+
Libs: -L\${libdir} -lMoltenVK
168+
Libs.private: -framework Metal -framework Foundation -framework QuartzCore -framework IOKit -framework IOSurface -lc++
169+
Cflags: -I\${includedir} -I\${includedir}/vulkan
170+
EOF
171+
172+
cat > "$MR_BUILD_PREFIX/lib/pkgconfig/moltenvk.pc" << EOF
173+
prefix=${MR_BUILD_PREFIX}
174+
exec_prefix=\${prefix}
175+
libdir=\${exec_prefix}/lib
176+
includedir=\${prefix}/include
177+
178+
Name: MoltenVK
179+
Description: Vulkan implementation on Metal for macOS and iOS
180+
Version: ${MOLTENVK_VERSION}
181+
Libs: -L\${libdir} -lMoltenVK
182+
Libs.private: -framework Metal -framework Foundation -framework QuartzCore -framework IOKit -framework IOSurface -lc++
183+
Cflags: -I\${includedir} -I\${includedir}/vulkan -I\${includedir}/MoltenVK
184+
Requires: vulkan
185+
EOF
186+
187+
echo "Generated vulkan.pc (${VULKAN_VERSION}) and moltenvk.pc (${MOLTENVK_VERSION})"

do-compile/apple/placebo.sh

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ sed -i '' 's/registry = VkXML(ET.parse(xmlfile))/registry = VkXML(ET.parse(xmlfi
3333

3434
cd "$THIS_DIR"
3535

36+
BUILD_DIR="${MR_BUILD_SOURCE}/meson_build"
37+
rm -rf "$BUILD_DIR"
38+
mkdir -p "$BUILD_DIR"
39+
3640
echo "----------------------"
3741
echo "[*] configure $LIB_NAME"
3842
echo "----------------------"
@@ -42,7 +46,6 @@ echo "----------------------"
4246
# Use shaderc for SPIRV compilation
4347

4448
# Find lcms2 and shaderc from our build
45-
PKG_CONFIG_PATH="${MR_BUILD_PREFIX}/lib/pkgconfig:$PKG_CONFIG_PATH"
4649

4750
# Set deployment target for macOS
4851
export MACOSX_DEPLOYMENT_TARGET=11.0
@@ -61,25 +64,32 @@ MESON_OPTS="--buildtype=release \
6164
-Ddemos=false \
6265
-Dxxhash=disabled"
6366

64-
build="${MR_BUILD_SOURCE}/meson_build"
65-
rm -rf "$build"
66-
mkdir -p "$build"
67-
cd "$build"
6867

6968
# Set up environment for MoltenVK
7069
export VK_ICD_FILENAMES="${MR_BUILD_PREFIX}/share/vulkan/icd.d/MoltenVK_icd.json"
7170

7271
# Disable assertions to fix Xcode SDK compatibility issue
73-
export CFLAGS="-U_LIBCPP_ENABLE_ASSERTIONS"
74-
export CXXFLAGS="-U_LIBCPP_ENABLE_ASSERTIONS"
72+
# IMPORTANT: Preserve original CFLAGS which contains -arch parameter
73+
export CFLAGS="${MR_DEFAULT_CFLAGS} -U_LIBCPP_ENABLE_ASSERTIONS"
74+
export CXXFLAGS="${MR_DEFAULT_CFLAGS} -U_LIBCPP_ENABLE_ASSERTIONS"
75+
76+
# Add shaderc and MoltenVK pkgconfig paths
77+
# SHADERC_PC_PATH="${MR_UNI_PROD_DIR}/shaderc/lib/pkgconfig"
78+
# MOLTENVK_PC_PATH="${MR_UNI_PROD_DIR}/MoltenVK/lib/pkgconfig"
79+
# export PKG_CONFIG_PATH="${SHADERC_PC_PATH}:${MOLTENVK_PC_PATH}:${PKG_CONFIG_PATH}"
7580

76-
meson setup . ${MR_BUILD_SOURCE} ${MESON_OPTS}
81+
# # Configure with explicit PKG_CONFIG_LIBDIR to avoid system dependencies
82+
# PKG_CONFIG_LIBDIR="${SHADERC_PC_PATH}:${MOLTENVK_PC_PATH}:$PKG_CONFIG_LIBDIR" \
83+
# PKG_CONFIG_ALLOW_SYSTEM_LIBS=0 \
84+
meson setup ${BUILD_DIR} ${MR_BUILD_SOURCE} ${MESON_OPTS}
7785

7886
echo "----------------------"
7987
echo "[*] compile $LIB_NAME"
8088
echo "----------------------"
8189

82-
ninja
90+
cd "$BUILD_DIR"
91+
92+
meson compile
8393

8494
echo "----------------------"
8595
echo "[*] install $LIB_NAME"

do-compile/apple/shaderc.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ mkdir -p "$build"
7373
cd "$build"
7474

7575
cmake -S ${MR_BUILD_SOURCE} \
76+
-DCMAKE_PREFIX_PATH=${PKG_CONFIG_LIBDIR} \
7677
-DCMAKE_INSTALL_PREFIX=${MR_BUILD_PREFIX} \
7778
-DCMAKE_TOOLCHAIN_FILE="${MR_SHELL_TOOLS_DIR}/ios.toolchain.cmake" \
7879
-DPLATFORM=$pf \
@@ -94,3 +95,9 @@ echo "[*] install $LIB_NAME"
9495
echo "----------------------"
9596

9697
cmake --install .
98+
99+
# clean up pkgconfig files
100+
rm -f ${MR_BUILD_PREFIX}/lib/pkgconfig/SPIRV-Tools-shared.pc
101+
rm -f ${MR_BUILD_PREFIX}/lib/pkgconfig/SPIRV-Tools.pc
102+
rm -f ${MR_BUILD_PREFIX}/lib/pkgconfig/shaderc.pc
103+
rm -f ${MR_BUILD_PREFIX}/lib/pkgconfig/shaderc_static.pc

tools/export-apple-host-env.sh

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,20 @@ if [[ "$MR_PLAT" != 'macos' ]]; then
1919
export MR_FORCE_CROSS=true
2020
fi
2121

22-
if [[ "$MR_PLAT" == 'ios' ]]; then
23-
export MR_DEFAULT_ARCHS="arm64 arm64_simulator x86_64_simulator"
22+
if [[ "$MR_VENDOR_LIBS" == *"moltenvk"* || "$MR_VENDOR_LIBS" == "moltenvk" ]]; then
23+
if [[ "$MR_PLAT" == 'macos' ]]; then
24+
export MR_DEFAULT_ARCHS="arm64"
25+
elif [[ "$MR_PLAT" == 'ios' || "$MR_PLAT" == 'tvos' ]]; then
26+
export MR_DEFAULT_ARCHS="arm64 arm64_simulator"
27+
fi
28+
else
29+
if [[ "$MR_PLAT" == 'ios' ]]; then
30+
export MR_DEFAULT_ARCHS="arm64 arm64_simulator x86_64_simulator"
2431
elif [[ "$MR_PLAT" == 'macos' ]]; then
25-
export MR_DEFAULT_ARCHS="x86_64 arm64"
32+
export MR_DEFAULT_ARCHS="x86_64 arm64"
2633
elif [[ "$MR_PLAT" == 'tvos' ]]; then
27-
export MR_DEFAULT_ARCHS="arm64 arm64_simulator x86_64_simulator"
34+
export MR_DEFAULT_ARCHS="arm64 arm64_simulator x86_64_simulator"
35+
fi
2836
fi
2937

3038
# Number of physical cores in the system to facilitate parallel assembling

0 commit comments

Comments
 (0)