forked from askeksa/Shrinkler
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
127 lines (90 loc) · 2.78 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
ifndef PLATFORM
PLATFORM := native
endif
ifneq ($(PLATFORM),$(filter $(PLATFORM),amiga windows-32 windows-64 native native-32 native-64 mac))
DUMMY := $(error Unsupported platform $(PLATFORM))
endif
BUILD_DIR := build/$(PLATFORM)
INCLUDE := -I decrunchers_bin
MKDIR_DUMMY := $(shell mkdir -p $(BUILD_DIR))
all: $(BUILD_DIR)/Shrinkler
# Common flags
CFLAGS := -Wall -Wno-sign-compare
LFLAGS :=
ifdef DEBUG
CFLAGS += -g -DDEBUG
else
CFLAGS += -O3
ifneq ($(PLATFORM),mac)
LFLAGS += -s
endif
endif
ifdef PROFILE
CFLAGS += -fno-inline -fno-inline-functions
LFLAGS :=
endif
ifeq ($(PLATFORM),amiga)
# Amiga build, using GCC and ixemul
TOOLCHAIN_DIR := toolchain
AMIGA_GCC_DIR := $(TOOLCHAIN_DIR)/GCC-4.5.0-m68k-amigaos-cygwin/usr/local/amiga
BINUTILS_DIR := $(TOOLCHAIN_DIR)/amiga-binutils
INCLUDE_DIR := $(TOOLCHAIN_DIR)/C++include/include
LIB_DIR1 := $(TOOLCHAIN_DIR)/C++include/lib
LIB_DIR2 := $(AMIGA_GCC_DIR)/lib/gcc/m68k-amigaos/4.5.0
LIB_DIR3 := $(TOOLCHAIN_DIR)/ixemul-sdk/lib
CC := $(AMIGA_GCC_DIR)/bin/m68k-amigaos-g++
CFLAGS += -m68000
INCLUDE += -I $(INCLUDE_DIR)/c++/4.3.2 -I $(INCLUDE_DIR)/c++/4.3.2/m68k-amigaos -I $(INCLUDE_DIR)
ASM := $(BINUTILS_DIR)/as
ASMFLAGS :=
LINK := $(BINUTILS_DIR)/ld
STARTUP := $(LIB_DIR3)/crt0.o
LIBS := -L $(LIB_DIR1) -L $(LIB_DIR2) -L $(LIB_DIR3) -lstdc++ -lgcc -lc
$(BUILD_DIR)/%.o: cruncher/%.cpp
$(CC) $(CFLAGS) $(INCLUDE) $< -S -o $(@:%.o=%.s)
$(ASM) $(ASMFLAGS) $(@:%.o=%.s) -o $@
else
ifeq ($(PLATFORM),windows-32)
# 32-bit MinGW build
CC := i686-w64-mingw32-g++
LINK := i686-w64-mingw32-g++
LFLAGS += -static -static-libgcc -static-libstdc++
else
ifeq ($(PLATFORM),windows-64)
# 64-bit MinGW build
CC := x86_64-w64-mingw32-g++
LINK := x86_64-w64-mingw32-g++
LFLAGS += -static -static-libgcc -static-libstdc++
else
# Native build
CC := g++
LINK := g++
ifeq ($(PLATFORM),native-32)
CFLAGS += -m32
LFLAGS += -m32
endif
ifeq ($(PLATFORM),native-64)
CFLAGS += -m64
LFLAGS += -m64
endif
ifeq ($(PLATFORM),mac)
CFLAGS += -mmacosx-version-min=10.9
LFLAGS += -mmacosx-version-min=10.9
endif
endif
endif
# Common setup for non-Amiga builds
INCLUDE +=
STARTUP :=
LIBS :=
$(BUILD_DIR)/%.o: cruncher/%.cpp
$(CC) $(CFLAGS) $(INCLUDE) $< -c -o $@
endif
HEADERS := Header1.dat Header1T.dat Header2.dat OverlapHeader.dat OverlapHeaderT.dat MiniHeader.dat
$(BUILD_DIR)/Shrinkler.o: cruncher/*.h $(patsubst %,decrunchers_bin/%,$(HEADERS))
%.dat: %.bin
python -c 'for b in open("$^", "rb").read(): print ("0x%02X," % ord(b)),' > $@
$(BUILD_DIR)/Shrinkler: $(BUILD_DIR)/Shrinkler.o
$(LINK) $(LFLAGS) $(STARTUP) $< $(LIBS) -o $@
clean:
rm -rf build