]> Shamusworld >> Repos - virtualjaguar/blob - Makefile
Changes to Makefile, missing includes in sdl_config.
[virtualjaguar] / Makefile
1 #
2 # Unified Makefile for Virtual Jaguar GCC/SDL Portable Jaguar Emulator
3 #
4 # by James L. Hammons
5 #
6 # This software is licensed under the GPL v2 or any later version. Set the
7 # file GPL.TXT for details. ;-)
8 #
9
10 # Figure out which system we're compiling for, and set the appropriate variables
11
12 OSTYPE := $(shell uname -a)
13
14 ifeq "$(findstring Msys,$(OSTYPE))" "Msys"                      # Win32
15
16 SYSTYPE    := __GCCWIN32__
17 EXESUFFIX  := .exe
18 GLLIB      := -lopengl32
19 ICON       := obj/icon.o
20 SDLLIBTYPE := --libs
21 MSG        := Win32 on MinGW
22
23 else ifeq "$(findstring Darwin,$(OSTYPE))" "Darwin"     # Should catch both 'darwin' and 'darwin7.0'
24
25 SYSTYPE    := __GCCUNIX__ -D_OSX_
26 EXESUFFIX  :=
27 GLLIB      :=
28 ICON       :=
29 SDLLIBTYPE := --static-libs
30 MSG        := Mac OS X
31
32 else ifeq "$(findstring Linux,$(OSTYPE))" "Linux"               # Linux
33
34 SYSTYPE    := __GCCUNIX__
35 EXESUFFIX  :=
36 GLLIB      := -lGL -lGLU
37 ICON       :=
38 SDLLIBTYPE := --libs
39 MSG        := GNU/Linux
40
41 else                                                                                    # ???
42
43 $(error OS TYPE UNDETECTED)
44
45 endif
46
47 # Set vars for libcdio
48 ifneq "$(shell pkg-config --silence-errors --libs libcdio)" ""
49 HAVECDIO := -DHAVE_LIB_CDIO
50 CDIOLIB  := -lcdio
51 else
52 HAVECDIO :=
53 CDIOLIB  :=
54 endif
55
56 CC         = gcc
57 LD         = gcc
58 TARGET     = vj
59
60 # Note that we use optimization level 2 instead of 3--3 doesn't seem to gain much over 2
61 CFLAGS   = -MMD -Wall -Wno-switch -O2 -D$(SYSTYPE) -ffast-math -fomit-frame-pointer `sdl-config --cflags`
62 CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -O2 -D$(SYSTYPE) \
63                 $(HAVECDIO) -ffast-math -fomit-frame-pointer `sdl-config --cflags` -g
64 #               -fomit-frame-pointer `sdl-config --cflags` -g
65 #               -fomit-frame-pointer `sdl-config --cflags` -DLOG_UNMAPPED_MEMORY_ACCESSES
66
67 LDFLAGS =
68
69 LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) $(CDIOLIB)
70
71 INCS = -I. -I./src -I./src/gui -I/usr/local/include -I/usr/include
72
73 OBJS = \
74         obj/m68kcpu.o       \
75         obj/m68kops.o       \
76         obj/m68kopac.o      \
77         obj/m68kopdm.o      \
78         obj/m68kopnz.o      \
79         obj/m68kdasm.o      \
80 \
81         obj/button.o        \
82         obj/element.o       \
83         obj/filelist.o      \
84         obj/gui.o           \
85         obj/guimisc.o       \
86         obj/image.o         \
87         obj/listbox.o       \
88         obj/menu.o          \
89         obj/pushbutton.o    \
90         obj/slideswitch.o   \
91         obj/text.o          \
92         obj/textedit.o      \
93         obj/window.o        \
94 \
95         obj/blitter.o       \
96         obj/cdrom.o         \
97         obj/cdintf.o        \
98         obj/crc32.o         \
99         obj/dac.o           \
100         obj/dsp.o           \
101         obj/eeprom.o        \
102         obj/event.o         \
103         obj/file.o          \
104         obj/gpu.o           \
105         obj/jagdasm.o       \
106         obj/jaguar.o        \
107         obj/jerry.o         \
108         obj/joystick.o      \
109         obj/log.o           \
110         obj/memory.o        \
111         obj/mmu.o           \
112         obj/objectp.o       \
113         obj/sdlemu_config.o \
114         obj/sdlemu_opengl.o \
115         obj/settings.o      \
116         obj/state.o         \
117         obj/tom.o           \
118         obj/unzip.o         \
119         obj/video.o         \
120         obj/vj.o            \
121         $(ICON)
122
123 # Targets for convenience sake, not "real" targets
124 .PHONY: clean
125
126 all: checkenv message obj $(TARGET)$(EXESUFFIX)
127         @echo
128         @echo -e "\033[01;33m***\033[00;32m Looks like it compiled OK... Give it a whirl!\033[00m"
129         @echo
130
131 # Check the compilation environment, barf if not appropriate
132
133 checkenv: msg-check-env check-sdl check-zlib check-cdio check-gl ;
134
135 #check-sdl: msg-ck-sdl $(if $(strip ),,msg-no-sdl stop-on-error)
136 check-sdl: msg-ck-sdl $(if $(shell which sdl-config),,msg-no-sdl stop-on-error)
137         @echo -e "\033[01;37mOK\033[00m"
138
139 msg-ck-sdl:
140         @echo -en "   \033[00;32mSDL... \033[00m"
141
142 msg-no-sdl:
143         @echo -e "\033[01;37mNOT FOUND\033[00m"
144         @echo
145         @echo -e "\033[01;33mIt seems that you don't have the SDL development libraries installed. If you"
146         @echo -e "have installed them, make sure that the sdl-config file is somewhere in your"
147         @echo -e "path and is executable.\033[00m"
148         @echo
149
150 check-zlib: msg-ck-zlib $(if $(shell pkg-config --silence-errors --libs zlib),,msg-no-zlib stop-on-error)
151         @echo -e "\033[01;37mOK\033[00m"
152
153 msg-ck-zlib:
154         @echo -en "   \033[00;32mZLIB... \033[00m"
155
156 msg-no-zlib:
157         @echo -e "\033[01;37mNOT FOUND\033[00m"
158         @echo
159         @echo -e "\033[01;33mIt seems that you don't have ZLIB installed. If you have installed it, make"
160         @echo -e "sure that the pkg-config file is somewhere in your path and is executable.\033[00m"
161         @echo
162
163 #NOTE that this check shouldn't be fatal, we can bounce back from it by excluding CD support
164 check-cdio: msg-ck-cdio $(if $(CDIOLIB),msg-cdio,msg-no-cdio) ;
165
166 msg-ck-cdio:
167         @echo -en "   \033[00;32mLIBCDIO... \033[00m"
168
169 msg-cdio:
170         @echo -e "\033[01;37mOK\033[00m"
171
172 msg-no-cdio:
173         @echo -e "\033[01;37mNOT FOUND\033[00m"
174         @echo
175         @echo -e "\033[01;33mIt seems that you don't have LIBCDIO installed. Since this is not fatal,"
176         @echo -e "Virtual Jaguar will be built WITHOUT CD support.\033[00m"
177         @echo
178
179 check-gl: msg-ck-gl
180         @echo -e "*** GL CHECK NOT IMPLEMENTED ***"
181
182 msg-ck-gl:
183         @echo -en "   \033[00;32mOpenGL... \033[00m"
184
185 stop-on-error: ; $(error COMPILATION ENVIRONMENT)
186
187 msg-check-env:
188         @echo
189         @echo -e "\033[01;33m***\033[00;32m Checking compilation environment: \033[00m"
190         @echo
191
192 message:
193         @echo
194         @echo -e "\033[01;33m***\033[00;32m Building Virtual Jaguar for $(MSG)...\033[00m"
195         @echo
196
197 clean:
198         @echo -en "\033[01;33m***\033[00;32m Cleaning out the garbage...\033[00m"
199         @rm -rf obj
200         @rm -f ./$(TARGET)$(EXESUFFIX)
201         @echo -e "\033[01;37mdone!\033[00m"
202
203 obj:
204         @mkdir obj
205
206 # This is only done for Win32 at the moment...
207
208 ifneq "" "$(ICON)"
209 $(ICON): res/$(TARGET).rc res/$(TARGET).ico
210         @echo -e "\033[01;33m***\033[00;32m Processing icon...\033[00m"
211         @windres -i res/$(TARGET).rc -o $(ICON) --include-dir=./res
212 endif
213
214 obj/%.o: src/%.c
215         @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m"
216         @$(CC) $(CFLAGS) $(INCS) -c $< -o $@
217
218 obj/%.o: src/%.cpp
219         @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m"
220         @$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@
221
222 obj/%.o: src/gui/%.cpp
223         @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m"
224         @$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@
225
226 $(TARGET)$(EXESUFFIX): $(OBJS)
227         @echo -e "\033[01;33m***\033[00;32m Linking it all together...\033[00m"
228         @$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
229 #       strip --strip-all vj$(EXESUFFIX)
230 #       upx -9 vj$(EXESUFFIX)
231
232 # Pull in dependencies autogenerated by gcc's -MMD switch
233 # The "-" in front is there just in case they haven't been created yet
234
235 -include obj/*.d
236
237 #
238 # Musashi specific stuffola
239 #
240
241 #obj/m68k%.o: obj/m68k%.c obj/m68kops.h
242 #       $(CC) $(CFLAGS) -Iobj -c src/m68k%.c -o obj/m68k%.o
243
244 #obj/m68k%.o: obj/m68k%.c obj/m68kmake$(EXESUFFIX)
245 #       $(CC) $(CFLAGS) -Iobj -c src/m68k%.c -o obj/m68k%.o
246
247 #see if you can collapse all this crap into one or two lines...
248 #NOTE: The above doesn't work for some reason...
249
250 obj/m68kcpu.o: obj/m68kops.h src/m68k.h src/m68kconf.h
251         @echo -e "\033[01;33m***\033[00;32m Compiling m68kcpu.c...\033[00m"
252         @$(CC) $(CFLAGS) -Iobj -c src/m68kcpu.c -o obj/m68kcpu.o
253
254 obj/m68kops.o: obj/m68kmake$(EXESUFFIX) obj/m68kops.h obj/m68kops.c src/m68k.h src/m68kconf.h
255         @echo -e "\033[01;33m***\033[00;32m Compiling m68kops.c...\033[00m"
256         @$(CC) $(CFLAGS) -Isrc -c obj/m68kops.c -o obj/m68kops.o
257
258 obj/m68kopac.o: obj/m68kmake$(EXESUFFIX) obj/m68kops.h obj/m68kopac.c src/m68k.h src/m68kconf.h
259         @echo -e "\033[01;33m***\033[00;32m Compiling m68kopac.c...\033[00m"
260         @$(CC) $(CFLAGS) -Isrc -c obj/m68kopac.c -o obj/m68kopac.o
261
262 obj/m68kopdm.o: obj/m68kmake$(EXESUFFIX) obj/m68kops.h obj/m68kopdm.c src/m68k.h src/m68kconf.h
263         @echo -e "\033[01;33m***\033[00;32m Compiling m68kopdm.c...\033[00m"
264         @$(CC) $(CFLAGS) -Isrc -c obj/m68kopdm.c -o obj/m68kopdm.o
265
266 obj/m68kopnz.o: obj/m68kmake$(EXESUFFIX) obj/m68kops.h obj/m68kopnz.c src/m68k.h src/m68kconf.h
267         @echo -e "\033[01;33m***\033[00;32m Compiling m68kopnz.c...\033[00m"
268         @$(CC) $(CFLAGS) -Isrc -c obj/m68kopnz.c -o obj/m68kopnz.o
269
270 obj/m68kdasm.o: src/m68kdasm.c src/m68k.h src/m68kconf.h
271         @echo -e "\033[01;33m***\033[00;32m Compiling m68kdasm.c...\033[00m"
272         @$(CC) $(CFLAGS) -Isrc -c src/m68kdasm.c -o obj/m68kdasm.o
273
274 obj/m68kops.h: obj/m68kmake$(EXESUFFIX)
275         @obj/m68kmake obj src/m68k_in.c
276
277 obj/m68kmake$(EXESUFFIX): src/m68kmake.c src/m68k_in.c
278         @echo -e "\033[01;33m***\033[00;32m Preparing to make the Musashi core...\033[00m"
279         @$(CC) $(WARNINGS) src/m68kmake.c -o obj/m68kmake$(EXESUFFIX)