From 7ed8169d301ecc36a9b18cb0f24ed9416462afa0 Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Wed, 11 Jan 2023 17:49:10 +0200 Subject: [PATCH] Basic buildability --- Makefile | 61 ++++++++++++++++++++++++++++++++++++---- iOS/AppIcon60x60@2x.png | Bin 0 -> 9973 bytes iOS/AppIcon60x60@3x.png | Bin 0 -> 19524 bytes iOS/Info.plist | 52 ++++++++++++++++++++++++++++++++++ iOS/License.html | 53 ++++++++++++++++++++++++++++++++++ iOS/main.m | 6 ++++ 6 files changed, 166 insertions(+), 6 deletions(-) create mode 100644 iOS/AppIcon60x60@2x.png create mode 100644 iOS/AppIcon60x60@3x.png create mode 100644 iOS/Info.plist create mode 100644 iOS/License.html create mode 100644 iOS/main.m diff --git a/Makefile b/Makefile index ce7a9e5..9953039 100644 --- a/Makefile +++ b/Makefile @@ -177,6 +177,18 @@ else LDFLAGS += -lc -lm -ldl endif +ifeq ($(MAKECMDGOALS),_ios) +OBJ := build/obj-ios +SYSROOT := $(shell xcodebuild -sdk iphoneos -version Path 2> $(NULL)) +ifeq ($(SYSROOT),) +$(error Could not find an iOS SDK) +endif +CFLAGS += -arch arm64 -miphoneos-version-min=11.0 -isysroot $(SYSROOT) +LDFLAGS += -arch arm64 +OCFLAGS += -x objective-c -fobjc-arc -Wno-deprecated-declarations -isysroot $(SYSROOT) +LDFLAGS += -framework UIKit -framework Metal -framework MetalKit -framework AVFoundation -miphoneos-version-min=11.0 -isysroot $(SYSROOT) +CODESIGN := codesign -fs - +else ifeq ($(PLATFORM),Darwin) SYSROOT := $(shell xcodebuild -sdk macosx -version Path 2> $(NULL)) ifeq ($(SYSROOT),) @@ -188,7 +200,7 @@ endif CFLAGS += -F/Library/Frameworks -mmacosx-version-min=10.9 -isysroot $(SYSROOT) OCFLAGS += -x objective-c -fobjc-arc -Wno-deprecated-declarations -isysroot $(SYSROOT) -LDFLAGS += -framework AppKit -framework PreferencePanes -framework Carbon -framework QuartzCore -framework Security -framework WebKit -weak_framework Metal -weak_framework MetalKit -mmacosx-version-min=10.9 -isysroot $(SYSROOT) +LDFLAGS += -framework AppKit -mmacosx-version-min=10.9 -isysroot $(SYSROOT) GL_LDFLAGS := -framework OpenGL endif CFLAGS += -Wno-deprecated-declarations @@ -196,6 +208,7 @@ ifeq ($(PLATFORM),windows32) CFLAGS += -Wno-deprecated-declarations # Seems like Microsoft deprecated every single LIBC function LDFLAGS += -Wl,/NODEFAULTLIB:libcmt.lib endif +endif ifeq ($(CONF),debug) CFLAGS += -g @@ -234,6 +247,7 @@ quicklook: $(BIN)/SameBoy.qlgenerator sdl: $(SDL_TARGET) $(BIN)/SDL/dmg_boot.bin $(BIN)/SDL/mgb_boot.bin $(BIN)/SDL/cgb0_boot.bin $(BIN)/SDL/cgb_boot.bin $(BIN)/SDL/agb_boot.bin $(BIN)/SDL/sgb_boot.bin $(BIN)/SDL/sgb2_boot.bin $(BIN)/SDL/LICENSE $(BIN)/SDL/registers.sym $(BIN)/SDL/background.bmp $(BIN)/SDL/Shaders $(BIN)/SDL/Palettes bootroms: $(BIN)/BootROMs/agb_boot.bin $(BIN)/BootROMs/cgb_boot.bin $(BIN)/BootROMs/cgb0_boot.bin $(BIN)/BootROMs/dmg_boot.bin $(BIN)/BootROMs/mgb_boot.bin $(BIN)/BootROMs/sgb_boot.bin $(BIN)/BootROMs/sgb2_boot.bin tester: $(TESTER_TARGET) $(BIN)/tester/dmg_boot.bin $(BIN)/tester/cgb_boot.bin $(BIN)/tester/agb_boot.bin $(BIN)/tester/sgb_boot.bin $(BIN)/tester/sgb2_boot.bin +_ios: $(BIN)/SameBoy-iOS.app all: cocoa sdl tester libretro # Get a list of our source files and their respective object file targets @@ -241,11 +255,9 @@ all: cocoa sdl tester libretro CORE_SOURCES := $(shell ls Core/*.c) SDL_SOURCES := $(shell ls SDL/*.c) $(OPEN_DIALOG) $(patsubst %,SDL/audio/%.c,$(SDL_AUDIO_DRIVERS)) TESTER_SOURCES := $(shell ls Tester/*.c) - -ifeq ($(PLATFORM),Darwin) +IOS_SOURCES := $(shell ls iOS/*.m) COCOA_SOURCES := $(shell ls Cocoa/*.m) $(shell ls HexFiend/*.m) $(shell ls JoyKit/*.m) QUICKLOOK_SOURCES := $(shell ls QuickLook/*.m) $(shell ls QuickLook/*.c) -endif ifeq ($(PLATFORM),windows32) CORE_SOURCES += $(shell ls Windows/*.c) @@ -253,6 +265,7 @@ endif CORE_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(CORE_SOURCES)) COCOA_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(COCOA_SOURCES)) +IOS_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(IOS_SOURCES)) QUICKLOOK_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(QUICKLOOK_SOURCES)) SDL_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(SDL_SOURCES)) TESTER_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(TESTER_SOURCES)) @@ -311,6 +324,35 @@ $(OBJ)/HexFiend/%.m.o: HexFiend/%.m $(OBJ)/%.m.o: %.m -@$(MKDIR) -p $(dir $@) $(CC) $(CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@ + +# iOS Port + +$(BIN)/SameBoy-iOS.app: $(BIN)/SameBoy-iOS.app/SameBoy \ + $(shell ls iOS/*.png) \ + iOS/License.html \ + iOS/Info.plist \ + $(BIN)/SameBoy-iOS.app/dmg_boot.bin \ + $(BIN)/SameBoy-iOS.app/mgb_boot.bin \ + $(BIN)/SameBoy-iOS.app/cgb0_boot.bin \ + $(BIN)/SameBoy-iOS.app/cgb_boot.bin \ + $(BIN)/SameBoy-iOS.app/agb_boot.bin \ + $(BIN)/SameBoy-iOS.app/sgb_boot.bin \ + $(BIN)/SameBoy-iOS.app/sgb2_boot.bin \ + Shaders + $(MKDIR) -p $(BIN)/SameBoy-iOS.app + cp iOS/*.png $(BIN)/SameBoy-iOS.app + sed "s/@VERSION/$(VERSION)/;s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < iOS/Info.plist > $(BIN)/SameBoy-iOS.app/Info.plist + sed "s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < Cocoa/License.html > $(BIN)/SameBoy-iOS.app/Credits.html + $(MKDIR) -p $(BIN)/SameBoy-iOS.app/Shaders + cp Shaders/*.fsh Shaders/*.metal $(BIN)/SameBoy-iOS.app/Shaders + $(CODESIGN) $@ + +$(BIN)/SameBoy-iOS.app/SameBoy: $(CORE_OBJECTS) $(IOS_OBJECTS) + -@$(MKDIR) -p $(dir $@) + $(CC) $^ -o $@ $(LDFLAGS) +ifeq ($(CONF), release) + $(STRIP) $@ +endif # Cocoa Port @@ -343,7 +385,7 @@ endif $(BIN)/SameBoy.app/Contents/MacOS/SameBoy: $(CORE_OBJECTS) $(COCOA_OBJECTS) -@$(MKDIR) -p $(dir $@) - $(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) -framework OpenGL -framework AudioUnit -framework AVFoundation -framework CoreVideo -framework CoreMedia -framework IOKit + $(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) -framework OpenGL -framework AudioUnit -framework AVFoundation -framework CoreVideo -framework CoreMedia -framework IOKit -framework PreferencePanes -framework Carbon -framework QuartzCore -framework Security -framework WebKit -weak_framework Metal -weak_framework MetalKit ifeq ($(CONF), release) $(STRIP) $@ endif @@ -443,6 +485,10 @@ $(BIN)/SameBoy.app/Contents/Resources/%.bin: $(BOOTROMS_DIR)/%.bin -@$(MKDIR) -p $(dir $@) cp -f $^ $@ +$(BIN)/SameBoy-iOS.app/%.bin: $(BOOTROMS_DIR)/%.bin + -@$(MKDIR) -p $(dir $@) + cp -f $^ $@ + $(BIN)/SDL/LICENSE: LICENSE -@$(MKDIR) -p $(dir $@) cp -f $^ $@ @@ -536,8 +582,11 @@ $(DESTDIR)$(PREFIX)/share/mime/packages/sameboy.xml: FreeDesktop/sameboy.xml cp -f $^ $@ endif +ios: + @$(MAKE) _ios + # Clean clean: rm -rf build -.PHONY: libretro tester +.PHONY: libretro tester cocoa ios _ios diff --git a/iOS/AppIcon60x60@2x.png b/iOS/AppIcon60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..29d7afbce331424dfb7d75f4c0a6e925deab3e43 GIT binary patch literal 9973 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 n|L#^&66>l84}VX + + + + CFBundleExecutable + SameBoy + CFBundleIdentifier + com.github.liji32.sameboy.ios + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SameBoy + CFBundlePackageType + APPL + CFBundleShortVersionString + Version @VERSION + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + NSHumanReadableCopyright + Copyright © 2015-@COPYRIGHT_YEAR Lior Halphon + CFBundleIcons + + CFBundlePrimaryIcon + + CFBundleIconFiles + + AppIcon60x60@2x.png + AppIcon60x60@3x.png + + + + LSApplicationCategoryType + public.app-category.games + + diff --git a/iOS/License.html b/iOS/License.html new file mode 100644 index 0000000..2473ef8 --- /dev/null +++ b/iOS/License.html @@ -0,0 +1,53 @@ + + + + + + + + + +

SameBoy

+

MIT License

+

Copyright © 2015-@COPYRIGHT_YEAR Lior Halphon

+ +

Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions:

+ +

The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software.

+ +

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.

+ + \ No newline at end of file diff --git a/iOS/main.m b/iOS/main.m new file mode 100644 index 0000000..4af9f5f --- /dev/null +++ b/iOS/main.m @@ -0,0 +1,6 @@ +#import + +int main(int argc, char * argv[]) +{ + return UIApplicationMain(argc, argv, nil, nil); +}