-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetup-windows-deps.sh
More file actions
executable file
·150 lines (122 loc) · 4.36 KB
/
setup-windows-deps.sh
File metadata and controls
executable file
·150 lines (122 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/bin/bash
set -e
# Base relative directory for dependencies
PROJECT_ROOT="$(pwd)"
BASE_DIR="$PROJECT_ROOT/thirdparty"
GLFW_DIR="$BASE_DIR/glfw-win64"
GLFW_BUILD_DIR="$GLFW_DIR/build"
GLFW_INSTALL_DIR="$GLFW_DIR/install"
VULKAN_HEADERS_DIR="$BASE_DIR/Vulkan-Headers"
VULKAN_HEADERS_BUILD_DIR="$VULKAN_HEADERS_DIR/build"
VULKAN_HEADERS_INSTALL_DIR="$VULKAN_HEADERS_DIR/install"
VULKAN_LOADER_DIR="$BASE_DIR/Vulkan-Loader"
VULKAN_LOADER_BUILD_DIR="$VULKAN_LOADER_DIR/build"
VULKAN_LOADER_INSTALL_DIR="$VULKAN_LOADER_DIR/install"
VULKAN_BUILD_DIR="$BASE_DIR/vulkan-win64-build"
# Ensure required tools are installed
command -v x86_64-w64-mingw32-g++ >/dev/null || {
echo "Error: mingw-w64 toolchain not found. Install with: sudo apt install mingw-w64"
exit 1
}
command -v cmake >/dev/null || {
echo "Error: cmake not found. Install with: sudo apt install cmake"
exit 1
}
command -v git >/dev/null || {
echo "Error: git not found. Install with: sudo apt install git"
exit 1
}
command -v make >/dev/null || {
echo "Error: make not found. Install with: sudo apt install build-essential"
exit 1
}
mkdir -p "$BASE_DIR"
cd "$BASE_DIR"
# Clone and build GLFW for Windows
if [[ ! -d "$GLFW_DIR" ]]; then
echo "Cloning GLFW..."
git clone https://github.com/glfw/glfw.git "$GLFW_DIR"
fi
cd $GLFW_DIR
mkdir -p $GLFW_INSTALL_DIR
mkdir -p $GLFW_BUILD_DIR
cd $GLFW_BUILD_DIR
echo "Configuring GLFW with CMake..."
cmake .. -G "Unix Makefiles" \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
-DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX="$GLFW_INSTALL_DIR"
echo "Building GLFW..."
make -j$(nproc)
echo "Installing GLFW to $GLFW_INSTALL_DIR"
make install
# Back to base directory
cd "$BASE_DIR"
# Clone Vulkan-Headers if not present
if [[ ! -d "$VULKAN_HEADERS_DIR" ]]; then
echo "Cloning Vulkan-Headers..."
git clone https://github.com/KhronosGroup/Vulkan-Headers.git "$VULKAN_HEADERS_DIR"
fi
# Build and install Vulkan-Headers for Windows
cd $VULKAN_HEADERS_DIR
mkdir -p $VULKAN_HEADERS_INSTALL_DIR
mkdir -p $VULKAN_HEADERS_BUILD_DIR
cd $VULKAN_HEADERS_BUILD_DIR
echo "Configuring Vulkan-Headers with CMake..."
cmake .. -G "Unix Makefiles" \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
-DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \
-DCMAKE_INSTALL_PREFIX="$VULKAN_HEADERS_INSTALL_DIR"
echo "Building Vulkan-Headers..."
make -j$(nproc)
echo "Installing Vulkan-Headers to $VULKAN_HEADERS_INSTALL_DIR"
make install
# Clone Vulkan-Loader if not present
if [[ ! -d "$VULKAN_LOADER_DIR" ]]; then
echo "Cloning Vulkan-Loader..."
git clone https://github.com/KhronosGroup/Vulkan-Loader.git "$VULKAN_LOADER_DIR"
fi
# Create toolchain file dynamically
TOOLCHAIN_FILE="$PROJECT_ROOT/thirdparty/mingw-w64-toolchain.cmake"
cat > "$TOOLCHAIN_FILE" <<EOF
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
# SET CMAKE_FIND ROOT PATHS TO FIND BINARIES OR COMPILERS
set(CMAKE_FIND_ROOT_PATH # COMPILER
/usr/x86_64-w64-mingw32
# VENDOR LIBS
)
# adjust the default behavior of the FIND_XXX() commands: search programs in the
# host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# search headers and libraries in the target environment
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
EOF
echo "Created CMake toolchain file at $TOOLCHAIN_FILE"
# Build Vulkan-Loader for Windows (generates import libs)
cd $VULKAN_LOADER_DIR
mkdir -p $VULKAN_LOADER_INSTALL_DIR
mkdir -p $VULKAN_LOADER_BUILD_DIR
cd $VULKAN_LOADER_BUILD_DIR
echo "Configuring Vulkan-Loader with CMake..."
cmake .. -G "Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX="$VULKAN_LOADER_INSTALL_DIR" \
-DVulkanHeaders_DIR="$VULKAN_HEADERS_INSTALL_DIR/share/cmake/VulkanHeaders"
echo "Building Vulkan-Loader..."
make -j$(nproc)
echo "Installing Vulkan-Loader to $VULKAN_LOADER_INSTALL_DIR"
make install
echo
echo "All done."
echo "GLFW built and installed to: $GLFW_INSTALL_DIR"
echo "Vulkan-Headers built and installed to: $VULKAN_HEADERS_INSTALL_DIR"
echo "Vulkan-Loader built and installed to: $VULKAN_LOADER_INSTALL_DIR"