Add Support for macOS (#441)
* Fixed soh filters * add more makefile changes * almost ready * more updates * update * update * Update Makefiles to handle both platforms * Allow for overriding the CXX and CC executables * Restore original structure while supporting custom CXX flags * Remove some platform specific libs * Dynamic target name * Make X11 paths package-agnostic * Remove changes to `gfx_opengl.cpp` * Use OpenGL2 on MacOS instead of OpenGL3 * make it actually render something * render at least the first texture, still need to figure out the second one * Let’s use OpenGL 3 again * maybe this works to get the right texture? link's eyes still look off a bit * did this work? * set the platform to macos * actual numbers are right, but logic is ugly XXX/TODO, i know * add zlib to ldflags for ZAPDUtils * A bit of cleanup * Revert unneeded changes * Remove GL_CHECK * Fix issues with z64 branch * use an std::map instead of a giant array * three point filter fix (#2) * Fix mac compilation * fix audio for 64 bit * revert audio heap size, keep bigger pools * Add more Apple specific checks to our modifications * Add building instructions for macOS * Remove unecessary step from building instructions * Add missing SDL2 & GLEW to Linux LDLIBS * Update BUILDING.md Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com> * Update soh/.gitignore to include other arch binaries Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com> * Use right platform name for debugging window Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com> * Fix stormlib on macos (arm64) * Simplify some of the ifdef checks * Revert an older no longer necessary fix * Remove remaining unecessary deviations * Update building instructions after StormLib changes * Feature: Use OpenGL 4.1 (#1) * Further tweak the BUILDING * Tidy up * reword -j message * Add Jenkins CI Support (#2) * Fix type issues * add target <appbundle> and <filledappbundle> add makefile targets to create an .app `filledappbundle` creates the target with the .otr included this should perhaps be moved to Application Support though * pull gcc's rpath from otool output * move make target to the end so it's not default * Add Jenkins and make exe in par with other platforms * Actually save build artefacts * Fix artefact path * Remove x11 mentions and linking (not used) * Update building instructions for generating app * use appsupport directory * Add new app icon * Update target to match macOS types * Update more audio types * fix null deref in Audio_PlayFanfare * Remove old import from z64 * address final nit with apple ifdefs Co-authored-by: KiritoDev <36680385+KiritoDv@users.noreply.github.com> Co-authored-by: Jeffrey Crowell <github@crowell.biz> Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>
This commit is contained in:
106
soh/Makefile
106
soh/Makefile
@@ -1,9 +1,11 @@
|
||||
CXX := g++
|
||||
CC := gcc
|
||||
CXX ?= g++
|
||||
CC ?= gcc
|
||||
LD := lld
|
||||
AR := ar
|
||||
FORMAT := clang-format-11
|
||||
ZAPD := ../ZAPDTR/ZAPD.out
|
||||
UNAME := $(shell uname)
|
||||
UNAMEM := $(shell uname -m)
|
||||
|
||||
LIBULTRASHIP := ../libultraship/libultraship.a
|
||||
ZAPDUTILS := ../ZAPDTR/ZAPDUtils/ZAPDUtils.a
|
||||
@@ -17,11 +19,22 @@ LTO ?= 0
|
||||
WARN := \
|
||||
-Wno-return-type \
|
||||
-funsigned-char \
|
||||
-mhard-float -fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-strict-aliasing -fno-inline-functions -fno-inline-small-functions -fno-toplevel-reorder -ffreestanding -fwrapv \
|
||||
-fno-stack-protector -fno-common -fno-zero-initialized-in-bss -fno-strict-aliasing -fno-inline-functions -fno-inline-small-functions -fno-toplevel-reorder -ffreestanding -fwrapv \
|
||||
|
||||
CXXFLAGS := $(WARN) -std=c++20 -D_GNU_SOURCE -fpermissive -no-pie -nostdlib -msse2 -mfpmath=sse
|
||||
CFLAGS := $(WARN) -std=c99 -D_GNU_SOURCE -no-pie -nostdlib -msse2 -mfpmath=sse
|
||||
CXXFLAGS := $(WARN) -std=c++20 -D_GNU_SOURCE -fpermissive -no-pie -nostdlib
|
||||
CFLAGS := $(WARN) -std=c99 -D_GNU_SOURCE -no-pie -nostdlib
|
||||
LDFLAGS :=
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
CXXFLAGS += -mhard-float -msse2 -mfpmath=sse
|
||||
CFLAGS += -mhard-float -msse2 -mfpmath=sse
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Darwin) #APPLE
|
||||
CXXFLAGS += $(shell pkg-config --cflags sdl2) $(shell sdl2-config --cflags) $(shell pkg-config --cflags glew) -framework OpenGL
|
||||
CFLAGS += $(shell pkg-config --cflags sdl2) $(shell sdl2-config --cflags) $(shell pkg-config --cflags glew) -framework OpenGL
|
||||
endif
|
||||
|
||||
CPPFLAGS := -MMD
|
||||
|
||||
ifneq ($(DEBUG),0)
|
||||
@@ -41,7 +54,13 @@ ifneq ($(LTO),0)
|
||||
LDFLAGS += -flto
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
TARGET := soh.elf
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Darwin) #APPLE
|
||||
TARGET := soh-$(UNAMEM)
|
||||
endif
|
||||
|
||||
INC_DIRS := $(addprefix -I, \
|
||||
. \
|
||||
@@ -56,26 +75,52 @@ INC_DIRS := $(addprefix -I, \
|
||||
../libultraship/libultraship/Lib/Fast3D/U64/PR \
|
||||
)
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
INC_DIRS += $(addprefix -I, \
|
||||
/opt/X11/include \
|
||||
)
|
||||
endif
|
||||
|
||||
LDDIRS := $(addprefix -L, \
|
||||
../libultraship/ \
|
||||
)
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
LDDIRS += $(addprefix -L, \
|
||||
/opt/X11/lib \
|
||||
)
|
||||
endif
|
||||
|
||||
LDLIBS := \
|
||||
$(ZAPDUTILS) \
|
||||
$(LIBSTORM) \
|
||||
$(addprefix -l, \
|
||||
X11 \
|
||||
dl \
|
||||
bz2 \
|
||||
z \
|
||||
pthread \
|
||||
atomic \
|
||||
ultraship \
|
||||
)
|
||||
|
||||
ifeq ($(UNAME), Linux) #LINUX
|
||||
LDLIBS += \
|
||||
$(addprefix -l, \
|
||||
X11 \
|
||||
SDL2 \
|
||||
GL \
|
||||
GLEW \
|
||||
pulse\
|
||||
ultraship \
|
||||
pulse \
|
||||
)
|
||||
endif
|
||||
|
||||
ifeq ($(UNAME), Darwin) #APPLE
|
||||
LDLIBS += \
|
||||
$(addprefix -framework, \
|
||||
OpenGL \
|
||||
) \
|
||||
$(shell sdl2-config --libs) $(shell pkg-config --libs glew)
|
||||
endif
|
||||
|
||||
ASSET_BIN_DIRS := $(shell find assets/* -type d -not -path "assets/xml*")
|
||||
ASSET_FILES_XML := $(foreach dir,$(ASSET_BIN_DIRS),$(wildcard $(dir)/*.xml))
|
||||
@@ -114,6 +159,14 @@ O_FILES := \
|
||||
$(CXX_FILES:%.cpp=build/%.o)
|
||||
D_FILES := $(O_FILES:%.o=%.d)
|
||||
|
||||
# Apple App Bundle
|
||||
APPNAME=soh
|
||||
APPBUNDLE=$(APPNAME).app
|
||||
APPBUNDLECONTENTS=$(APPBUNDLE)/Contents
|
||||
APPBUNDLEEXE=$(APPBUNDLECONTENTS)/MacOS
|
||||
APPBUNDLERESOURCES=$(APPBUNDLECONTENTS)/Resources
|
||||
APPBUNDLEICON=$(APPBUNDLECONTENTS)/Resources
|
||||
|
||||
# create build directory
|
||||
SRC_DIRS := $(shell find . -type d -a -not -path "*build*")
|
||||
$(shell mkdir -p $(SRC_DIRS:%=build/%))
|
||||
@@ -157,4 +210,39 @@ $(TARGET): $(LIBULTRASHIP)
|
||||
$(TARGET): $(O_FILES)
|
||||
$(CXX) $^ -o $@ $(LDFLAGS) -fuse-ld=$(LD) $(LDDIRS) $(LDLIBS)
|
||||
|
||||
-include $(D_FILES)
|
||||
-include $(D_FILES)
|
||||
|
||||
appbundle: macosx/$(APPNAME).icns
|
||||
rm -rf $(APPBUNDLE)
|
||||
mkdir $(APPBUNDLE)
|
||||
mkdir $(APPBUNDLE)/Contents
|
||||
mkdir $(APPBUNDLE)/Contents/MacOS
|
||||
mkdir $(APPBUNDLE)/Contents/Resources
|
||||
cp macosx/Info.plist $(APPBUNDLECONTENTS)/
|
||||
cp macosx/PkgInfo $(APPBUNDLECONTENTS)/
|
||||
cp macosx/$(APPNAME).icns $(APPBUNDLEICON)/
|
||||
cp $(TARGET) $(APPBUNDLEEXE)/soh
|
||||
cp macosx/launcher.sh $(APPBUNDLEEXE)/launcher.sh
|
||||
clang -ObjC macosx/appsupport.m -arch arm64 -arch x86_64 -framework Foundation -o macosx/appsupport
|
||||
cp macosx/appsupport $(APPBUNDLEEXE)/appsupport
|
||||
otool -l $(TARGET) | grep -A 2 LC_RPATH | tail -n 1 | awk '{print $2}' | dylibbundler -od -b -x $(APPBUNDLEEXE)/soh -d $(APPBUNDLECONTENTS)/libs
|
||||
|
||||
macosx/$(APPNAME).icns: macosx/$(APPNAME)Icon.png
|
||||
rm -rf macosx/$(APPNAME).iconset
|
||||
mkdir macosx/$(APPNAME).iconset
|
||||
sips -z 16 16 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_16x16.png
|
||||
sips -z 32 32 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_16x16@2x.png
|
||||
sips -z 32 32 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_32x32.png
|
||||
sips -z 64 64 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_32x32@2x.png
|
||||
sips -z 128 128 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_128x128.png
|
||||
sips -z 256 256 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_128x128@2x.png
|
||||
sips -z 256 256 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_256x256.png
|
||||
sips -z 512 512 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_256x256@2x.png
|
||||
sips -z 512 512 macosx/$(APPNAME)Icon.png --out macosx/$(APPNAME).iconset/icon_512x512.png
|
||||
cp macosx/$(APPNAME)Icon.png macosx/$(APPNAME).iconset/icon_512x512@2x.png
|
||||
iconutil -c icns -o macosx/$(APPNAME).icns macosx/$(APPNAME).iconset
|
||||
rm -r macosx/$(APPNAME).iconset
|
||||
|
||||
filledappbundle: appbundle
|
||||
cp ./oot.otr $(APPBUNDLEEXE)/oot.otr
|
||||
|
||||
|
||||
Reference in New Issue
Block a user