1############################################################################## 2## Source-level Makefile for jzintv 3## 4## This Makefile expects to build jzIntv with a locally installed version 5## of the SDL-1.2 development branch. This is required to fix breakage in 6## recent versions of MacOS X. 7## 8## The Makefile expects to find SDL-1.2 in ../sdl12/. If you install it 9## elsewhere, modify the SDL variable below as necessary. 10############################################################################## 11 12############################################################################## 13## Project directory structure 14############################################################################## 15B=../bin 16L=../lib 17R=../rom 18SDL=../sdl12 19 20############################################################################## 21## Project-wide build flags 22############################################################################## 23P = export PATH; 24 25SVN_REV := $(shell (svn info -R || :) | grep "Last Changed Rev:" | cut -d' ' -f4 | sort -n | tail -1) 26SVN_DTY := $(shell echo $$( (svn status || :) | grep -v '^?' | wc -l ) ) 27 28SDL1_CFLAGS := $(shell $(SDL)/bin/sdl-config --cflags) 29SDL1_LFLAGS := $(shell $(SDL)/bin/sdl-config --static-libs) 30 31# Set "X" to be the executable extension, and "O" to be the object extension. 32X = 33O = o 34 35# Set "RM" to be the remove/delete command 36RM = rm -f 37 38# WARN_M used for building the .m file 39 WARN_M = -Wall -W -Wextra -Wshadow -Wpointer-arith 40 WARN_M += -Wbad-function-cast -Wcast-qual -Wc++-compat 41 WARN_M += -Wmissing-declarations -Wmissing-prototypes 42 WARN_M += -Wstrict-prototypes 43 WARN_M += -Werror 44 45 WARN = -Wall -W -Wextra -Wshadow -Wpointer-arith 46 WARN += -Wbad-function-cast -Wcast-qual -Wc++-compat 47 WARN += -Wmissing-declarations -Wmissing-prototypes 48 WARN += -Wstrict-prototypes -Wmaybe-uninitialized 49 WARN += -Werror -Wstrict-aliasing -Wlogical-op 50 51 WARNXX = -Wall -W -Wextra -Wshadow -Wpointer-arith 52 WARNXX += -Wcast-qual -Wsequence-point 53 WARNXX += -Wc++11-compat -Wc++14-compat -Wc++1z-compat 54 WARNXX += -Werror -Wstrict-aliasing -Wlogical-op 55 WARNXX += -Wold-style-cast 56 57#LTO = -flto=4 58 CC = $(P) /usr/local/gcc-9.2/bin/gcc-9.2.0 $(LTO) 59 CXX = $(P) /usr/local/gcc-9.2/bin/g++-9.2.0 $(LTO) -std=c++14 -fvisibility=hidden 60#CC = $(P) gcc 61#CXX = $(P) g++ -std=c++14 -fvisibility=hidden 62 63LIBCXX = -static-libstdc++ -static-libgcc 64 65DEF_FLAGS = -DPLAT_MACOS 66 67#OPT_FLAGS = -ggdb 68#OPT_FLAGS = -O 69#OPT_FLAGS = -O2 -ggdb 70 OPT_FLAGS = -O3 -fomit-frame-pointer -msse3 -fstrict-aliasing 71#OPT_FLAGS = -O3 -msse3 -pg 72#OPT_FLAGS = -pg -ggdb -DLOCAL= 73 74ARCH = -arch x86_64 75CFLAGS = $(ARCH) -mmacosx-version-min=10.6 #-L../lib 76CFLAGS += $(OPT_FLAGS) -I. -I.. $(DEF_FLAGS) $(EXTRA) 77CXXFLAGS = $(ARCH) -mmacosx-version-min=10.6 #-L../lib 78CXXFLAGS += $(OPT_FLAGS) -I. -I.. $(DEF_FLAGS) $(EXTRA) 79LFLAGS = -L$(SDL)/lib 80 81SDLMAIN_CC = $(P) gcc $(ARCH) 82 83#Note: SDL_Main.$(O) is *not* included, as it needs to be handled specially. 84# -- Tues Aug. 31 JJT 85OBJS = jzintv.$(O) 86PROG_SDL1 = $(B)/jzintv$(X) 87PROG_NULL = $(B)/jzintv_batch$(X) 88TOCLEAN += $(PROG_SDL1) $(PROG_NULL) core 89TOCLEAN += libjzintv_common.a libjzintv_sdl.a libjzintv_null.a 90TOCLEAN += SDLMain.$(O) jzintv_fromcommon$(X) 91OBJS_SDL += pads/pads_cgc_linux.$(O) 92 93CFLAGS += $(SDL1_CFLAGS) 94CXXFLAGS += $(SDL1_CFLAGS) 95#Reserving SDL to the FINAL link --Sat Aug. 7 JJT 96#LFLAGS += $(SDL1_LFLAGS) 97 98# Add C++ static libraries to all link targets 99LFLAGS += $(LIBCXX) 100 101# XXX: Make this work on Mojave through a terrible hack. 102LFLAGS += -Wl,-platform_version,macos,10.6,10.13 103 104# Override static linkage, which is not supported on Mac. 105SLFLAGS = $(LFLAGS) 106 107# Sanitizer 108#SANI = -fsanitize=address 109#SANI += -fsanitize-address-use-after-scope 110#SANI += -fsanitize=leak 111#SANI += -fsanitize=undefined 112 113CFLAGS_NOSANI := $(CFLAGS) $(WARN_M) 114CFLAGS += $(SANI) $(WARN) 115CXXFLAGS += $(SANI) $(WARNXX) 116 117############################################################################## 118## Generic build-rules 119############################################################################## 120 121all: build 122 123# libjzintv_common.a libjzintv_sdl.a libjzintv_null.a 124 125############################################################################## 126## Makefile.common includes all the subMakefiles and such 127############################################################################## 128 include Makefile.common 129 130 131$(PROG_SDL1): $(OBJS) $(OBJS_SDL1) SDLMain.$(O) 132 $(CXX) -o $(PROG_SDL1) $(OBJS) $(OBJS_SDL1) SDLMain.$(O) $(CFLAGS) $(LFLAGS) $(SDL1_LFLAGS) 133 134$(PROG_NULL): $(OBJS) $(OBJS_NULL) 135 $(CXX) -o $(PROG_NULL) $(OBJS) $(OBJS_NULL) $(CFLAGS) $(LFLAGS) 136 137#Library for use with the OS X GUI project. 138libjzintv_common.a : $(OBJS) 139 libtool -o libjzintv_common.a $(OBJS) 140 141libjzintv_sdl.a : $(OBJS_SDL1) 142 libtool -o libjzintv_sdl.a $(OBJS_SDL1) 143 144libjzintv_null.a : $(OBJS_NULL) 145 libtool -o libjzintv_null.a $(OBJS_NULL) 146 147#Test program for libjzintv_common.a . If everything is OK, this program should 148#behave exactly like jzintv. 149jzintv_fromcommon : libjzintv_common.a libjzintv_sdl.a SDLMain.$(O) 150 $(CC) -o jzintv_fromcommon $(CFLAGS) SDLMain.$(O) $(LFLAGS) $(SDL1_LFLAGS) -L. -ljzintv_common -ljzintv_sdl 151 152clean: 153 $(RM) $(OBJS) 154 $(RM) $(OBJS_SDL1) 155 $(RM) $(OBJS_NULL) 156 $(RM) $(TOCLEAN) 157 158SDLMain.$(O): SDLMain.m SDLMain.h 159 $(SDLMAIN_CC) -o $@ $(CFLAGS_NOSANI) -fno-objc-arc $(SDL_PORT_SYN_FLAGS) -Wno-error -c $< 160 161%.$(O): %.c 162 $(CC) -o $@ $(CFLAGS) -c $< 163 164%.$(O): %.cpp 165 $(CXX) -o $@ $(CXXFLAGS) -c $< 166 167build: jzIntv SDK-1600 168 169