mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
78 lines
2.4 KiB
Markdown
78 lines
2.4 KiB
Markdown
# Building on macOS
|
|
|
|
Required:
|
|
- CMake to build dependencies
|
|
- Hashlink (to build Universal: https://github.com/nullobsi/hashlink)
|
|
- SDL2
|
|
- libjpeg
|
|
- libjpegturbo
|
|
- libogg
|
|
- libvorbis
|
|
- libpng
|
|
- openal-soft
|
|
- zlib
|
|
|
|
## Building dependencies for Universal
|
|
I've found that using CMake makes building universal binaries on macOS a
|
|
lot easier.
|
|
|
|
Here's the process for dependencies that use CMake:
|
|
```sh
|
|
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_OSX_DEPLOYMENT_TARGET="10.15" -DBUILD_SHARED_LIBS=ON -DCMAKE_FIND_FRAMEWORK=LAST
|
|
cmake --build build --config Release -j8
|
|
sudo cmake --install build
|
|
```
|
|
This will build + install a CMake project as a Universal binary. It's
|
|
important that every dependency in the chain be universal for this to
|
|
work, otherwise you will get linking errors.
|
|
|
|
Some notes:
|
|
- When compiling Hashlink, you may need to disable `uv` and `ssl` as
|
|
these are not needed by MBHaxe
|
|
|
|
Please see the other readme for Haxe libraries as you will need to use a
|
|
custom version of Heaps and HLSDL.
|
|
|
|
## Compiling MBHaxe
|
|
Use `haxe compile-c.hxml` to generate the `native` directory. If you're
|
|
going to build a .app bundle, use compile-macos.hxml instead.
|
|
|
|
cd into the native directory, then use the following command to build:
|
|
```sh
|
|
# Sometimes needed because of HLSDL.
|
|
sed -i -e 's/?sdl/sdl/g' sdl/Window.c hl/natives.h hl/functions.c sdl/Sdl.c
|
|
|
|
clang -mmacosx-version-min=10.15 -arch x86_64 -arch arm64 -o marblegame -I . -L /usr/local/lib/ -std=c11 marblegame.c /usr/local/lib/{ui.hdll, openal.hdll, fmt.hdll, sdl.hdll} -lsdl2 -lhl
|
|
```
|
|
This assumes you built all the libraries and installed them to
|
|
/usr/local/lib.
|
|
|
|
## Packaging for macOS .app format
|
|
After compiling native/marblegame.c successfully, use the script
|
|
`./package-macos.sh` to create the skeleton app bundle under macos-dist.
|
|
|
|
Finally, you need to use `otool` and `install_name_tool` to redirect the
|
|
library paths to @rpath/lib.dylib.
|
|
|
|
marblegame should already have the rpath set. You just need to make sure
|
|
it's correct and copy the libs:
|
|
- fmt.hdll
|
|
- libSDL2-2.0.0.dylib
|
|
- libhl.dylib
|
|
- libogg.dylib
|
|
- libopenal.dylib
|
|
- libpng16.dylib
|
|
- libturbojpeg.dylib
|
|
- libvorbis.dylib
|
|
- libvorbisfile.dylib
|
|
- libz.dylib
|
|
- openal.dylib
|
|
- sdl.hdll
|
|
- ui.hdll
|
|
|
|
Ensure that they all depend on eachother with @rpath, as that will be
|
|
set to the correct directory when running marblegame. `otool -L` is
|
|
useful to check.
|
|
|
|
Sign the .app with `codesign` and it should be ready to go.
|
|
|