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