-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
187 lines (178 loc) · 6.81 KB
/
docker-compose.yml
File metadata and controls
187 lines (178 loc) · 6.81 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# At project root directory, build the service(s) with:
#
# `docker compose up --build meshsdk-emscripten-build`
#
# `docker compose up meshsdk-emscripten-build`
# `docker compose up meshsdk-emscripten-build -d`
#
# `docker compose --profile singlethreaded up meshsdk-emscripten-build-singlethreaded`
# `docker compose --profile wasm64 up meshsdk-emscripten-build-wasm64`
#
# To run custom build commands:
#
# `docker compose exec meshsdk-emscripten-build bash`
# `docker compose exec meshsdk-emscripten-build-singlethreaded bash`
# `docker compose exec meshsdk-emscripten-build-wasm64 bash`
#
services:
meshsdk-emscripten-build:
build:
context: .
dockerfile: docker/emscripten.dev.Dockerfile
# Use BuildKit for better caching and performance
# Enable if you have Docker BuildKit available
# target: development
image: zzz/meshsdk-emscripten-build-server
pull_policy: never
container_name: meshsdk_emscripten_build_server
volumes:
- ./cmake:/meshsdk/cmake
- ./source:/meshsdk/source
- ./wasm:/meshsdk/wasm
- ./CMakeLists.txt:/meshsdk/CMakeLists.txt
- ./meshlib-config.cmake.in:/meshsdk/meshlib-config.cmake.in
# Create a volume for build artifacts to persist between runs (Optional)
- meshsdk-build-cache:/meshsdk/build
environment:
- MR_EMSCRIPTEN=ON
- MR_EMSCRIPTEN_SDK=ON
- MESHLIB_KEEP_BUILD=OFF
- MESHLIB_BUILD_RELEASE=ON
- MESHLIB_BUILD_DEBUG=OFF
- MR_EMSCRIPTEN_SINGLE=OFF # Default to multithreaded
- MR_EMSCRIPTEN_WASM64=OFF # Default to 32-bit
- MR_CMAKE_OPTIONS=-DMR_CXX_STANDARD=23
- DMR_PCH_USE_EXTRA_HEADERS=ON
- DEBIAN_FRONTEND=noninteractive
# Override the command to run your build process
command: >
bash -c "
echo '=== MeshSDK Emscripten Build (Multithreaded, 32-bit) ===' &&
echo 'Git submodules and thirdparty dependencies are pre-built in the Docker image.' &&
ln -s /usr/local/lib/emscripten/bin /meshsdk/bin &&
ln -s /usr/local/lib/emscripten/include /meshsdk/include &&
ln -s /usr/local/lib/emscripten/lib /meshsdk/lib &&
ln -s /usr/local/lib/emscripten/share /meshsdk/share &&
echo 'Starting source code build...' &&
# Build the main source code
echo 'Running build_source.sh...' &&
./scripts/build_source.sh &&
echo 'Build completed successfully!' &&
echo 'Build artifacts are available in the ./build directory.' &&
echo 'Container will remain running for debugging and testing.' &&
echo 'Use: `docker compose exec meshsdk-emscripten-build bash` to interact with the container.' &&
# Keep container running for interaction and debugging
tail -f /dev/null
"
# Keep container running for debugging and interaction
tty: true
stdin_open: true
# Alternative service for different build configurations
meshsdk-emscripten-build-singlethreaded:
build:
context: .
dockerfile: docker/emscripten.dev.Dockerfile
image: zzz/meshsdk-emscripten-build-server
pull_policy: never
container_name: meshsdk_emscripten_build_server-singlethreaded
volumes:
- ./cmake:/meshsdk/cmake
- ./source:/meshsdk/source
- ./wasm:/meshsdk/wasm
- ./CMakeLists.txt:/meshsdk/CMakeLists.txt
- ./meshlib-config.cmake.in:/meshsdk/meshlib-config.cmake.in
- meshsdk-build-cache-single:/meshsdk/build
environment:
- MR_EMSCRIPTEN=ON
- MR_EMSCRIPTEN_SDK=ON
- MESHLIB_KEEP_BUILD=OFF
- MESHLIB_BUILD_RELEASE=ON
- MESHLIB_BUILD_DEBUG=OFF
- MR_EMSCRIPTEN_SINGLE=ON # Single-threaded build
- MR_EMSCRIPTEN_WASM64=OFF
- MR_CMAKE_OPTIONS=-DMR_CXX_STANDARD=23
- DMR_PCH_USE_EXTRA_HEADERS=ON
- DEBIAN_FRONTEND=noninteractive
command: >
bash -c "
echo '=== MeshSDK Emscripten Build (Single-threaded, 32-bit) ===' &&
echo 'Using pre-built singlethreaded thirdparty dependencies.' &&
ln -s /usr/local/lib/emscripten-single/bin /meshsdk/bin &&
ln -s /usr/local/lib/emscripten-single/include /meshsdk/include &&
ln -s /usr/local/lib/emscripten-single/lib /meshsdk/lib &&
ln -s /usr/local/lib/emscripten-single/share /meshsdk/share &&
echo 'Building source code in singlethreaded mode...' &&
./scripts/build_source.sh &&
echo 'Single-threaded build completed!' &&
tail -f /dev/null
"
# Use profiles to avoid running this by default
# Run with: `docker compose --profile singlethreaded up`
profiles:
- singlethreaded
tty: true
stdin_open: true
# Alternative service for 64-bit WASM build
meshsdk-emscripten-build-wasm64:
build:
context: .
dockerfile: docker/emscripten.dev.Dockerfile
image: zzz/meshsdk-emscripten-build-server
pull_policy: never
container_name: meshsdk_emscripten_build_server-wasm64
volumes:
- ./cmake:/meshsdk/cmake
- ./source:/meshsdk/source
- ./wasm:/meshsdk/wasm
- ./CMakeLists.txt:/meshsdk/CMakeLists.txt
- ./meshlib-config.cmake.in:/meshsdk/meshlib-config.cmake.in
- meshsdk-build-cache-wasm64:/meshsdk/build
environment:
- MR_EMSCRIPTEN=ON
- MR_EMSCRIPTEN_SDK=ON
- MESHLIB_KEEP_BUILD=OFF
- MESHLIB_BUILD_RELEASE=ON
- MESHLIB_BUILD_DEBUG=OFF
- MR_EMSCRIPTEN_SINGLE=OFF
- MR_EMSCRIPTEN_WASM64=ON # 64-bit WASM build
- MR_CMAKE_OPTIONS=-DMR_CXX_STANDARD=23
- DMR_PCH_USE_EXTRA_HEADERS=ON
- DEBIAN_FRONTEND=noninteractive
command: >
bash -c "
echo '=== MeshSDK Emscripten Build (Multithreaded, 64-bit WASM) ===' &&
echo 'Using pre-built 64-bit WASM thirdparty dependencies.' &&
ln -s /usr/local/lib/emscripten-wasm64/bin /meshsdk/bin &&
ln -s /usr/local/lib/emscripten-wasm64/include /meshsdk/include &&
ln -s /usr/local/lib/emscripten-wasm64/lib /meshsdk/lib &&
ln -s /usr/local/lib/emscripten-wasm64/share /meshsdk/share &&
echo 'Building source code in 64-bit WASM mode...' &&
./scripts/build_source.sh &&
echo '64-bit WASM build completed!' &&
tail -f /dev/null
"
# Use profiles to avoid running this by default
# Run with: `docker compose --profile wasm64 up`
profiles:
- wasm64
tty: true
stdin_open: true
# Named volumes for build caching (optional but recommended)
volumes:
meshsdk-build-cache:
driver: local
# driver_opts:
# type: none
# o: bind
# device: ./.cache/docker-build-cache/default/build
meshsdk-build-cache-single:
driver: local
meshsdk-build-cache-wasm64:
driver: local
# CMake cache for faster configuration
meshsdk-cmake-cache:
driver: local
meshsdk-cmake-cache-single:
driver: local
meshsdk-cmake-cache-wasm64:
driver: local