1TARGET := rzip
2
3LIBRETRO_COMM_DIR := ../../..
4LIBRETRO_DEPS_DIR := ../../../../deps
5
6# Attempt to detect target platform
7ifeq '$(findstring ;,$(PATH))' ';'
8	UNAME := Windows
9else
10	UNAME := $(shell uname 2>/dev/null || echo Unknown)
11	UNAME := $(patsubst CYGWIN%,Cygwin,$(UNAME))
12	UNAME := $(patsubst MSYS%,MSYS,$(UNAME))
13	UNAME := $(patsubst MINGW%,MSYS,$(UNAME))
14endif
15
16# Add '.exe' extension on Windows platforms
17ifeq ($(UNAME), Windows)
18	TARGET := rzip.exe
19endif
20ifeq ($(UNAME), MSYS)
21	TARGET := rzip.exe
22endif
23
24SOURCES := \
25	rzip.c \
26	$(LIBRETRO_COMM_DIR)/compat/fopen_utf8.c \
27	$(LIBRETRO_COMM_DIR)/compat/compat_strl.c \
28	$(LIBRETRO_COMM_DIR)/compat/compat_strcasestr.c \
29	$(LIBRETRO_COMM_DIR)/compat/compat_posix_string.c \
30	$(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c \
31	$(LIBRETRO_COMM_DIR)/encodings/encoding_crc32.c \
32	$(LIBRETRO_COMM_DIR)/file/file_path.c \
33	$(LIBRETRO_COMM_DIR)/file/file_path_io.c \
34	$(LIBRETRO_COMM_DIR)/string/stdstring.c \
35	$(LIBRETRO_COMM_DIR)/streams/file_stream.c \
36	$(LIBRETRO_COMM_DIR)/streams/file_stream_transforms.c \
37	$(LIBRETRO_COMM_DIR)/streams/interface_stream.c \
38	$(LIBRETRO_COMM_DIR)/streams/memory_stream.c \
39	$(LIBRETRO_COMM_DIR)/streams/rzip_stream.c \
40	$(LIBRETRO_COMM_DIR)/streams/stdin_stream.c \
41	$(LIBRETRO_COMM_DIR)/streams/trans_stream.c \
42	$(LIBRETRO_COMM_DIR)/streams/trans_stream_pipe.c \
43	$(LIBRETRO_COMM_DIR)/streams/trans_stream_zlib.c \
44	$(LIBRETRO_COMM_DIR)/vfs/vfs_implementation.c \
45	$(LIBRETRO_COMM_DIR)/time/rtime.c
46
47ifneq ($(wildcard $(LIBRETRO_DEPS_DIR)/*),)
48	# If we are building from inside the RetroArch
49	# directory (i.e. if an 'external' deps directory
50	# is avaiable), bake in zlib support
51	SOURCES += \
52		$(LIBRETRO_DEPS_DIR)/libz/adler32.c \
53		$(LIBRETRO_DEPS_DIR)/libz/libz-crc32.c \
54		$(LIBRETRO_DEPS_DIR)/libz/deflate.c \
55		$(LIBRETRO_DEPS_DIR)/libz/gzclose.c \
56		$(LIBRETRO_DEPS_DIR)/libz/gzlib.c \
57		$(LIBRETRO_DEPS_DIR)/libz/gzread.c \
58		$(LIBRETRO_DEPS_DIR)/libz/gzwrite.c \
59		$(LIBRETRO_DEPS_DIR)/libz/inffast.c \
60		$(LIBRETRO_DEPS_DIR)/libz/inflate.c \
61		$(LIBRETRO_DEPS_DIR)/libz/inftrees.c \
62		$(LIBRETRO_DEPS_DIR)/libz/trees.c \
63		$(LIBRETRO_DEPS_DIR)/libz/zutil.c
64	INCLUDE_DIRS := -I$(LIBRETRO_COMM_DIR)/include/compat/zlib
65else
66	# If this is a stand-alone libretro-common directory,
67	# rely on system zlib library (note: only likely to
68	# work on Unix-based platforms...)
69	LDFLAGS += -lz
70endif
71
72OBJS := $(SOURCES:.c=.o)
73INCLUDE_DIRS += -I$(LIBRETRO_COMM_DIR)/include
74CFLAGS += -DHAVE_ZLIB -Wall -pedantic -std=gnu99 $(INCLUDE_DIRS)
75
76# Silence "ISO C does not support the 'I64' ms_printf length modifier"
77# warnings when using MinGW
78ifeq ($(UNAME), Windows)
79	CFLAGS += -Wno-format
80endif
81ifeq ($(UNAME), MSYS)
82	CFLAGS += -Wno-format
83endif
84
85ifeq ($(DEBUG), 1)
86	CFLAGS += -O0 -g -DDEBUG -D_DEBUG
87else
88	CFLAGS += -O2 -DNDEBUG
89endif
90
91all: $(TARGET)
92
93%.o: %.c
94	$(CC) -c -o $@ $< $(CFLAGS)
95
96$(TARGET): $(OBJS)
97	$(CC) -o $@ $^ $(LDFLAGS)
98
99clean:
100	rm -f $(TARGET) $(OBJS)
101
102.PHONY: clean
103