Refactor remaining tokensplitters
[lsnes.git] / Makefile
blob86fd2b3fd9a5727f31a0f5df4d165436e1bb48eb
1 CROSS_PREFIX=
2 EXECUTABLE_SUFFIX = exe
3 OBJECT_SUFFIX = o
4 ARCHIVE_SUFFIX = a
5 FONT_SRC := unifontfull-5.1.20080820.hex
7 #Compilers.
8 CC := g++
9 REALCC = $(CROSS_PREFIX)$(CC)
10 HOSTCC = $(CC)
12 #Flags.
13 HOSTCCFLAGS = -std=gnu++0x
14 CFLAGS = -I$(BSNES_PATH) -Iinclude -Iavi -std=gnu++0x
15 LDFLAGS = -lboost_iostreams -lboost_filesystem -lboost_system -lboost_regex -lz
16 PLATFORM_CFLAGS =
17 PLATFORM_LDFLAGS =
19 #Platform defs.
20 GRAPHICS = SDL
21 SOUND = SDL
22 JOYSTICK = SDL
24 #Core objects and what to build.
25 CORE_OBJECTS = $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/core/*.cpp)) \
26 $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/library/*.cpp)) \
27 $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard avi/*.cpp)) \
28 src/fonts/font.$(OBJECT_SUFFIX) src/core/version.$(OBJECT_SUFFIX)
29 PROGRAMS = lsnes.$(EXECUTABLE_SUFFIX) movieinfo.$(EXECUTABLE_SUFFIX) lsnes-dumpavi.$(EXECUTABLE_SUFFIX) sdmp2sox.$(EXECUTABLE_SUFFIX)
30 all: $(PROGRAMS)
32 #Platform objects.
33 PLATFORM_OBJECTS=
35 #Lua.
36 ifndef LUA
37 CFLAGS += -DNO_LUA
38 else
39 CORE_OBJECTS += $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/lua/*.cpp))
40 CFLAGS += $(shell $(CROSS_PREFIX)pkg-config $(LUA) --cflags)
41 LDFLAGS += $(shell $(CROSS_PREFIX)pkg-config $(LUA) --libs)
42 endif
44 #Threads
45 ifdef THREADS
46 ifeq ($(THREADS), YES)
47 CFLAGS += -DSTD_THREADS
48 else
49 ifeq ($(THREADS), BOOST)
50 CFLAGS += -DBOOST_THREADS
51 ifdef BOOST_THREAD_LIB
52 LDFLAGS += -l$(BOOST_THREAD_LIB)
53 else
54 LDFLAGS += -lboost_thread-mt
55 endif
56 else
57 ifeq ($(THREADS), NO)
58 CFLAGS += -DNO_THREADS
59 else
60 $(error "Bad value for THREADS (expected YES, BOOST, BOOSTNOMT or NO)")
61 endif
62 endif
63 endif
64 endif
67 #Some misc defines.
68 ifdef BSNES_IS_COMPAT
69 CFLAGS += -DBSNES_IS_COMPAT
70 endif
72 #Joystick.
73 ifeq ($(JOYSTICK), SDL)
74 ifneq ($(GRAPHICS), SDL)
75 $(error "SDL Joystick requires SDL graphics")
76 endif
77 PLATFORM_OBJECTS += src/plat-sdl/joystick.$(OBJECT_SUFFIX)
78 else
79 ifeq ($(JOYSTICK), DUMMY)
80 CFLAGS += -DSDL_NO_JOYSTICK
81 PLATFORM_OBJECTS += src/plat-dummy/joystick.$(OBJECT_SUFFIX)
82 else
83 ifeq ($(JOYSTICK), EVDEV)
84 CFLAGS += -DSDL_NO_JOYSTICK
85 PLATFORM_OBJECTS += $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/plat-evdev/*.cpp))
86 else
87 $(error "Unsupported joystick type")
88 endif
89 endif
90 endif
92 #Sound stuff.
93 ifeq ($(SOUND), SDL)
94 ifneq ($(GRAPHICS), SDL)
95 $(error "SDL Sound requires SDL graphics")
96 endif
97 PLATFORM_OBJECTS += src/plat-sdl/sound.$(OBJECT_SUFFIX)
98 else
99 ifeq ($(SOUND), PORTAUDIO)
100 PLATFORM_OBJECTS += src/plat-portaudio/sound.$(OBJECT_SUFFIX)
101 PLATFORM_CFLAGS += $(shell $(CROSS_PREFIX)pkg-config portaudio-2.0 --cflags)
102 PLATFORM_LDFLAGS += $(shell $(CROSS_PREFIX)pkg-config portaudio-2.0 --libs)
103 else
104 ifeq ($(SOUND), DUMMY)
105 PLATFORM_OBJECTS += src/plat-dummy/sound.$(OBJECT_SUFFIX)
106 else
107 $(error "Unsupported sound type")
108 endif
109 endif
110 endif
112 #Graphics stuff.
113 ifeq ($(GRAPHICS), SDL)
114 PLATFORM_OBJECTS += src/plat-sdl/commandline.$(OBJECT_SUFFIX) src/plat-sdl/drawprim.$(OBJECT_SUFFIX) src/plat-sdl/graphicsfn.$(OBJECT_SUFFIX) src/plat-sdl/keyboard.$(OBJECT_SUFFIX) src/plat-sdl/main.$(OBJECT_SUFFIX) src/plat-sdl/thread.$(OBJECT_SUFFIX) src/plat-sdl/status.$(OBJECT_SUFFIX) src/plat-sdl/thread.$(OBJECT_SUFFIX)
115 PLATFORM_CFLAGS += $(shell $(CROSS_PREFIX)sdl-config --cflags)
116 PLATFORM_LDFLAGS += $(shell $(CROSS_PREFIX)sdl-config --libs)
117 else
118 ifeq ($(GRAPHICS), WXWIDGETS)
119 PLATFORM_OBJECTS += $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/plat-wxwidgets/*.cpp))
120 PLATFORM_CFLAGS += $(shell $(CROSS_PREFIX)wx-config --cxxflags) $(shell $(CROSS_PREFIX)pkg-config libswscale --cflags)
121 PLATFORM_LDFLAGS += $(shell $(CROSS_PREFIX)wx-config --libs) $(shell $(CROSS_PREFIX)pkg-config libswscale --libs)
122 else
123 $(error "Unsupported graphics type")
124 endif
125 endif
127 CORE_CFLAGS=$(CFLAGS) $(USER_CFLAGS)
128 SUPPORT_CFLAGS=$(CORE_CFLAGS) $(PLATFORM_CFLAGS) $(USER_PLATFORM_CFLAGS)
129 CORE_LDFLAGS=$(BSNES_PATH)/out/libsnes.$(ARCHIVE_SUFFIX) $(LDFLAGS) $(USER_LDFLAGS)
130 SUPPORT_LDFLAGS=$(CORE_LDFLAGS) $(PLATFORM_LDFLAGS) $(USER_PLATFORM_LDFLAGS)
131 PLAT_DUMMY_OBJECTS=$(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/plat-dummy/*.cpp))
132 HOST_CFLAGS=$(HOSTCCFLAGS) $(USER_HOSTCCFLAGS)
133 HOST_LDFLAGS=$(HOSTLDFLAGS) $(USER_HOSTLDFLAGS)
135 .PRECIOUS: %
137 #Stuff compiled with core CFLAGS.
138 avi/%.$(OBJECT_SUFFIX): avi/%.cpp
139 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
140 src/core/%.$(OBJECT_SUFFIX): src/core/%.cpp
141 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
142 src/lua/%.$(OBJECT_SUFFIX): src/lua/%.cpp
143 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
144 src/library/%.$(OBJECT_SUFFIX): src/library/%.cpp
145 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
146 src/plat-dummy/%.$(OBJECT_SUFFIX): src/plat-dummy/%.cpp
147 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
148 src/util/%.$(OBJECT_SUFFIX): src/util/%.cpp
149 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
151 #Platform stuff to be compiled with support CFLAGS.
152 src/plat-evdev/%.$(OBJECT_SUFFIX): src/plat-evdev/%.cpp
153 $(REALCC) -c -o $@ $< $(SUPPORT_CFLAGS)
154 src/plat-portaudio/%.$(OBJECT_SUFFIX): src/plat-portaudio/%.cpp
155 $(REALCC) -c -o $@ $< $(SUPPORT_CFLAGS)
156 src/plat-sdl/%.$(OBJECT_SUFFIX): src/plat-sdl/%.cpp
157 $(REALCC) -c -o $@ $< $(SUPPORT_CFLAGS)
158 src/plat-wxwidgets/%.$(OBJECT_SUFFIX): src/plat-wxwidgets/%.cpp
159 $(REALCC) -c -o $@ $< $(SUPPORT_CFLAGS)
161 #lsnes main executable.
162 lsnes.$(EXECUTABLE_SUFFIX): $(CORE_OBJECTS) $(PLATFORM_OBJECTS)
163 $(REALCC) -o $@ $^ $(SUPPORT_LDFLAGS)
165 #Other executables.
166 %.$(EXECUTABLE_SUFFIX): src/util/%.$(OBJECT_SUFFIX) $(CORE_OBJECTS) $(PLAT_DUMMY_OBJECTS)
167 $(REALCC) -o $@ $^ $(CORE_LDFLAGS)
169 #Fonts.
170 src/fonts/font.$(OBJECT_SUFFIX): src/fonts/$(FONT_SRC)
171 echo "extern const char* font_hex_data = " >src/fonts/font.cpp
172 sed -E -f src/fonts/fonttransform.sed <$^ >>src/fonts/font.cpp
173 echo ";" >>src/fonts/font.cpp
174 $(REALCC) $(CORE_CFLAGS) -c -o $@ src/fonts/font.cpp
176 #Version info.
177 buildaux/version.exe: buildaux/version.cpp VERSION
178 $(HOSTCC) $(HOSTCCFLAGS) -o $@ $<
179 src/core/version.cpp: buildaux/version.exe FORCE
180 buildaux/version.exe >$@
182 .PHONY: FORCE
184 clean:
185 rm -f $(PROGRAMS) src/*.$(OBJECT_SUFFIX) src/*/*.$(OBJECT_SUFFIX) avi/*.$(OBJECT_SUFFIX) src/fonts/font.o src/fonts/font.cpp