-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile.mingw
74 lines (55 loc) · 1.81 KB
/
Makefile.mingw
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
PROJECT = project-name
CC = i686-w64-mingw32-gcc
#CC = x86_64-w64-mingw32-gcc
CFLAGS = -std=c99 -Wall -Wextra -Werror -Wshadow -Wconversion
LD = i686-w64-mingw32-gcc
#LD = x86_64-w64-mingw32-gcc
LDFLAGS = -shared
ASM = nasm
ASFLAGS = -f win32
#ASFLAGS = -f win64
BIN = bin
BUILD = build
DEBUG = $(OBJ)/debug
RELEASE = $(OBJ)/release
SRC = source
OBJ = build
ASM_SRC = $(SRC)/assembly
ASM_OBJ = $(OBJ)/assembly
SOURCES = $(wildcard $(SRC)/*.c)
DBG_OBJECTS = $(patsubst $(SRC)/%.c,$(DEBUG)/%.o,$(SOURCES))
REL_OBJECTS = $(patsubst $(SRC)/%.c,$(RELEASE)/%.o,$(SOURCES))
ASM_SOURCES = $(wildcard $(ASM_SRC)/*.asm)
ASM_OBJECTS = $(patsubst $(ASM_SRC)/%.asm,$(ASM_OBJ)/%.o,$(ASM_SOURCES))
INCLUDE = include
INCLUDES = $(addprefix -I,$(INCLUDE))
LIB_FILES = d3d9 d3dx9
LIBS = $(addprefix -l,$(LIB_FILES))
all: debug release
debug: $(DEBUG)
release: $(RELEASE)
$(DEBUG): CFLAGS += -g -DDEBUG
$(DEBUG): $(OBJ) $(BIN) $(ASM_OBJECTS) $(DBG_OBJECTS)
$(LD) $(LDFLAGS) $(ASM_OBJECTS) $(DBG_OBJECTS) $(LIBS) -o $(BIN)/$(PROJECT)_d.dll
$(RELEASE): CFLAGS += -O3 -fno-ident -funroll-loops -fvisibility=hidden -DVC_EXTRA_LEAN
$(RELEASE): LDFLAGS += -s
$(RELEASE): $(OBJ) $(BIN) $(ASM_OBJECTS) $(REL_OBJECTS)
$(LD) $(LDFLAGS) $(ASM_OBJECTS) $(REL_OBJECTS) $(LIBS) -o $(BIN)/$(PROJECT).dll
$(ASM_OBJECTS): $(ASM_OBJ)/%.o: $(ASM_SRC)/%.asm
$(ASM) $(ASFLAGS) $^ -o $@
$(DBG_OBJECTS): $(DEBUG)/%.o: $(SRC)/%.c
$(CC) $(CFLAGS) $(INCLUDES) -c $^ -o $@
$(REL_OBJECTS): $(RELEASE)/%.o: $(SRC)/%.c
$(CC) $(CFLAGS) $(INCLUDES) -c $^ -o $@
$(OBJ):
mkdir -p $@/assembly
mkdir -p $@/debug
mkdir -p $@/release
$(BIN):
mkdir -p $@
clean:
rm -f bin/*
rm -f build/{assembly,debug,release}/*
extra-clean:
rm -fr bin
rm -fr build