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.