-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
185 lines (141 loc) · 4.77 KB
/
Copy pathMakefile
File metadata and controls
185 lines (141 loc) · 4.77 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
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
libname = libgme_m
version = 0.0.1
prefix ?= /opt/local
CPP_DEFS += -DSMOOTH_VOLUME -DBLARGG_NONPORTABLE -DNDEBUG
ifeq ($(OS),Windows_NT)
uname_S := Windows
else
uname_S := $(shell uname -s)
endif
ifdef CROSS_COMPILE
ifneq (,$(findstring i686,$(CROSS_COMPILE)))
# 32 butt
uname_S = Cross_Windows32
else
# 64 Bit (implied from lack of i686 string)
uname_S = Cross_Windows64
endif
endif
ifneq (,$(filter $(uname_S),Darwin Linux Cross_Windows64 Cross_Windows32))
CPP_DEFS += -DHAVE_STDINT_H
endif
ifeq ($(uname_S), Darwin)
libname_ext = $(libname).dylib
target = $(libname_ext) # .$(version)
libname_ext_ver = $(libname_ext).$(version)
ifeq ($(OSX_BACKSUPPORT), 1)
OSX_BACKSUPPORT = -arch x86_64 -mmacosx-version-min=10.9 \
-DMAC_OS_X_VERSION_MIN_REQUIRED=1090
endif
CPPFLAGS += $(OSX_BACKSUPPORT)
LDFLAGS += $(OSX_BACKSUPPORT) -dynamiclib -install_name $(CURDIR)/$(libname_ext_ver)
else ifeq ($(uname_S), Linux)
libname_ext = $(libname).so
libname_ext_ver = $(libname_ext).$(version)
target = $(libname_ext)
LDFLAGS += -shared -Wl,-soname,$(libname_ext_ver)
CPPFLAGS += -fPIC
else ifeq ($(uname_S), Cross_Windows64)
libname_ext = $(libname).dll
libname_ext_ver = $(libname_ext)
target = $(libname_ext_ver)
LDFLAGS += -shared -Wl,--out-implib,$(libname).dll.a
#CPPFLAGS += -fPIC
CPP_DEFS += -DLIBGME_M_EXPORTS
else ifeq ($(uname_S), Cross_Windows32)
libname_ext = $(libname).dll
# For some reason, on the 32bit Mingw toolchain, the DLL file when dynamically
# compiled into SNES Tracker binaries, would reference a libgme_m.dll.0.1.1
# file name, where on 64 bit it would refer to the final libgme_m.dll name.
# To keep the same naming convention for the DLL names across builds,
# I will remove the version string from the libname_ext_ver variable below.
# That ought to fix it.
libname_ext_ver = $(libname_ext) # .$(version)
target = $(libname_ext_ver)
LDFLAGS += -shared -Wl,--out-implib,$(libname).dll.a
#CPPFLAGS += -fPIC
CPP_DEFS += -DLIBGME_M_EXPORTS
else ifeq ($(uname_S), Windows)
target = libgme.dll
else
endif
CC=$(CROSS_COMPILE)g++
CPP=$(CROSS_COMPILE)g++
OBJCC=$(CROSS_COMPILE)g++
debug = -g
optimize = -O2
gme_CPPFLAGS=$(debug) $(optimize) -c -I. -I$(SHARED_DIR) -Igme_m -Wno-c++11-narrowing
LDFLAGS += $(debug)
# global CPP
CPP_DEFS +=
CPPFLAGS += -Wno-return-type -std=c++11 $(gme_CPPFLAGS) -MMD -MP -Wno-int-to-void-pointer-cast
#### SOURCES
SOURCES=$(wildcard *.cpp) $(wildcard */*.cpp) $(wildcard */*/*.cpp)\
$(wildcard */*/*/*.cpp) $(wildcard */*/*/*/*.cpp)
# Native File Directory
MSOURCES=$(wildcard $(SHARED_DIR)*/*.m)
###
#
OBJECTS=$(SOURCES:.cpp=.cpp.o) $(MSOURCES:.m=.m.o)
all: $(SOURCES) $(libname_ext_ver)
$(libname_ext_ver): $(OBJECTS) Makefile
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
# Since the Mingw32 toolchain needs to build libgme_m.dll directly, rather than
# with the version string attached first, there is no need to link to the final
# file name.
ifneq (,$(filter $(uname_S),Darwin Linux))
ln -sf $(libname_ext_ver) $(libname_ext)
endif
%.cpp.o: %.cpp
$(CPP) $(CPP_DEFS) $(CPPFLAGS) -c $< -o $@
%.m.o: %.m
$(OBJCC) $(OBJCFLAGS) -c $< -o $@
clean:
rm -f $(libname_ext_ver) $(libname_ext)
find . -name "*.o" -o -name "*.d" | xargs rm -rf
# Scenario:
# Put the DLL directly into the binary folder for hotlinking
install-lib-direct: $(libname_ext_ver)
ifneq (,$(filter $(uname_S),Darwin Linux))
mkdir -p $(prefix)
cp $(libname_ext_ver) $(prefix)
ln -sf $(libname_ext_ver) $(prefix)/$(libname_ext)
# else if CrossWindows64 or CrossWindows32
else ifdef CROSS_COMPILE
mkdir -p $(prefix)
#cp $(libname_ext_ver) $(prefix)
cp $(libname_ext) $(prefix)
else ifeq ($(uname_S), Windows)
else
endif
install: $(libname_ext_ver)
ifneq (,$(filter $(uname_S),Darwin Linux))
mkdir -p $(prefix)/include/gme_m
cp gme_m/*.h $(prefix)/include/gme_m
mkdir -p $(prefix)/lib
cp $(libname_ext_ver) $(prefix)/lib
ln -sf $(prefix)/lib/$(libname_ext_ver) $(prefix)/lib/$(libname_ext)
else ifeq ($(uname_S), Cross_Windows64)
mkdir -p $(prefix)/include/gme_m
cp gme_m/*.h $(prefix)/include/gme_m
mkdir -p $(prefix)/lib
cp $(libname_ext_ver) $(prefix)/bin
cp $(libname).dll* $(prefix)/lib
#ln -sf $(prefix)/lib/$(libname_ext_ver) $(prefix)/lib/$(libname_ext)
else ifeq ($(uname_S), Windows)
else
endif
ifeq ($(uname_S), Darwin)
install_name_tool -id $(prefix)/lib/$(libname_ext_ver) $(prefix)/lib/$(libname_ext_ver)
endif
uninstall:
ifneq (,$(filter $(uname_S),Darwin Linux))
rm -rf $(prefix)/include/gme_m
# could make symlink point to older version of the lib if it exists
rm $(prefix)/lib/$(libname_ext)
rm $(prefix)/lib/$(libname_ext_ver)
else ifeq ($(uname_S), Windows)
else
endif
# DO NOT DELETE THIS LINE -- make depend depends on it.
-include $(SOURCES:.cpp=.cpp.d) $(MSOURCES:.m=.m.d)