1compiler     := gcc
2extra_flags  :=
3use_neon     := 0
4release	    := release
5EXE_EXT	    :=
6TARGET       := database_task
7HAVE_ZLIB    := 1
8HAVE_7ZIP    := 1
9HAVE_THREADS := 1
10
11ifeq ($(platform),)
12platform = unix
13ifeq ($(shell uname -a),)
14   platform = win
15else ifneq ($(findstring MINGW,$(shell uname -a)),)
16   platform = win
17else ifneq ($(findstring Darwin,$(shell uname -a)),)
18   platform = osx
19   arch = intel
20ifeq ($(shell uname -p),powerpc)
21   arch = ppc
22endif
23else ifneq ($(findstring win,$(shell uname -a)),)
24   platform = win
25endif
26endif
27
28ifeq ($(compiler),gcc)
29extra_rules_gcc := $(shell $(compiler) -dumpmachine)
30endif
31
32ifneq (,$(findstring armv7,$(extra_rules_gcc)))
33extra_flags += -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon
34CFLAGS += -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon
35CXXFLAGS += -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon
36use_neon := 1
37endif
38
39ifneq (,$(findstring hardfloat,$(extra_rules_gcc)))
40extra_flags += -mfloat-abi=hard
41CFLAGS += -mfloat-abi=hard
42CXXFLAGS += -mfloat-abi=hard
43endif
44
45ifeq ($(build),)
46build = release
47endif
48
49ifeq ($(DEBUG), 1)
50build = debug
51endif
52
53ifeq (release,$(build))
54extra_flags += -O2
55CFLAGS += -O2
56CXXFLAGS += -O2
57LDFLAGS += -O2
58endif
59
60ifeq (debug,$(build))
61extra_flags += -O0 -g
62CFLAGS += -O0 -g
63CXXFLAGS += -O0 -g
64LDFLAGS += -O0 -g
65endif
66
67ifneq ($(SANITIZER),)
68   CFLAGS   := -fsanitize=$(SANITIZER) $(CFLAGS)
69   CXXFLAGS := -fsanitize=$(SANITIZER) $(CXXFLAGS)
70   LDFLAGS  := -fsanitize=$(SANITIZER) $(LDFLAGS)
71endif
72
73EXE_EXT :=
74ifeq ($(platform), unix)
75else ifeq ($(platform), osx)
76compiler := $(CC)
77else
78EXE_EXT = .exe
79endif
80
81CORE_DIR = ../../..
82DEPS_DIR = $(CORE_DIR)/deps
83LIBRETRO_COMM_DIR = $(CORE_DIR)/libretro-common
84INCDIRS := -I$(LIBRETRO_COMM_DIR)/include
85
86CC      := $(compiler)
87CXX     := $(subst CC,++,$(compiler))
88asflags := $(extra_flags)
89flags   += -std=c99
90
91SOURCES_C := \
92	$(CORE_DIR)/samples/tasks/database/main.c \
93	$(CORE_DIR)/tasks/task_database.c \
94	$(CORE_DIR)/tasks/task_database_cue.c \
95	$(CORE_DIR)/database_info.c \
96	$(CORE_DIR)/core_info.c \
97	$(CORE_DIR)/msg_hash.c \
98	$(CORE_DIR)/intl/msg_hash_us.c \
99	$(CORE_DIR)/playlist.c \
100	$(CORE_DIR)/verbosity.c \
101	$(CORE_DIR)/libretro-db/bintree.c \
102	$(CORE_DIR)/libretro-db/libretrodb.c \
103	$(CORE_DIR)/libretro-db/query.c \
104	$(CORE_DIR)/libretro-db/rmsgpack.c \
105	$(CORE_DIR)/libretro-db/rmsgpack_dom.c \
106	$(LIBRETRO_COMM_DIR)/file/archive_file.c \
107	$(LIBRETRO_COMM_DIR)/file/config_file.c \
108	$(LIBRETRO_COMM_DIR)/file/file_path.c \
109	$(LIBRETRO_COMM_DIR)/file/file_path_io.c \
110	$(LIBRETRO_COMM_DIR)/file/retro_dirent.c \
111	$(LIBRETRO_COMM_DIR)/hash/rhash.c \
112	$(LIBRETRO_COMM_DIR)/compat/compat_fnmatch.c \
113	$(LIBRETRO_COMM_DIR)/compat/compat_posix_string.c \
114	$(LIBRETRO_COMM_DIR)/compat/compat_strcasestr.c \
115	$(LIBRETRO_COMM_DIR)/compat/compat_strl.c \
116	$(LIBRETRO_COMM_DIR)/compat/fopen_utf8.c \
117	$(LIBRETRO_COMM_DIR)/formats/json/rjson.c \
118	$(LIBRETRO_COMM_DIR)/encodings/encoding_crc32.c \
119	$(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c \
120	$(LIBRETRO_COMM_DIR)/queues/task_queue.c \
121	$(LIBRETRO_COMM_DIR)/lists/dir_list.c \
122	$(LIBRETRO_COMM_DIR)/lists/string_list.c \
123	$(LIBRETRO_COMM_DIR)/streams/interface_stream.c \
124	$(LIBRETRO_COMM_DIR)/streams/memory_stream.c \
125	$(LIBRETRO_COMM_DIR)/streams/file_stream.c \
126	$(LIBRETRO_COMM_DIR)/string/stdstring.c \
127	$(LIBRETRO_COMM_DIR)/vfs/vfs_implementation.c
128
129DEFINES    = -DHAVE_LIBRETRODB -DHAVE_COMPRESSION
130
131ifeq ($(HAVE_ZLIB), 1)
132SOURCES_C += \
133				 $(LIBRETRO_COMM_DIR)/file/archive_file_zlib.c \
134				 $(LIBRETRO_COMM_DIR)/streams/trans_stream_zlib.c
135DEFINES += -DHAVE_ZLIB
136LIBS += -lz
137endif
138
139ifeq ($(HAVE_7ZIP), 1)
140SOURCES_C +=  \
141				 $(LIBRETRO_COMM_DIR)/file/archive_file_7z.c
142DEFINES += -DHAVE_7ZIP -D_7ZIP_ST
143INCDIRS += -I$(DEPS_DIR)
144
145SOURCES_C += $(DEPS_DIR)/7zip/7zIn.c \
146				 $(DEPS_DIR)/7zip/Bra86.c \
147				 $(DEPS_DIR)/7zip/7zFile.c \
148				 $(DEPS_DIR)/7zip/7zStream.c \
149				 $(DEPS_DIR)/7zip/LzFind.c \
150				 $(DEPS_DIR)/7zip/LzmaDec.c \
151				 $(DEPS_DIR)/7zip/LzmaEnc.c \
152				 $(DEPS_DIR)/7zip/7zCrcOpt.c \
153				 $(DEPS_DIR)/7zip/Bra.c \
154				 $(DEPS_DIR)/7zip/7zDec.c \
155				 $(DEPS_DIR)/7zip/Bcj2.c \
156				 $(DEPS_DIR)/7zip/7zCrc.c \
157				 $(DEPS_DIR)/7zip/Lzma2Dec.c \
158				 $(DEPS_DIR)/7zip/7zBuf.c
159endif
160
161ifeq ($(HAVE_THREADS), 1)
162SOURCES_C +=  \
163				 $(LIBRETRO_COMM_DIR)/rthreads/rthreads.c
164DEFINES += -DHAVE_THREADS
165
166ifeq (,$(findstring MSYS,$(uname -s)))
167LIBS += -lpthread
168endif
169endif
170
171flags     := $(INCDIRS)
172INCFLAGS  := $(INCDIRS)
173
174CFLAGS    += $(DEFINES)
175CXXFLAGS  += $(DEFINES)
176
177OBJECTS    = $(SOURCES_C:.c=.o)
178
179OBJOUT   = -o
180LINKOUT  = -o
181
182ifneq (,$(findstring msvc,$(platform)))
183	OBJOUT = -Fo
184LINKOUT = -out:
185ifeq ($(STATIC_LINKING),1)
186	LD ?= lib.exe
187else
188	LD = link.exe
189endif
190else
191	LD = $(CC)
192endif
193
194all: $(TARGET)$(EXE_EXT)
195$(TARGET)$(EXE_EXT): $(OBJECTS)
196	$(LD)  $(LINKOUT)$@ $(SHARED) $(OBJECTS) $(LDFLAGS) $(LIBS)
197
198%.o: %.c
199	$(CC) $(INCFLAGS) $(CFLAGS) -c $(OBJOUT)$@ $<
200
201%.o: %.cpp
202	$(CXX) $(INCFLAGS) $(CXXFLAGS) -c $(OBJOUT)$@ $<
203
204clean:
205	rm -f $(OBJECTS)
206