-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
63 lines (49 loc) · 1.81 KB
/
Makefile
File metadata and controls
63 lines (49 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
include config.mk
is_true = $(if $(filter-out 0,$(1)),1,)
define sources
$(eval $(2)_SRC := $(1))
$(eval $(2)_OBJ := $(patsubst %.c,$(BUILD)/%.o,$(1)))
endef
$(call sources,$(shell find $(FRONTEND) -name "*.c"),FRONTEND)
$(call sources,nesynth.c,NESYNTH)
IMAGES = $(shell find $(IMG_SOURCE) -name "*.png")
IMAGES_H = $(patsubst $(IMG_SOURCE)/%,$(IMG_TARGET)/%.h,$(IMAGES))
LFLAGS_FRONTEND = $(LFLAGS)
ifeq ($(OS),Windows_NT)
CFLAGS += -DWINDOWS
LFLAGS_FRONTEND += $(shell pkgconf --static --libs $(LIBS)) -static
FRONTEND_TARGET = $(NAME).exe
LIBRARY_TARGET = $(NAME).dll
else
LFLAGS_FRONTEND += $(shell pkgconf --libs sdl3)
FRONTEND_TARGET = $(NAME)
LIBRARY_TARGET = lib$(NAME).so
endif
.PHONY: all clean
all: $(LIBRARY_TARGET) $(if $(call is_true,$(FRONTEND_ENABLE)),$(FRONTEND_TARGET),)
clean:
::setmsg Cleaning up
rm -rf $(LIBRARY_TARGET) $(FRONTEND_TARGET) $(IMG_TARGET)/* $(BUILD)
-include $(NESYNTH_OBJ:.o=.d) $(FRONTEND_OBJ:.o=.d)
$(IMG_TARGET)/%.png.h: $(IMG_SOURCE)/%.png
::setmsg Registering image $<
mkdir -p $(dir $@)
echo "{ $$(wc -c < $<), \"$<\", (char[]){" > $@
hexdump -e '16/1 "0x%02X," "\n"' $< | sed 's/0x\x20\x20,//g' >> $@
echo "}}," >> $@
$(IMG_TARGET)/all.h: $(IMAGES_H)
::setmsg Merging images
echo "" > $@
for i in $^; do echo "#include \"$$i\"" >> $@; done
$(BUILD)/$(FRONTEND)/imageloader/imageloader.o: $(IMG_TARGET)/all.h
$(BUILD)/%.o: %.c
::setmsg Compiling $<
mkdir -p $(dir $@)
::compile -c $(CFLAGS) -o $@ $<
::compile $(CFLAGS) -MM -MT $@ $< -o $(@:.o=.d)
$(FRONTEND_TARGET): $(FRONTEND_OBJ) $(LIBRARY_TARGET)
::setmsg Linking frontend
::compile $(FRONTEND_OBJ) $(if $(call is_true,$(FRONTEND_LINK_STATICALLY)),$(NESYNTH_OBJ),-L. -l$(NAME)) $(LFLAGS_FRONTEND) -o $@
$(LIBRARY_TARGET): $(NESYNTH_OBJ)
::setmsg Linking library
::compile $(NESYNTH_OBJ) $(LFLAGS) -shared -o $@