git.y1.nz

SameBoy

Accurate GB/GBC emulator
download: https://git.y1.nz/archives/sameboy.tar.gz
README | Files | Log | Refs | LICENSE

Makefile

      1 # Make hacks
      2 .INTERMEDIATE:
      3 
      4 # Set target, configuration, version and destination folders
      5 
      6 PLATFORM := $(shell uname -s)
      7 ifneq ($(findstring MINGW,$(PLATFORM)),)
      8 PLATFORM := windows32
      9 USE_WINDRES := true
     10 endif
     11 
     12 ifneq ($(findstring MSYS,$(PLATFORM)),)
     13 PLATFORM := windows32
     14 endif
     15 
     16 DL_EXT := so
     17 
     18 ifeq ($(PLATFORM),windows32)
     19 _ := $(shell chcp 65001)
     20 EXESUFFIX:=.exe
     21 NATIVE_CC = clang -IWindows -Wno-deprecated-declarations --target=x86_64-pc-windows
     22 SDL_AUDIO_DRIVERS ?= xaudio2 sdl
     23 else
     24 EXESUFFIX:=
     25 NATIVE_CC := cc
     26 SDL_AUDIO_DRIVERS ?= sdl
     27 endif
     28 
     29 PB12_COMPRESS := build/pb12$(EXESUFFIX)
     30 
     31 ifeq ($(PLATFORM),Darwin)
     32 DEFAULT := cocoa
     33 ENABLE_OPENAL ?= 1
     34 DL_EXT := dylib
     35 else
     36 DEFAULT := sdl
     37 endif
     38 
     39 
     40 NULL := /dev/null
     41 ifeq ($(PLATFORM),windows32)
     42 ifneq ($(shell echo /dev/null*),/dev/null)
     43 # Windows shell is not "aware" of /dev/null, use NUL and pray
     44 NULL := NUL
     45 endif
     46 endif
     47 
     48 PREFIX ?= /usr/local
     49 ifneq ($(shell which xdg-open 2> $(NULL))$(FREEDESKTOP),)
     50 # Running on an FreeDesktop environment, configure for (optional) installation
     51 DESTDIR ?= 
     52 DATA_DIR ?= $(PREFIX)/share/sameboy/
     53 FREEDESKTOP ?= true
     54 endif
     55 
     56 default: $(DEFAULT)
     57 
     58 ifeq ($(MAKECMDGOALS),)
     59 MAKECMDGOALS := $(DEFAULT)
     60 endif
     61 
     62 ifneq ($(DISABLE_TIMEKEEPING),)
     63 CFLAGS += -DGB_DISABLE_TIMEKEEPING
     64 CPPP_FLAGS += -DGB_DISABLE_TIMEKEEPING
     65 else
     66 CPPP_FLAGS += -UGB_DISABLE_TIMEKEEPING
     67 endif
     68 
     69 ifneq ($(DISABLE_REWIND),)
     70 CFLAGS += -DGB_DISABLE_REWIND
     71 CPPP_FLAGS += -DGB_DISABLE_REWIND
     72 CORE_FILTER += Core/rewind.c
     73 else
     74 CPPP_FLAGS += -UGB_DISABLE_REWIND
     75 endif
     76 
     77 ifneq ($(DISABLE_DEBUGGER),)
     78 CFLAGS += -DGB_DISABLE_DEBUGGER
     79 CPPP_FLAGS += -DGB_DISABLE_DEBUGGER
     80 CORE_FILTER += Core/debugger.c Core/sm83_disassembler.c Core/symbol_hash.c
     81 DISABLE_CHEAT_SEARCH := 1
     82 else
     83 CPPP_FLAGS += -UGB_DISABLE_DEBUGGER
     84 endif
     85 
     86 ifneq ($(DISABLE_CHEATS),)
     87 CFLAGS += -DGB_DISABLE_CHEATS
     88 CPPP_FLAGS += -DGB_DISABLE_CHEATS
     89 CORE_FILTER += Core/cheats.c
     90 DISABLE_CHEAT_SEARCH := 1
     91 else
     92 CPPP_FLAGS += -UGB_DISABLE_CHEATS
     93 endif
     94 
     95 ifneq ($(DISABLE_CHEAT_SEARCH),)
     96 CFLAGS += -DGB_DISABLE_CHEAT_SEARCH
     97 CPPP_FLAGS += -DGB_DISABLE_CHEAT_SEARCH
     98 CORE_FILTER += Core/cheat_search.c
     99 else
    100 CPPP_FLAGS += -UGB_DISABLE_CHEAT_SEARCH
    101 endif
    102 
    103 CPPP_FLAGS += -UGB_INTERNAL
    104 
    105 include version.mk
    106 COPYRIGHT_YEAR := $(shell grep -oE "20[2-9][0-9]" LICENSE)
    107 export VERSION
    108 CONF ?= debug
    109 
    110 BIN := build/bin
    111 OBJ := build/obj
    112 INC := build/include/sameboy
    113 LIBDIR := build/lib
    114 PKGCONF_DIR := $(LIBDIR)/pkgconfig
    115 PKGCONF_FILE := $(PKGCONF_DIR)/sameboy.pc
    116 
    117 ifneq ($(CORE_FILTER)$(DISABLE_TIMEKEEPING),)
    118 ifneq ($(filter-out lib headers $(LIBDIR)/% $(INC)/%,$(MAKECMDGOALS)),)
    119 $(error SameBoy features can only be disabled when compiling the 'lib' target)
    120 endif
    121 endif
    122 
    123 BOOTROMS_DIR ?= $(BIN)/BootROMs
    124 
    125 ifdef DATA_DIR
    126 CFLAGS += -DDATA_DIR="\"$(DATA_DIR)\""
    127 endif
    128 
    129 # Set tools
    130 
    131 # Use clang if it's available.
    132 ifeq ($(origin CC),default)
    133 ifneq (, $(shell which clang 2> $(NULL)))
    134 CC := clang 
    135 endif
    136 endif
    137 
    138 IBTOOL ?= ibtool
    139 
    140 # Find libraries with pkg-config if available.
    141 ifneq (, $(shell which pkg-config 2> $(NULL)))
    142 # But not on macOS, it's annoying, and not on Haiku, where OpenGL is broken
    143 ifeq ($(filter Darwin Haiku,$(PLATFORM)),)
    144 PKG_CONFIG := pkg-config
    145 endif
    146 endif
    147 
    148 ifeq ($(PLATFORM),windows32)
    149 # To force use of the Unix version instead of the Windows version
    150 MKDIR := $(shell which mkdir)
    151 else
    152 MKDIR := mkdir
    153 endif
    154 
    155 ifeq ($(CONF),native_release)
    156 override CONF := release
    157 LDFLAGS += -march=native -mtune=native
    158 CFLAGS += -march=native -mtune=native
    159 endif
    160 
    161 ifeq ($(CONF),fat_release)
    162 override CONF := release
    163 FAT_FLAGS += -arch x86_64 -arch arm64
    164 endif
    165 
    166 IOS_MIN := 11.0
    167 
    168 IOS_PNGS := $(shell ls iOS/*.png iOS/*.car)
    169 # Support out-of-PATH RGBDS
    170 RGBASM  := $(RGBDS)rgbasm
    171 RGBLINK := $(RGBDS)rgblink
    172 RGBGFX  := $(RGBDS)rgbgfx
    173 
    174 # RGBASM 0.7+ deprecate and remove `-h`
    175 RGBASM_FLAGS := $(if $(filter $(shell echo 'println __RGBDS_MAJOR__ || (!__RGBDS_MAJOR__ && __RGBDS_MINOR__ > 6)' | $(RGBASM) -), $$0), -h,) --include $(OBJ)/BootROMs/ --include BootROMs/
    176 # RGBGFX 0.6+ replace `-h` with `-Z`, and need `-c embedded`
    177 RGBGFX_FLAGS := $(if $(filter $(shell echo 'println __RGBDS_MAJOR__ || (!__RGBDS_MAJOR__ && __RGBDS_MINOR__ > 5)' | $(RGBASM) -), $$0), -h -u, -Z -u -c embedded)
    178 
    179 
    180 # Set compilation and linkage flags based on target, platform and configuration
    181 
    182 OPEN_DIALOG = SDL/open_dialog/gtk.c
    183 SAVE_PNG = SDL/save_png/libpng.c
    184 NEED_LIBPNG = 1
    185 
    186 ifeq ($(PLATFORM),windows32)
    187 OPEN_DIALOG = SDL/open_dialog/windows.c
    188 SAVE_PNG = SDL/save_png/windows.c
    189 NEED_LIBPNG = 0
    190 endif
    191 
    192 ifeq ($(PLATFORM),Darwin)
    193 OPEN_DIALOG = SDL/open_dialog/cocoa.m
    194 SAVE_PNG = SDL/save_png/appkit.m
    195 NEED_LIBPNG = 0
    196 endif
    197 
    198 # These must come before the -Wno- flags
    199 WARNINGS += -Werror -Wall -Wno-unknown-warning -Wno-unknown-warning-option -Wno-missing-braces
    200 WARNINGS += -Wno-nonnull -Wno-unused-result -Wno-multichar -Wno-int-in-bool-context -Wno-format-truncation -Wno-nullability-completeness
    201 
    202 # Only add this flag if the compiler supports it
    203 ifeq ($(shell $(CC) -x c -c $(NULL) -o $(NULL) -Werror -Wpartial-availability 2> $(NULL); echo $$?),0)
    204 WARNINGS += -Wpartial-availability
    205 endif
    206 
    207 # GCC's implementation of this warning has false positives, so we skip it
    208 ifneq ($(shell $(CC) --version 2>&1 | grep "gcc"), )
    209 WARNINGS += -Wno-maybe-uninitialized
    210 endif
    211 
    212 CFLAGS += $(WARNINGS)
    213 
    214 CFLAGS += -std=gnu11 -D_GNU_SOURCE -DGB_VERSION='"$(VERSION)"' -DGB_COPYRIGHT_YEAR='"$(COPYRIGHT_YEAR)"' -I. -D_USE_MATH_DEFINES
    215 ifneq ($(PLATFORM),windows32)
    216 CFLAGS += -fPIC
    217 endif
    218 
    219 ifneq (,$(UPDATE_SUPPORT))
    220 CFLAGS += -DUPDATE_SUPPORT
    221 endif
    222 
    223 ifeq (,$(PKG_CONFIG))
    224 ifneq ($(PLATFORM),windows32)
    225 SDL_CFLAGS := $(shell sdl2-config --cflags)
    226 SDL_LDFLAGS := $(shell sdl2-config --libs) -lpthread
    227 endif
    228 ifeq ($(PLATFORM),Darwin)
    229 SDL_LDFLAGS += -framework AppKit
    230 endif
    231 
    232 # We cannot detect the presence of OpenAL dev headers,
    233 # so we must do this manually
    234 ifeq ($(ENABLE_OPENAL),1)
    235 SDL_CFLAGS += -DENABLE_OPENAL
    236 ifeq ($(PLATFORM),Darwin)
    237 SDL_LDFLAGS += -framework OpenAL
    238 else
    239 SDL_LDFLAGS += -lopenal
    240 endif
    241 SDL_AUDIO_DRIVERS += openal
    242 endif
    243 else # ifneq ($(PKG_CONFIG),)
    244 SDL_CFLAGS := $(shell $(PKG_CONFIG) --cflags sdl2)
    245 SDL_LDFLAGS := $(shell $(PKG_CONFIG) --libs sdl2) -lpthread
    246 
    247 # Allow OpenAL to be disabled even if the development libraries are available
    248 ifneq ($(ENABLE_OPENAL),0)
    249 ifneq ($(shell $(PKG_CONFIG) --exists openal && echo 0),)
    250 SDL_CFLAGS += $(shell $(PKG_CONFIG) --cflags openal) -DENABLE_OPENAL
    251 SDL_LDFLAGS += $(shell $(PKG_CONFIG) --libs openal)
    252 SDL_AUDIO_DRIVERS += openal
    253 endif
    254 endif
    255 
    256 ifneq ($(shell $(PKG_CONFIG) --exists gio-unix-2.0 || echo 0),)
    257 GIO_CFLAGS = $(error The Gio library could not be found)
    258 GIO_LDFLAGS = $(error The Gio library could not be found)
    259 else
    260 GIO_CFLAGS := $(shell $(PKG_CONFIG) --cflags gio-unix-2.0) -DG_LOG_USE_STRUCTURED
    261 GIO_LDFLAGS := $(shell $(PKG_CONFIG) --libs gio-unix-2.0)
    262 ifeq ($(CONF),debug)
    263 GIO_CFLAGS += -DG_ENABLE_DEBUG
    264 else
    265 GIO_CFLAGS += -DG_DISABLE_ASSERT
    266 endif
    267 endif
    268 
    269 ifneq ($(shell $(PKG_CONFIG) --exists gdk-pixbuf-2.0 || echo 0),)
    270 GDK_PIXBUF_CFLAGS = $(error The Gdk-Pixbuf library could not be found)
    271 GDK_PIXBUF_LDFLAGS = $(error The Gdk-Pixbuf library could not be found)
    272 else
    273 GDK_PIXBUF_CFLAGS := $(shell $(PKG_CONFIG) --cflags gdk-pixbuf-2.0)
    274 GDK_PIXBUF_LDFLAGS := $(shell $(PKG_CONFIG) --libs gdk-pixbuf-2.0)
    275 endif
    276 endif
    277 
    278 ifeq (,$(PKG_CONFIG))
    279 GL_LDFLAGS := -lGL
    280 ifeq ($(NEED_LIBPNG),1)
    281 SDL_LDFLAGS += -lpng
    282 endif
    283 else
    284 GL_CFLAGS := $(shell $(PKG_CONFIG) --cflags gl)
    285 GL_LDFLAGS := $(shell $(PKG_CONFIG) --libs gl || echo -lGL)
    286 ifeq ($(NEED_LIBPNG),1)
    287 SDL_LDFLAGS += $(shell $(PKG_CONFIG) --libs libpng || echo -lpng)
    288 SDL_CFLAGS += $(shell $(PKG_CONFIG) --cflags libpng)
    289 endif
    290 endif
    291 
    292 ifeq ($(PLATFORM),windows32)
    293 CFLAGS += -IWindows -Drandom=rand --target=x86_64-pc-windows
    294 LDFLAGS += -lmsvcrt -lkernel32 -Wl,/MANIFESTFILE:NUL --target=x86_64-pc-windows
    295 SDL_LDFLAGS := -lSDL2 -lcomdlg32 -luser32 -lshell32 -lole32 -ladvapi32 -ldwmapi -lwindowscodecs -lSDL2main
    296 GL_LDFLAGS := -lopengl32 
    297 ifneq ($(REDIST_XAUDIO),)
    298 CFLAGS += -DREDIST_XAUDIO
    299 LDFLAGS += -lxaudio2_9redist
    300 sdl: $(BIN)/SDL/xaudio2_9redist.dll
    301 endif
    302 else
    303 LDFLAGS += -lc -lm
    304 # libdl is not available as a standalone library in Haiku or OpenBSD
    305 ifneq ($(PLATFORM),Haiku)
    306 ifneq ($(PLATFORM),OpenBSD)
    307 LDFLAGS += -ldl
    308 endif
    309 endif
    310 endif
    311 
    312 ifeq ($(MAKECMDGOALS),_ios)
    313 OBJ := build/obj-ios
    314 SYSROOT := $(shell xcodebuild -sdk iphoneos -version Path 2> $(NULL))
    315 ifeq ($(SYSROOT),)
    316 $(error Could not find an iOS SDK)
    317 endif
    318 CFLAGS += -arch arm64 -miphoneos-version-min=$(IOS_MIN) -isysroot $(SYSROOT) -IAppleCommon -DGB_DISABLE_DEBUGGER
    319 CORE_FILTER += Core/debugger.c Core/sm83_disassembler.c Core/symbol_hash.c Core/cheat_search.c
    320 LDFLAGS += -arch arm64
    321 OCFLAGS += -x objective-c -fobjc-arc -Wno-deprecated-declarations -isysroot $(SYSROOT)
    322 LDFLAGS += -miphoneos-version-min=$(IOS_MIN)  -isysroot $(SYSROOT)
    323 IOS_INSTALLER_LDFLAGS := $(LDFLAGS) -lobjc -framework CoreServices -framework Foundation
    324 LDFLAGS += -lobjc -framework UIKit -framework Foundation -framework CoreGraphics -framework Metal -framework MetalKit -framework AudioToolbox -framework AVFoundation -framework QuartzCore -framework CoreMotion -framework CoreVideo -framework CoreMedia -framework CoreImage -framework UserNotifications -framework GameController -weak_framework CoreHaptics -framework MobileCoreServices -lcompression
    325 CODESIGN := codesign -fs -
    326 else
    327 ifeq ($(PLATFORM),Darwin)
    328 SYSROOT := $(shell xcodebuild -sdk macosx -version Path 2> $(NULL))
    329 ifeq ($(SYSROOT),)
    330 SYSROOT := /Library/Developer/CommandLineTools/SDKs/$(shell ls /Library/Developer/CommandLineTools/SDKs/ | grep "[0-9]\." | tail -n 1)
    331 endif
    332 ifeq ($(SYSROOT),/Library/Developer/CommandLineTools/SDKs/)
    333 $(error Could not find a macOS SDK)
    334 endif
    335 
    336 CFLAGS += -F/Library/Frameworks -mmacosx-version-min=10.9 -isysroot $(SYSROOT) -IAppleCommon
    337 OCFLAGS += -x objective-c -fobjc-arc -Wno-deprecated-declarations -isysroot $(SYSROOT)
    338 LDFLAGS += -mmacosx-version-min=10.9 -isysroot $(SYSROOT)
    339 GL_LDFLAGS := -framework OpenGL
    340 endif
    341 CFLAGS += -Wno-deprecated-declarations
    342 ifeq ($(PLATFORM),windows32)
    343 CFLAGS += -Wno-deprecated-declarations # Seems like Microsoft deprecated every single LIBC function
    344 LDFLAGS += -Wl,/NODEFAULTLIB:libcmt.lib
    345 
    346 ifneq ($(USE_MSVCRT_DLL),)
    347 CFLAGS += -D_NO_CRT_STDIO_INLINE -DUSE_MSVCRT_DLL
    348 $(BIN)/SDL/sameboy.exe: $(OBJ)/Windows/msvcrt.lib
    349 $(LIBDIR)/libsameboy.dll: $(OBJ)/Windows/msvcrt.lib
    350 endif
    351 
    352 endif
    353 endif
    354 
    355 LIBFLAGS := -nostdlib -Wl,-r
    356 ifneq ($(PLATFORM),Darwin)
    357 LIBFLAGS += -no-pie
    358 endif
    359 
    360 ifeq ($(CONF),debug)
    361 CFLAGS += -g
    362 else ifeq ($(CONF), release)
    363 CFLAGS += -O3 -ffast-math -DNDEBUG
    364 # The frontend code is not time-critical, prefer reducing the size for less memory use and better cache utilization 
    365 ifeq ($(shell $(CC) -x c -c $(NULL) -o $(NULL) -Werror -Oz 2> $(NULL); echo $$?),0)
    366 FRONTEND_CFLAGS += -Oz
    367 else
    368 FRONTEND_CFLAGS += -Os
    369 endif
    370 
    371 # Don't use function outlining. I breaks Obj-C ARC optimizations and Apple never bothered to fix it. It also hardly has any effect on file size.
    372 ifeq ($(shell $(CC) -x c -c $(NULL) -o $(NULL) -Werror -mno-outline 2> $(NULL); echo $$?),0)
    373 FRONTEND_CFLAGS += -mno-outline
    374 LDFLAGS += -mno-outline
    375 endif
    376 
    377 STRIP := strip
    378 LDFLAGS += -flto
    379 CFLAGS += -flto
    380 LDFLAGS += -Wno-lto-type-mismatch # For GCC's LTO
    381 
    382 else
    383 $(error Invalid value for CONF: $(CONF). Use "debug", "release" or "native_release")
    384 endif
    385 
    386 CODESIGN := true
    387 ifeq ($(PLATFORM),Darwin)
    388 LDFLAGS += -Wl,-exported_symbols_list,$(NULL)
    389 STRIP := strip -x
    390 CODESIGN := codesign -fs -
    391 endif
    392 
    393 ifeq ($(PLATFORM),windows32)
    394 LDFLAGS +=  -fuse-ld=lld
    395 endif
    396 
    397 
    398 # Define our targets
    399 
    400 ifeq ($(PLATFORM),windows32)
    401 SDL_TARGET := $(BIN)/SDL/sameboy.exe $(BIN)/SDL/SDL2.dll $(BIN)/SDL/sameboy_debugger.txt
    402 TESTER_TARGET := $(BIN)/tester/sameboy_tester.exe
    403 else
    404 SDL_TARGET := $(BIN)/SDL/sameboy
    405 TESTER_TARGET := $(BIN)/tester/sameboy_tester
    406 endif
    407 
    408 cocoa: $(BIN)/SameBoy.app
    409 xdg-thumbnailer: $(BIN)/XdgThumbnailer/sameboy-thumbnailer
    410 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
    411 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
    412 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
    413 _ios: $(BIN)/SameBoy-iOS.app $(OBJ)/installer
    414 ios-ipa: $(BIN)/SameBoy-iOS.ipa
    415 ios-deb: $(BIN)/SameBoy-iOS.deb
    416 ifeq ($(PLATFORM),windows32)
    417 lib: $(LIBDIR)/libsameboy.dll
    418 else
    419 lib: $(LIBDIR)/libsameboy.o $(LIBDIR)/libsameboy.a $(LIBDIR)/libsameboy.$(DL_EXT)
    420 endif
    421 all: sdl tester libretro lib
    422 ifeq ($(PLATFORM),Darwin)
    423 all: cocoa ios-ipa ios-deb
    424 endif
    425 ifneq ($(FREEDESKTOP),)
    426 all: xdg-thumbnailer
    427 endif
    428 
    429 # Get a list of our source files and their respective object file targets
    430 
    431 CORE_SOURCES := $(filter-out $(CORE_FILTER),$(shell ls Core/*.c))
    432 CORE_HEADERS := $(shell ls Core/*.h)
    433 SDL_SOURCES := $(shell ls SDL/*.c) $(OPEN_DIALOG) $(SAVE_PNG) $(patsubst %,SDL/audio/%.c,$(SDL_AUDIO_DRIVERS))
    434 TESTER_SOURCES := $(shell ls Tester/*.c)
    435 IOS_SOURCES := $(filter-out iOS/installer.m, $(shell ls iOS/*.m)) $(shell ls AppleCommon/*.m)
    436 COCOA_SOURCES := $(shell ls Cocoa/*.m) $(shell ls HexFiend/*.m) $(shell ls JoyKit/*.m) $(shell ls AppleCommon/*.m)
    437 QUICKLOOK_SOURCES := $(shell ls QuickLook/*.m) $(shell ls QuickLook/*.c)
    438 XDG_THUMBNAILER_SOURCES := $(shell ls XdgThumbnailer/*.c)
    439 
    440 ifeq ($(PLATFORM),windows32)
    441 CORE_SOURCES += $(shell ls Windows/*.c)
    442 endif
    443 
    444 CORE_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(CORE_SOURCES))
    445 PUBLIC_HEADERS := $(patsubst Core/%,$(INC)/%,$(CORE_HEADERS))
    446 COCOA_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(COCOA_SOURCES))
    447 IOS_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(IOS_SOURCES))
    448 QUICKLOOK_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(QUICKLOOK_SOURCES))
    449 SDL_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(SDL_SOURCES))
    450 TESTER_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(TESTER_SOURCES))
    451 XDG_THUMBNAILER_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(XDG_THUMBNAILER_SOURCES)) $(OBJ)/XdgThumbnailer/resources.c.o
    452 
    453 lib: headers
    454 headers: $(PUBLIC_HEADERS)
    455 
    456 # Automatic dependency generation
    457 
    458 ifneq ($(filter-out ios ios-ipa ios-deb clean bootroms libretro %.bin, $(MAKECMDGOALS)),)
    459 -include $(CORE_OBJECTS:.o=.dep)
    460 ifneq ($(filter $(MAKECMDGOALS),sdl),)
    461 -include $(SDL_OBJECTS:.o=.dep)
    462 endif
    463 ifneq ($(filter $(MAKECMDGOALS),tester),)
    464 -include $(TESTER_OBJECTS:.o=.dep)
    465 endif
    466 ifneq ($(filter $(MAKECMDGOALS),cocoa),)
    467 -include $(COCOA_OBJECTS:.o=.dep)
    468 endif
    469 ifneq ($(filter $(MAKECMDGOALS),_ios),)
    470 -include $(IOS_OBJECTS:.o=.dep)
    471 endif
    472 endif
    473 
    474 $(OBJ)/SDL/%.dep: SDL/%
    475 	-@$(MKDIR) -p $(dir $@)
    476 	$(CC) $(CFLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -MT $(OBJ)/$^.o -M $^ -o $@
    477 	
    478 $(OBJ)/SDL/open_dialog/%.dep: SDL/open_dialog/%
    479 	-@$(MKDIR) -p $(dir $@)
    480 	$(CC) $(CFLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -MT $(OBJ)/$^.o -M $^ -o $@
    481 
    482 $(OBJ)/%.dep: %
    483 	-@$(MKDIR) -p $(dir $@)
    484 	$(CC) $(CFLAGS) -MT $(OBJ)/$^.o -M $^ -o $@
    485 
    486 # Compilation rules
    487 
    488 $(OBJ)/Core/%.c.o: Core/%.c
    489 	-@$(MKDIR) -p $(dir $@)
    490 	$(CC) $(CFLAGS) $(FAT_FLAGS) -DGB_INTERNAL -c $< -o $@
    491 
    492 $(OBJ)/SDL/%.c.o: SDL/%.c
    493 	-@$(MKDIR) -p $(dir $@)
    494 	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@
    495 
    496 $(OBJ)/XdgThumbnailer/%.c.o: XdgThumbnailer/%.c
    497 	-@$(MKDIR) -p $(dir $@)
    498 	$(CC) $(CFLAGS) $(GIO_CFLAGS) $(GDK_PIXBUF_CFLAGS) -DG_LOG_DOMAIN='"sameboy-thumbnailer"' -c $< -o $@
    499 # Make sure not to attempt compiling this before generating the resource code.
    500 $(OBJ)/XdgThumbnailer/emulate.c.o: $(OBJ)/XdgThumbnailer/resources.h
    501 # Silence warnings for this. It is code generated not by us, so we do not want `-Werror` to break
    502 # compilation with some version of the generator and/or compiler.
    503 $(OBJ)/XdgThumbnailer/%.c.o: $(OBJ)/XdgThumbnailer/%.c
    504 	-@$(MKDIR) -p $(dir $@)
    505 	$(CC) $(CFLAGS) $(GIO_CFLAGS) $(GDK_PIXBUF_CFLAGS) -DG_LOG_DOMAIN='"sameboy-thumbnailer"' -w -c $< -o $@
    506 
    507 $(OBJ)/XdgThumbnailer/resources.c $(OBJ)/XdgThumbnailer/resources.h: %: XdgThumbnailer/resources.gresource.xml $(BIN)/BootROMs/cgb_boot_fast.bin
    508 	-@$(MKDIR) -p $(dir $@)
    509 	CC=$(CC) glib-compile-resources --dependency-file $@.mk --generate-phony-targets --generate --target $@ $<
    510 -include $(OBJ)/XdgThumbnailer/resources.c.mk $(OBJ)/XdgThumbnailer/resources.h.mk
    511 
    512 $(OBJ)/SDL/open_dialog/%.c.o: SDL/open_dialog/%.c
    513 	-@$(MKDIR) -p $(dir $@)
    514 	$(CC) $(CFLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@
    515 
    516 
    517 $(OBJ)/%.c.o: %.c
    518 	-@$(MKDIR) -p $(dir $@)
    519 	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) -c $< -o $@
    520 	
    521 # HexFiend requires more flags
    522 $(OBJ)/HexFiend/%.m.o: HexFiend/%.m
    523 	-@$(MKDIR) -p $(dir $@)
    524 	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@ -fno-objc-arc -include HexFiend/HexFiend_2_Framework_Prefix.pch
    525 	
    526 # Apple-specific code in SDL
    527 $(OBJ)/SDL/%.m.o: SDL/%.m
    528 	-@$(MKDIR) -p $(dir $@)
    529 	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(OCFLAGS) $(SDL_CFLAGS) -c $< -o $@
    530     
    531 $(OBJ)/%.m.o: %.m
    532 	-@$(MKDIR) -p $(dir $@)
    533 	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@
    534 
    535 # iOS Port
    536 
    537 $(BIN)/SameBoy-iOS.app: $(BIN)/SameBoy-iOS.app/SameBoy \
    538                         $(IOS_PNGS) \
    539                         iOS/License.html \
    540                         iOS/Info.plist \
    541                         $(BIN)/SameBoy-iOS.app/dmg_boot.bin \
    542                         $(BIN)/SameBoy-iOS.app/mgb_boot.bin \
    543                         $(BIN)/SameBoy-iOS.app/cgb0_boot.bin \
    544                         $(BIN)/SameBoy-iOS.app/cgb_boot.bin \
    545                         $(BIN)/SameBoy-iOS.app/agb_boot.bin \
    546                         $(BIN)/SameBoy-iOS.app/sgb_boot.bin \
    547                         $(BIN)/SameBoy-iOS.app/sgb2_boot.bin \
    548 						$(BIN)/SameBoy-iOS.app/LaunchScreen.storyboardc \
    549                         Shaders
    550 	$(MKDIR) -p $(BIN)/SameBoy-iOS.app
    551 	cp $(IOS_PNGS) $(BIN)/SameBoy-iOS.app
    552 	sed "s/@VERSION/$(VERSION)/;s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < iOS/Info.plist > $(BIN)/SameBoy-iOS.app/Info.plist
    553 	sed "s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < iOS/License.html > $(BIN)/SameBoy-iOS.app/License.html
    554 	$(MKDIR) -p $(BIN)/SameBoy-iOS.app/Shaders
    555 	cp Shaders/*.fsh Shaders/*.metal $(BIN)/SameBoy-iOS.app/Shaders
    556 	$(CODESIGN) $@
    557 
    558 $(BIN)/SameBoy-iOS.app/SameBoy: $(CORE_OBJECTS) $(IOS_OBJECTS)
    559 	-@$(MKDIR) -p $(dir $@)
    560 	$(CC) $^ -o $@ $(LDFLAGS)
    561 ifeq ($(CONF), release)
    562 	$(STRIP) $@
    563 endif
    564 
    565 $(OBJ)/installer: iOS/installer.m
    566 	$(CC) $< -o $@ $(IOS_INSTALLER_LDFLAGS) $(CFLAGS)
    567 
    568 # Cocoa Port
    569 
    570 $(BIN)/SameBoy.app: $(BIN)/SameBoy.app/Contents/MacOS/SameBoy \
    571                     $(shell ls Cocoa/*.icns Cocoa/*.png Cocoa/*.car) \
    572                     Cocoa/License.html \
    573                     Cocoa/Info.plist \
    574                     Cocoa/SameBoy.entitlements \
    575                     Misc/registers.sym \
    576                     $(BIN)/SameBoy.app/Contents/Resources/dmg_boot.bin \
    577                     $(BIN)/SameBoy.app/Contents/Resources/mgb_boot.bin \
    578                     $(BIN)/SameBoy.app/Contents/Resources/cgb0_boot.bin \
    579                     $(BIN)/SameBoy.app/Contents/Resources/cgb_boot.bin \
    580                     $(BIN)/SameBoy.app/Contents/Resources/agb_boot.bin \
    581                     $(BIN)/SameBoy.app/Contents/Resources/sgb_boot.bin \
    582                     $(BIN)/SameBoy.app/Contents/Resources/sgb2_boot.bin \
    583                     $(patsubst %.xib,%.nib,$(addprefix $(BIN)/SameBoy.app/Contents/Resources/,$(shell cd Cocoa;ls *.xib))) \
    584                     $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator \
    585 					$(BIN)/SameBoy.app/Contents/PlugIns/Thumbnailer.appex \
    586 					$(BIN)/SameBoy.app/Contents/PlugIns/Previewer.appex \
    587                     Shaders
    588 	$(MKDIR) -p $(BIN)/SameBoy.app/Contents/Resources
    589 	cp Cocoa/*.icns Cocoa/*.png Cocoa/*.car Misc/registers.sym $(BIN)/SameBoy.app/Contents/Resources/
    590 	sed "s/@VERSION/$(VERSION)/;s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < Cocoa/Info.plist > $(BIN)/SameBoy.app/Contents/Info.plist
    591 	sed "s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < Cocoa/License.html > $(BIN)/SameBoy.app/Contents/Resources/Credits.html
    592 	$(MKDIR) -p $(BIN)/SameBoy.app/Contents/Resources/Shaders
    593 	cp Shaders/*.fsh Shaders/*.metal $(BIN)/SameBoy.app/Contents/Resources/Shaders
    594 	$(MKDIR) -p $(BIN)/SameBoy.app/Contents/Library/QuickLook/
    595 	$(CODESIGN) $@ --entitlements Cocoa/SameBoy.entitlements
    596 
    597 # We place the dylib inside the Quick Look plugin, because Quick Look plugins run in a very strict sandbox
    598 
    599 $(BIN)/SameBoy.app/Contents/MacOS/SameBoy: $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/MacOS/SameBoy.dylib
    600 	-@$(MKDIR) -p $(dir $@)
    601 	$(CC) -o $@ $(LDFLAGS) $(FAT_FLAGS) -rpath @executable_path/../Library/QuickLook/SameBoy.qlgenerator/ -Wl,-reexport_library,$^
    602 	
    603 $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/MacOS/SameBoy.dylib: $(COCOA_OBJECTS) $(CORE_OBJECTS) $(QUICKLOOK_OBJECTS)
    604 	-@$(MKDIR) -p $(dir $@)
    605 	$(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) -shared -install_name @rpath/Contents/MacOS/SameBoy.dylib -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 -weak_framework QuickLookThumbnailing -weak_framework QuickLookUI -framework Quicklook -framework AppKit -Wl,-exported_symbols_list,QuickLook/exports.sym -Wl,-exported_symbol,_main
    606 ifeq ($(CONF), release)
    607 	$(STRIP) $@
    608 	$(CODESIGN) $@
    609 endif
    610 
    611 $(BIN)/SameBoy.app/Contents/Resources/%.nib: Cocoa/%.xib
    612 	$(IBTOOL) --target-device mac --minimum-deployment-target 10.9 --compile $@ $^ 2>&1 | cat -
    613 	
    614 $(BIN)/SameBoy-iOS.app/%.storyboardc: iOS/%.storyboard
    615 	$(IBTOOL) --target-device iphone --target-device ipad --minimum-deployment-target $(IOS_MIN) --compile $@ $^ 2>&1 | cat -
    616 
    617 # Quick Look generators
    618 
    619 $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator: $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/MacOS/SameBoyQL \
    620                             									   $(shell ls QuickLook/*.png) \
    621 										                           QuickLook/Info.plist \
    622 										                           $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/Resources/cgb_boot_fast.bin
    623 	$(MKDIR) -p $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/Resources
    624 	cp QuickLook/*.png $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/Resources/
    625 	sed "s/@VERSION/$(VERSION)/;s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < QuickLook/Info.plist > $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/Info.plist
    626 ifeq ($(CONF), release)
    627 	$(CODESIGN) $@
    628 endif
    629 
    630 $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/MacOS/SameBoyQL: $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/MacOS/SameBoy.dylib
    631 	-@$(MKDIR) -p $(dir $@)
    632 	$(CC) -o $@ $(LDFLAGS) $(FAT_FLAGS) -bundle -Wl,-reexport_library,$^ -rpath @loader_path/../../
    633 ifeq ($(CONF), release)
    634 	$(STRIP) $@
    635 endif
    636 
    637 $(BIN)/SameBoy.app/Contents/PlugIns/Thumbnailer.appex: $(BIN)/SameBoy.app/Contents/PlugIns/Thumbnailer.appex/Contents/MacOS/Thumbnailer \
    638    													   QuickLook/Thumbnailer.plist \
    639 													   QuickLook/plugin.entitlements
    640 	sed "s/@VERSION/$(VERSION)/;s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < QuickLook/Thumbnailer.plist > $(BIN)/SameBoy.app/Contents/PlugIns/Thumbnailer.appex/Contents/Info.plist
    641 	$(CODESIGN) --entitlements QuickLook/plugin.entitlements $@
    642 
    643 $(BIN)/SameBoy.app/Contents/PlugIns/Thumbnailer.appex/Contents/MacOS/Thumbnailer: $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/MacOS/SameBoy.dylib
    644 	-@$(MKDIR) -p $(dir $@)
    645 	$(CC) -o $@ $(LDFLAGS) $(FAT_FLAGS) -e _NSExtensionMain -framework Foundation -Wl,-reexport_library,$^ -rpath @loader_path/../../../../Library/QuickLook/SameBoy.qlgenerator/ 
    646 ifeq ($(CONF), release)
    647 	$(STRIP) $@
    648 endif
    649 
    650 $(BIN)/SameBoy.app/Contents/PlugIns/Previewer.appex: $(BIN)/SameBoy.app/Contents/PlugIns/Previewer.appex/Contents/MacOS/Previewer \
    651   													 QuickLook/Previewer.plist \
    652 													 QuickLook/plugin.entitlements
    653 	sed "s/@VERSION/$(VERSION)/;s/@COPYRIGHT_YEAR/$(COPYRIGHT_YEAR)/" < QuickLook/Previewer.plist > $(BIN)/SameBoy.app/Contents/PlugIns/Previewer.appex/Contents/Info.plist
    654 	$(CODESIGN) --entitlements QuickLook/plugin.entitlements $@
    655 
    656 $(BIN)/SameBoy.app/Contents/PlugIns/Previewer.appex/Contents/MacOS/Previewer: $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/MacOS/SameBoy.dylib
    657 	-@$(MKDIR) -p $(dir $@)
    658 	$(CC) -o $@ $(LDFLAGS) $(FAT_FLAGS) -e _NSExtensionMain -framework Foundation -Wl,-reexport_library,$^ -rpath @loader_path/../../../../Library/QuickLook/SameBoy.qlgenerator/ 
    659 ifeq ($(CONF), release)
    660 	$(STRIP) $@
    661 endif
    662 
    663 # cgb_boot_fast.bin is not a standard boot ROM, we don't expect it to exist in the user-provided
    664 # boot ROM directory.
    665 $(BIN)/SameBoy.app/Contents/Library/QuickLook/SameBoy.qlgenerator/Contents/Resources/cgb_boot_fast.bin: $(BIN)/BootROMs/cgb_boot_fast.bin
    666 	-@$(MKDIR) -p $(dir $@)
    667 	cp -f $^ $@
    668 
    669 # XDG thumbnailer
    670 
    671 $(BIN)/XdgThumbnailer/sameboy-thumbnailer: $(CORE_OBJECTS) $(XDG_THUMBNAILER_OBJECTS)
    672 	-@$(MKDIR) -p $(dir $@)
    673 	$(CC) $^ -o $@ $(LDFLAGS) $(GIO_LDFLAGS) $(GDK_PIXBUF_LDFLAGS)
    674 ifeq ($(CONF), release)
    675 	$(STRIP) $@
    676 endif
    677 
    678 # SDL Port
    679 
    680 # Unix versions build only one binary
    681 $(BIN)/SDL/sameboy: $(CORE_OBJECTS) $(SDL_OBJECTS)
    682 	-@$(MKDIR) -p $(dir $@)
    683 	$(CC) $^ -o $@ $(LDFLAGS) $(FAT_FLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS)
    684 ifeq ($(CONF), release)
    685 	$(STRIP) $@
    686 	$(CODESIGN) $@
    687 endif
    688 
    689 $(BIN)/SDL/sameboy.exe: $(CORE_OBJECTS) $(SDL_OBJECTS) $(OBJ)/Windows/resources.o
    690 	-@$(MKDIR) -p $(dir $@)
    691 	$(CC) $^ -o $@ $(LDFLAGS) $(SDL_LDFLAGS) $(GL_LDFLAGS) -Wl,/subsystem:windows
    692 	
    693 $(BIN)/SDL/sameboy_debugger.txt:
    694 	echo Looking for sameboy_debugger.exe? > $@
    695 	echo >> $@
    696 	echo Starting with SameBoy v1.0.1, sameboy.exe and sameboy_debugger.exe >> $@
    697 	echo have been merged into a single executable. You can open a debugger >> $@
    698 	echo console at any time by pressing  Ctrl+C to interrupt the currently >> $@
    699 	echo open ROM.  Once you\'re done debugging,  you can close the debugger >> $@
    700 	echo console and resume normal execution. >> $@
    701 
    702 ifneq ($(USE_WINDRES),)
    703 $(OBJ)/%.o: %.rc
    704 	-@$(MKDIR) -p $(dir $@)
    705 	windres --preprocessor cpp -DVERSION=\"$(VERSION)\" -DCOPYRIGHT_YEAR=\"$(COPYRIGHT_YEAR)\" $^ $@
    706 else
    707 $(OBJ)/%.res: %.rc
    708 	-@$(MKDIR) -p $(dir $@)
    709 	rc /fo $@ /dVERSION=\"$(VERSION)\" /dCOPYRIGHT_YEAR=\"$(COPYRIGHT_YEAR)\" $^ 
    710 
    711 %.o: %.res
    712 	cvtres /MACHINE:X64 /OUT:"$@" $^
    713 endif
    714 
    715 # Copy required DLL files for the Windows port
    716 $(BIN)/SDL/%.dll:
    717 	-@$(MKDIR) -p $(dir $@)
    718 	@$(eval MATCH := $(shell where "$(lib)":$(notdir $@)))
    719 	cp "$(MATCH)" $@
    720 
    721 # Tester
    722 
    723 $(BIN)/tester/sameboy_tester: $(CORE_OBJECTS) $(TESTER_OBJECTS)
    724 	-@$(MKDIR) -p $(dir $@)
    725 	$(CC) $^ -o $@ $(LDFLAGS)
    726 ifeq ($(CONF), release)
    727 	$(STRIP) $@
    728 	$(CODESIGN) $@
    729 endif
    730 
    731 $(BIN)/tester/sameboy_tester.exe: $(CORE_OBJECTS)
    732 	-@$(MKDIR) -p $(dir $@)
    733 	$(CC) $^ -o $@ $(LDFLAGS) -Wl,/subsystem:console
    734 
    735 $(BIN)/tester/%.bin: $(BOOTROMS_DIR)/%.bin
    736 	-@$(MKDIR) -p $(dir $@)
    737 	cp -f $< $@
    738 
    739 $(BIN)/SameBoy.app/Contents/Resources/%.bin: $(BOOTROMS_DIR)/%.bin
    740 	-@$(MKDIR) -p $(dir $@)
    741 	cp -f $< $@
    742 
    743 $(BIN)/SameBoy-iOS.app/%.bin: $(BOOTROMS_DIR)/%.bin
    744 	-@$(MKDIR) -p $(dir $@)
    745 	cp -f $< $@
    746 
    747 $(BIN)/SDL/%.bin: $(BOOTROMS_DIR)/%.bin
    748 	-@$(MKDIR) -p $(dir $@)
    749 	cp -f $< $@
    750 
    751 $(BIN)/SDL/LICENSE: LICENSE
    752 	-@$(MKDIR) -p $(dir $@)
    753 	grep -v "^  " $< > $@
    754 
    755 $(BIN)/SDL/registers.sym: Misc/registers.sym
    756 	-@$(MKDIR) -p $(dir $@)
    757 	cp -f $< $@
    758 
    759 $(BIN)/SDL/background.bmp: SDL/background.bmp
    760 	-@$(MKDIR) -p $(dir $@)
    761 	cp -f $< $@
    762 
    763 $(BIN)/SDL/Shaders: $(wildcard Shaders/*.fsh)
    764 	-@$(MKDIR) -p $@
    765 	cp -f $^ $@
    766 	touch $@
    767 
    768 $(BIN)/SDL/Palettes: Misc/Palettes
    769 	-@$(MKDIR) -p $@
    770 	cp -f $</* $@
    771 	touch $@
    772 
    773 # Boot ROMs
    774 
    775 $(OBJ)/%.2bpp: %.png
    776 	-@$(MKDIR) -p $(dir $@)
    777 	$(RGBGFX) $(RGBGFX_FLAGS) -o $@ $<
    778 
    779 $(OBJ)/BootROMs/SameBoyLogo.pb12: $(OBJ)/BootROMs/SameBoyLogo.2bpp $(PB12_COMPRESS)
    780 	-@$(MKDIR) -p $(dir $@)
    781 	"$(realpath $(PB12_COMPRESS))" < $< > $@
    782 	
    783 $(PB12_COMPRESS): BootROMs/pb12.c
    784 	-@$(MKDIR) -p $(dir $@)
    785 	$(NATIVE_CC) -std=c99 -Wall -Werror $< -o $@
    786 
    787 $(BIN)/BootROMs/cgb0_boot.bin: BootROMs/cgb_boot.asm
    788 $(BIN)/BootROMs/agb_boot.bin: BootROMs/cgb_boot.asm
    789 $(BIN)/BootROMs/cgb_boot_fast.bin: BootROMs/cgb_boot.asm
    790 $(BIN)/BootROMs/sgb2_boot.bin: BootROMs/sgb_boot.asm
    791 
    792 $(BIN)/BootROMs/%.bin: BootROMs/%.asm $(OBJ)/BootROMs/SameBoyLogo.pb12
    793 	-@$(MKDIR) -p $(dir $@)
    794 	$(RGBASM) $(RGBASM_FLAGS) -o $@.tmp $<
    795 	$(RGBLINK) -x -o $@ $@.tmp
    796 	@rm $@.tmp
    797 
    798 # Libretro Core (uses its own build system)
    799 libretro:
    800 	CC=$(CC) CFLAGS="$(WARNINGS)" $(MAKE) -C libretro BOOTROMS_DIR=$(abspath $(BOOTROMS_DIR)) BIN=$(abspath $(BIN))
    801 
    802 # Install for Linux, and other FreeDesktop platforms.
    803 ifneq ($(FREEDESKTOP),)
    804 install: $(BIN)/XdgThumbnailer/sameboy-thumbnailer sdl $(shell find FreeDesktop) XdgThumbnailer/sameboy.thumbnailer
    805 	install -d $(DESTDIR)$(DATA_DIR)/Shaders
    806 	install -d $(DESTDIR)$(DATA_DIR)/Palettes
    807 	install -d $(DESTDIR)$(DATA_DIR)/BootROMs
    808 	install -d $(DESTDIR)$(PREFIX)/bin
    809 	install -d $(DESTDIR)$(PREFIX)/share/thumbnailers
    810 	install -d $(DESTDIR)$(PREFIX)/share/mime/packages
    811 	install -d $(DESTDIR)$(PREFIX)/share/applications
    812 	
    813 	(cd $(BIN)/SDL && find . \! -name sameboy -type f -exec install -m 644 {} "$(abspath $(DESTDIR))$(DATA_DIR)/{}" \; )
    814 	install -m 755 $(BIN)/SDL/sameboy $(DESTDIR)$(PREFIX)/bin/sameboy
    815 	install -m 755 $(BIN)/XdgThumbnailer/sameboy-thumbnailer $(DESTDIR)$(PREFIX)/bin/sameboy-thumbnailer
    816 	install -m 644 XdgThumbnailer/sameboy.thumbnailer $(DESTDIR)$(PREFIX)/share/thumbnailers/sameboy.thumbnailer
    817 ifeq ($(DESTDIR),)
    818 	xdg-mime install --novendor FreeDesktop/sameboy.xml
    819 	xdg-desktop-menu install --novendor FreeDesktop/sameboy.desktop
    820 	for size in 16 32 64 128 256 512; do \
    821 		xdg-icon-resource install --novendor --theme hicolor --size $$size --context apps FreeDesktop/AppIcon/$${size}x$${size}.png sameboy; \
    822 		xdg-icon-resource install --novendor --theme hicolor --size $$size --context mimetypes FreeDesktop/Cartridge/$${size}x$${size}.png x-gameboy-rom; \
    823 		xdg-icon-resource install --novendor --theme hicolor --size $$size --context mimetypes FreeDesktop/ColorCartridge/$${size}x$${size}.png x-gameboy-color-rom; \
    824 	done
    825 else
    826 	install -m 644 FreeDesktop/sameboy.xml $(DESTDIR)$(PREFIX)/share/mime/packages/sameboy.xml
    827 	install -m 644 FreeDesktop/sameboy.desktop $(DESTDIR)$(PREFIX)/share/applications/sameboy.desktop
    828 	for size in 16x16 32x32 64x64 128x128 256x256 512x512; do \
    829 		install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/$$size/apps; \
    830 		install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/$$size/mimetypes; \
    831 		install -m 644 FreeDesktop/AppIcon/$$size.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/$$size/apps/sameboy.png; \
    832 		install -m 644 FreeDesktop/Cartridge/$$size.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/$$size/mimetypes/x-gameboy-rom.png; \
    833 		install -m 644 FreeDesktop/ColorCartridge/$$size.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/$$size/mimetypes/x-gameboy-color-rom.png; \
    834 	done
    835 endif
    836 endif
    837 
    838 ios: bootroms
    839 	@$(MAKE) _ios
    840 
    841 $(BIN)/SameBoy-iOS.ipa: ios iOS/sideload.entitlements
    842 	$(MKDIR) -p $(OBJ)/Payload
    843 	cp -rf $(BIN)/SameBoy-iOS.app $(OBJ)/Payload/SameBoy-iOS.app
    844 	codesign -fs - --entitlements iOS/sideload.entitlements $(OBJ)/Payload/SameBoy-iOS.app
    845 	(cd $(OBJ) && zip -q $(abspath $@) -r Payload)
    846 	rm -rf $(OBJ)/Payload
    847 
    848 
    849 $(BIN)/SameBoy-iOS.deb: $(OBJ)/debian-binary $(OBJ)/control.tar.gz $(OBJ)/data.tar.gz
    850 	-@$(MKDIR) -p $(dir $@)
    851 	(cd $(OBJ) && ar cr $(abspath $@) $(notdir $^))
    852 	
    853 $(OBJ)/data.tar.gz: ios iOS/jailbreak.entitlements iOS/installer.entitlements
    854 	$(MKDIR) -p $(OBJ)/private/var/containers/
    855 	cp -rf $(BIN)/SameBoy-iOS.app $(OBJ)/private/var/containers/SameBoy-iOS.app
    856 	cp build/obj-ios/installer $(OBJ)/private/var/containers/SameBoy-iOS.app
    857 	codesign -fs - --entitlements iOS/installer.entitlements $(OBJ)/private/var/containers/SameBoy-iOS.app/installer
    858 	codesign -fs - --entitlements iOS/jailbreak.entitlements $(OBJ)/private/var/containers/SameBoy-iOS.app
    859 	(cd $(OBJ) && tar -czf $(abspath $@) --format ustar --uid 501 --gid 501 --numeric-owner ./private)
    860 	rm -rf $(OBJ)/private/
    861 	
    862 $(OBJ)/control.tar.gz: iOS/deb-postinst iOS/deb-prerm iOS/deb-control
    863 	-@$(MKDIR) -p $(dir $@)
    864 	sed "s/@VERSION/$(VERSION)/" < iOS/deb-control > $(OBJ)/control
    865 	ln iOS/deb-postinst $(OBJ)/postinst
    866 	ln iOS/deb-prerm $(OBJ)/prerm
    867 	(cd $(OBJ) && tar -czf $(abspath $@) --format ustar --uid 501 --gid 501 --numeric-owner ./control ./postinst ./prerm)
    868 	rm $(OBJ)/control $(OBJ)/postinst $(OBJ)/prerm
    869 	
    870 $(OBJ)/debian-binary:
    871 	-@$(MKDIR) -p $(dir $@)
    872 	echo 2.0 > $@
    873     
    874 $(LIBDIR)/libsameboy.o: $(CORE_OBJECTS)
    875 	-@$(MKDIR) -p $(dir $@)
    876 	@# This is a somewhat simple hack to force Clang and GCC to build a native object file out of one or many LTO objects
    877 	echo "static const char __attribute__((used)) x=0;"| $(CC) $(filter-out -flto,$(CFLAGS)) $(FAT_FLAGS) -c -x c - -o $(OBJ)/lto_hack.o
    878 	@# And this is a somewhat complicated hack to invoke the correct LTO-enabled LD command in a mostly cross-platform nature
    879 	$(CC) $(FAT_FLAGS) $(CFLAGS) $(LIBFLAGS) $^ $(OBJ)/lto_hack.o -o $@
    880 	-@rm $(OBJ)/lto_hack.o
    881     
    882 $(LIBDIR)/libsameboy.a: $(LIBDIR)/libsameboy.o
    883 	-@$(MKDIR) -p $(dir $@)
    884 	-@rm -f $@
    885 	ar -crs $@ $^
    886 	
    887 $(LIBDIR)/libsameboy.$(DL_EXT): $(CORE_OBJECTS)
    888 	-@$(MKDIR) -p $(dir $@)
    889 	$(CC) $(LDFLAGS) -shared $(FAT_FLAGS) $(CFLAGS) $^ -o $@
    890 ifeq ($(CONF), release)
    891 	$(STRIP) $@
    892 	$(CODESIGN) $@
    893 endif
    894 
    895 $(PKGCONF_FILE): sameboy.pc.in
    896 	-@$(MKDIR) -p $(dir $@)
    897 	-@rm -f $@
    898 	sed -e 's,@prefix@,$(PREFIX),' \
    899 		-e 's/@version@/$(VERSION)/' $< > $@
    900 
    901 lib-install: lib $(PKGCONF_FILE)
    902 	install -d $(DESTDIR)$(PREFIX)/lib/pkgconfig
    903 	install -d $(DESTDIR)$(PREFIX)/include/sameboy
    904 	install -m 644 $(LIBDIR)/libsameboy.a $(LIBDIR)/libsameboy.$(DL_EXT) $(DESTDIR)$(PREFIX)/lib/
    905 	install -m 644 $(INC)/* $(DESTDIR)$(PREFIX)/include/sameboy/
    906 	install -m 644 $(PKGCONF_FILE) $(DESTDIR)$(PREFIX)/lib/pkgconfig
    907 	
    908 # Windows dll
    909 
    910 # To avoid Windows' sort.exe
    911 SORT = $(dir $(shell which grep))\sort.exe
    912 
    913 $(OBJ)/names: $(CORE_OBJECTS)
    914 	llvm-nm -gU $(CORE_OBJECTS) -P | grep -Eo "^GB_[^ ]+" | $(SORT) -u > $@
    915 
    916 $(OBJ)/exports: $(PUBLIC_HEADERS)
    917 	grep -Eho "\bGB_[a-zA-Z0-9_]+\b" $^ | $(dir $(shell which grep))\sort.exe -u > $@
    918 
    919 $(OBJ)/exports.def: $(OBJ)/exports $(OBJ)/names
    920 	echo LIBRARY libsameboy > $@
    921 	echo EXPORTS >> $@
    922 	comm -12 $^ >> $@
    923 
    924 $(LIBDIR)/libsameboy.dll: $(CORE_OBJECTS) | $(OBJ)/exports.def
    925 	-@$(MKDIR) -p $(dir $@)
    926 	$(CC) $(LDFLAGS) -Wl,/def:$(OBJ)/exports.def -shared $(CFLAGS) $^ -o $@
    927 	
    928 # CPPP doesn't like multibyte characters, so we replace the single quote character before processing so it doesn't complain
    929 $(INC)/%.h: Core/%.h
    930 	-@$(MKDIR) -p $(dir $@)
    931 	sed "s/'/@SINGLE_QUOTE@/g" $^ | cppp $(CPPP_FLAGS) | sed "s/@SINGLE_QUOTE@/'/g" > $@
    932 	
    933 # Generate msvcrt.lib so we can use the always-present msvcrt.dll
    934 $(OBJ)/Windows/msvcrt.lib: Windows/msvcrt.def
    935 	lib.exe /MACHINE:X64 /def:$< /out:$@
    936 	
    937 # Clean
    938 clean:
    939 	rm -rf build
    940 
    941 .PHONY: libretro tester cocoa ios _ios ios-ipa ios-deb liblib-unsupported bootroms

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.