Update manuals for changes
[lsnes.git] / Makefile
blobdf2234a5fb579c6480faa7e4ede3efbecbc03a4a
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-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt -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 #malloc threadsafety
36 ifdef MAKE_MALLOC_THREADSAFE
37 CFLAGS += -DMAKE_MALLOC_THREADSAFE
38 LDFLAGS += -Wl,--wrap,malloc,--wrap,calloc,--wrap,realloc,--wrap,free
39 endif
41 #Lua.
42 ifndef LUA
43 CFLAGS += -DNO_LUA
44 else
45 CORE_OBJECTS += $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/lua/*.cpp))
46 CFLAGS += $(shell $(CROSS_PREFIX)pkg-config $(LUA) --cflags)
47 LDFLAGS += $(shell $(CROSS_PREFIX)pkg-config $(LUA) --libs)
48 endif
50 #Threads
51 ifdef THREADS
52 ifeq ($(THREADS), YES)
53 CFLAGS += -DSTD_THREADS
54 else
55 ifeq ($(THREADS), BOOST)
56 CFLAGS += -DBOOST_THREADS
57 ifdef BOOST_THREAD_LIB
58 LDFLAGS += -l$(BOOST_THREAD_LIB)
59 else
60 LDFLAGS += -lboost_thread-mt
61 endif
62 else
63 ifeq ($(THREADS), NO)
64 CFLAGS += -DNO_THREADS
65 else
66 $(error "Bad value for THREADS (expected YES, BOOST, BOOSTNOMT or NO)")
67 endif
68 endif
69 endif
70 endif
73 #Some misc defines.
74 ifdef BSNES_IS_COMPAT
75 CFLAGS += -DBSNES_IS_COMPAT
76 endif
78 #Joystick.
79 ifeq ($(JOYSTICK), SDL)
80 ifneq ($(GRAPHICS), SDL)
81 $(error "SDL Joystick requires SDL graphics")
82 endif
83 PLATFORM_OBJECTS += src/plat-sdl/joystick.$(OBJECT_SUFFIX)
84 else
85 ifeq ($(JOYSTICK), DUMMY)
86 CFLAGS += -DSDL_NO_JOYSTICK
87 PLATFORM_OBJECTS += src/plat-dummy/joystick.$(OBJECT_SUFFIX)
88 else
89 ifeq ($(JOYSTICK), EVDEV)
90 CFLAGS += -DSDL_NO_JOYSTICK
91 PLATFORM_OBJECTS += $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/plat-evdev/*.cpp))
92 else
93 $(error "Unsupported joystick type")
94 endif
95 endif
96 endif
98 #Sound stuff.
99 ifeq ($(SOUND), SDL)
100 ifneq ($(GRAPHICS), SDL)
101 $(error "SDL Sound requires SDL graphics")
102 endif
103 PLATFORM_OBJECTS += src/plat-sdl/sound.$(OBJECT_SUFFIX)
104 else
105 ifeq ($(SOUND), PORTAUDIO)
106 PLATFORM_OBJECTS += src/plat-portaudio/sound.$(OBJECT_SUFFIX)
107 PLATFORM_CFLAGS += $(shell $(CROSS_PREFIX)pkg-config portaudio-2.0 --cflags)
108 PLATFORM_LDFLAGS += $(shell $(CROSS_PREFIX)pkg-config portaudio-2.0 --libs)
109 else
110 ifeq ($(SOUND), DUMMY)
111 PLATFORM_OBJECTS += src/plat-dummy/sound.$(OBJECT_SUFFIX)
112 else
113 $(error "Unsupported sound type")
114 endif
115 endif
116 endif
118 #Graphics stuff.
119 ifeq ($(GRAPHICS), SDL)
120 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)
121 PLATFORM_CFLAGS += $(shell $(CROSS_PREFIX)sdl-config --cflags)
122 PLATFORM_LDFLAGS += $(shell $(CROSS_PREFIX)sdl-config --libs)
123 else
124 ifeq ($(GRAPHICS), WXWIDGETS)
125 PLATFORM_OBJECTS += $(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/plat-wxwidgets/*.cpp))
126 PLATFORM_CFLAGS += $(shell $(CROSS_PREFIX)wx-config --cxxflags) $(shell $(CROSS_PREFIX)pkg-config libswscale --cflags)
127 PLATFORM_LDFLAGS += $(shell $(CROSS_PREFIX)wx-config --libs) $(shell $(CROSS_PREFIX)pkg-config libswscale --libs)
128 else
129 $(error "Unsupported graphics type")
130 endif
131 endif
133 CORE_CFLAGS=$(CFLAGS) $(USER_CFLAGS)
134 SUPPORT_CFLAGS=$(CORE_CFLAGS) $(PLATFORM_CFLAGS) $(USER_PLATFORM_CFLAGS)
135 CORE_LDFLAGS=$(BSNES_PATH)/out/libsnes.$(ARCHIVE_SUFFIX) $(LDFLAGS) $(USER_LDFLAGS)
136 SUPPORT_LDFLAGS=$(CORE_LDFLAGS) $(PLATFORM_LDFLAGS) $(USER_PLATFORM_LDFLAGS)
137 PLAT_DUMMY_OBJECTS=$(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard src/plat-dummy/*.cpp))
138 HOST_CFLAGS=$(HOSTCCFLAGS) $(USER_HOSTCCFLAGS)
139 HOST_LDFLAGS=$(HOSTLDFLAGS) $(USER_HOSTLDFLAGS)
141 .PRECIOUS: %
143 #Stuff compiled with core CFLAGS.
144 avi/%.$(OBJECT_SUFFIX): avi/%.cpp
145 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
146 src/core/%.$(OBJECT_SUFFIX): src/core/%.cpp
147 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
148 src/lua/%.$(OBJECT_SUFFIX): src/lua/%.cpp
149 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
150 src/library/%.$(OBJECT_SUFFIX): src/library/%.cpp
151 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
152 src/plat-dummy/%.$(OBJECT_SUFFIX): src/plat-dummy/%.cpp
153 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
154 src/util/%.$(OBJECT_SUFFIX): src/util/%.cpp
155 $(REALCC) -c -o $@ $< $(CORE_CFLAGS)
157 #Platform stuff to be compiled with support CFLAGS.
158 src/plat-evdev/%.$(OBJECT_SUFFIX): src/plat-evdev/%.cpp
159 $(REALCC) -c -o $@ $< $(SUPPORT_CFLAGS)
160 src/plat-portaudio/%.$(OBJECT_SUFFIX): src/plat-portaudio/%.cpp
161 $(REALCC) -c -o $@ $< $(SUPPORT_CFLAGS)
162 src/plat-sdl/%.$(OBJECT_SUFFIX): src/plat-sdl/%.cpp
163 $(REALCC) -c -o $@ $< $(SUPPORT_CFLAGS)
164 src/plat-wxwidgets/%.$(OBJECT_SUFFIX): src/plat-wxwidgets/%.cpp
165 $(REALCC) -c -o $@ $< $(SUPPORT_CFLAGS)
167 #lsnes main executable.
168 lsnes.$(EXECUTABLE_SUFFIX): $(CORE_OBJECTS) $(PLATFORM_OBJECTS)
169 $(REALCC) -o $@ $^ $(SUPPORT_LDFLAGS)
171 #Other executables.
172 %.$(EXECUTABLE_SUFFIX): src/util/%.$(OBJECT_SUFFIX) $(CORE_OBJECTS) $(PLAT_DUMMY_OBJECTS)
173 $(REALCC) -o $@ $^ $(CORE_LDFLAGS)
175 #Fonts.
176 src/fonts/font.$(OBJECT_SUFFIX): src/fonts/$(FONT_SRC)
177 echo "extern const char* font_hex_data = " >src/fonts/font.cpp
178 sed -E -f src/fonts/fonttransform.sed <$^ >>src/fonts/font.cpp
179 echo ";" >>src/fonts/font.cpp
180 $(REALCC) $(CORE_CFLAGS) -c -o $@ src/fonts/font.cpp
182 #Version info.
183 buildaux/version.exe: buildaux/version.cpp VERSION
184 $(HOSTCC) $(HOSTCCFLAGS) -o $@ $<
185 src/core/version.cpp: buildaux/version.exe FORCE
186 buildaux/version.exe >$@
188 .PHONY: FORCE
190 clean:
191 rm -f $(PROGRAMS) src/*.$(OBJECT_SUFFIX) src/*/*.$(OBJECT_SUFFIX) avi/*.$(OBJECT_SUFFIX) src/fonts/font.o src/fonts/font.cpp