-
Notifications
You must be signed in to change notification settings - Fork 0
/
makefile
95 lines (76 loc) · 2.8 KB
/
makefile
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# (c) Samm see License in LICENSE.txt FILE
CC := gcc
CXX := g++
ROOT := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
PROJECT ?=float_compress
# WIN, LINUX, MACOS, UNIX, NONE
OS ?=WIN
# RELEASE, DEBUG
STATE ?=RELEASE
# x86, x64, ARM, ARM64
ARCH ?=x64
# SOFTWARE, OS
TYPE ?=SOFTWARE
SRC := ./projects/$(PROJECT)/
BUILD := ./build/$(PROJECT)/$(ARCH)_$(STATE)/
INCS := -I$(ROOT)shared/inc/
LIBS := -lmingw32 -L./shared/lib/$(ARCH)/ -lSDL2main -lSDL2 -ldinput8 -ldxguid -ldxerr8 -luser32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -lgdi32
#ifeq ($(OS),WIN)
# LIBS += -lversion -lgdi32 -limm32
#endif
ifeq ($(ARCH),x86)
CFLAGS := -m32 $(INCS) -Wall
CXXFLAGS := -m32 -std=c++20 $(INCS) -Wall
ASFLAGS := -m32 -f elf
LDFLAGS := -m32 -L./shared/lib/$(ARCH)/
else ifeq ($(ARCH),x64)
CFLAGS := -m64 $(INCS) -Wall
CXXFLAGS := -m64 -std=c++20 $(INCS) -Wall
ASFLAGS := -m64 -f elf64
LDFLAGS := -m64 -L./shared/lib/$(ARCH)/
endif
# LDFLAGS += -m elf_i386 -T linker.ld
# LDFLAGS += -m elf_x86_64 -T linker.ld
OUT := $(BUILD)$(PROJECT).exe
ifeq ($(OS),WIN)
OUT := $(BUILD)$(PROJECT).exe
else ifeq ($(OS),LINUX)
OUT := $(BUILD)$(PROJECT).out
else ifeq ($(OS),MACOS)
OUT := $(BUILD)$(PROJECT).app
else
OUT := $(BUILD)$(PROJECT).bin
endif
#ASM_SOURCES := $(wildcard $(ROOT)shared/inc/*.asm) $(wildcard $(SRC)*.asm)
#C_SOURCES := $(wildcard $(ROOT)shared/inc/*.c) $(wildcard $(SRC)*.c)
#CXX_SOURCES := $(wildcard $(ROOT)shared/inc/*.cpp) $(wildcard $(SRC)*.cpp)
ASM_SOURCES := $(wildcard $(shell find $(ROOT)shared/inc/ $(SRC) -name '*.asm'))
#ASM_SOURCES += $(wildcard $(shell find $(ROOT)shared/inc/* -name '*.asm'))
#ASM_SOURCES += $(wildcard $(shell find $(ROOT)shared/inc/* -name '*.S'))
C_SOURCES := $(wildcard $(shell find $(ROOT)shared/inc/ $(SRC) -name '*.c'))
#C_SOURCES += $(wildcard $(shell find $(ROOT)shared/inc/ -name '*.c'))
IMGUISRC := $(wildcard $(ROOT)shared/inc/imgui/*.cpp)
CXX_SOURCES := $(wildcard $(shell find $(ROOT)shared/inc/ $(SRC) -name '*.cpp'))
#CXX_SOURCES += $(wildcard $(shell find $(ROOT)shared/inc/ -name '*.cpp'))
CXX_SOURCES := $(filter-out $(IMGUISRC), $(CXX_SOURCES))
ASM_OBJS := $(patsubst %.asm,%.o,$(ASM_SOURCES))
C_OBJS := $(patsubst %.c,%.o,$(C_SOURCES))
CXX_OBJS := $(patsubst %.cpp,%.o,$(CXX_SOURCES))
IMGUIOBJS := $(IMGUISRC:.cpp=.o)
$(ASM_OBJS) : $(ASM_SOURCES)
$(CC) $(ASFLAGS) $< -o $^
$(C_OBJS) : $(C_SOURCES)
$(CC) $(CFLAGS) -c $< -o $@
$(IMGUIOBJS): $(IMGUISRC)
$(CXX) $(CXXFLAGS) $(INCS) -c $< -o $@
$(CXX_OBJS) : $(CXX_SOURCES)
$(CXX) $(CXXFLAGS) -c $< -o $@
create_directories:
mkdir -p $(BUILD)
$(OUT) : $(ASM_OBJS) $(C_OBJS) $(CXX_OBJS) $(IMGUIOBJS)
$(CXX) $(LDFLAGS) $(INCS) $^ -o $@ $(LIBS)
.PHONY: one
one: create_directories $(OUT)
rebuild: clean one
clean:
rm -rf $(ASM_OBJS) $(C_OBJS) $(CXX_OBJS) $(IMGUIOBJS) $(BUILD)