sdk: Fixes to include.mk to allow building from MSYS (Thanks Naji!)
[sdk] / include.mk
1
2 # DETECTION
3 ifeq "$(OS)" "Windows_NT"
4    WINDOWS = defined
5 else
6 ifeq "$(OSTYPE)" "FreeBSD"
7    BSD = defined
8 else
9 ifeq "$(shell uname)" "Darwin"
10    OSX = defined
11 else
12    LINUX = defined
13 endif
14 endif
15 endif
16
17 # PLATFORM
18 ifndef PLATFORM
19 ifdef WINDOWS
20    PLATFORM := win32
21 else
22 ifdef OSX
23    PLATFORM := apple
24 else
25    PLATFORM := linux
26 endif
27 endif
28 endif
29
30 # TOOLS
31 empty :=
32 space := $(empty) $(empty)
33 fixspace = $(subst $(space),\$(space),$1)
34 hidspace = $(subst $(space),^,$1)
35 shwspace = $(subst ^,$(space),$1)
36 ifdef WINDOWS
37 ifndef MSYSCON
38    fixps = $(subst \,/,$(1))
39    psep = $(subst \\,/,$(subst /,\,$(1)))
40    PS := $(strip \)
41    SODESTDIR := obj/$(PLATFORM)/bin/
42 else
43    fixps = $(1)
44    PS := $(strip /)
45    psep = $(1)
46    SODESTDIR := obj/$(PLATFORM)/bin/
47 endif
48 else
49    fixps = $(1)
50    PS := $(strip /)
51    psep = $(1)
52    SODESTDIR := obj/$(PLATFORM)/lib/
53 endif
54
55 # EXTENSIONS
56 .SUFFIXES: .c .ec .sym .imp .o
57 S := .sym
58 I := .imp
59 O := .o
60 A := .a
61
62 # PREFIXES AND POSTFIXES
63 ifeq "$(PLATFORM)" "win32"
64    E := .exe
65 ifeq "$(TARGET_TYPE)" "staticlib"
66    LP := lib
67 else
68    LP :=
69 endif
70    SO := .dll
71 else
72 ifeq "$(PLATFORM)" "apple"
73    E :=
74    LP := lib
75    SO := .dylib
76 else
77    E :=
78    LP := lib
79    SO := .so
80 endif
81 endif
82
83 # SUPER TOOLS
84 ifdef CCACHE
85    CCACHE_COMPILE := ccache
86 ifdef DISTCC
87    DISTCC_COMPILE := distcc
88 endif
89 else
90 ifdef DISTCC
91    DISTCC_COMPILE := distcc
92 endif
93 endif
94
95 # TOOLCHAIN
96 export CC      = $(CCACHE_COMPILE) $(DISTCC_COMPILE) gcc
97 export CPP     = $(CCACHE_COMPILE) $(DISTCC_COMPILE) cpp
98 export ECP     = ecp
99 export ECC     = ecc
100 export ECS     = ecs
101 export EAR     = ear
102 export AS      = as
103 export LD      = ld
104 export AR      = ar
105 export STRIP   = strip
106 UPX := upx
107
108 # SHELL COMMANDS
109 ifdef WINDOWS
110 ifndef MSYSCON
111    echo = $(if $(1),echo $(1))
112    cpq = $(if $(1),@cmd /c for %%I in ($(call psep,$(1))) do @copy /y %%I $(call psep,$(2)) > nul 2>&1)
113    rmq = $(if $(1),-@del /f /q $(call psep,$(1)) > nul 2>&1)
114    rmrq = $(if $(1),-@rmdir /q /s $(call psep,$(1)) > nul 2>&1)
115    mkdirq = $(if $(1),-@mkdir $(call psep,$(1)) > nul 2>&1)
116    rmdirq = $(if $(1),-@rmdir /q $(call psep,$(1)) > nul 2>&1)
117 else
118    echo = $(if $(1),echo "$(1)")
119    cpq = $(if $(1),@cp $(1) $(2))
120    rmq = $(if $(1),-@rm -f $(1))
121    rmrq = $(if $(1),-@rm -f -r $(1))
122    mkdirq = $(if $(1),-@mkdir -p $(1))
123    rmdirq = $(if $(1),-@rmdir $(1))
124 endif
125 else
126 ifdef OSX
127    echo = $(if $(1),echo "$(1)")
128    cpq = $(if $(1),cp $(1) $(2))
129    rmq = $(if $(1),-rm -f $(1))
130    rmrq = $(if $(1),-rm -f -r $(1))
131    mkdirq = $(if $(1),-mkdir -p $(1))
132    rmdirq = $(if $(1),-rmdir $(1))
133 else
134    echo = $(if $(1),echo "$(1)")
135    cpq = $(if $(1),@cp $(1) $(2))
136    rmq = $(if $(1),-@rm -f $(1))
137    rmrq = $(if $(1),-@rm -f -r $(1))
138    mkdirq = $(if $(1),-@mkdir -p $(1))
139    rmdirq = $(if $(1),-@rmdir $(1))
140 endif
141 endif
142
143 # COMPILER OPTIONS
144 ifeq "$(TARGET_TYPE)" "sharedlib"
145    ECSLIBOPT := -dynamiclib
146 else
147 ifeq "$(TARGET_TYPE)" "staticlib"
148    ECSLIBOPT := -staticlib
149 else
150    ECSLIBOPT :=
151 endif
152 endif
153 ifdef WINDOWS
154    FVISIBILITY :=
155    FPIC :=
156 ifeq "$(TARGET_TYPE)" "executable"
157    EXECUTABLE := $(CONSOLE)
158 else
159    EXECUTABLE :=
160 endif
161 else
162    FVISIBILITY := -fvisibility=hidden
163    FPIC := -fPIC
164    EXECUTABLE :=
165 endif
166 ifdef OSX
167 ifeq "$(TARGET_TYPE)" "sharedlib"
168    INSTALLNAME := -install_name $(LP)$(MODULE)$(SO)
169 else
170    INSTALLNAME :=
171 endif
172 else
173    INSTALLNAME :=
174 endif
175
176 # LINKER OPTIONS
177 ifdef OSX
178 ifeq "$(TARGET_TYPE)" "sharedlib"
179    SHAREDLIB := -dynamiclib -single_module -multiply_defined suppress
180    LINKOPT :=
181 else
182    SHAREDLIB :=
183    LINKOPT :=
184 endif
185 ifeq "$(TARGET_TYPE)" "sharedlib"
186    STRIPOPT := -x
187 else
188    STRIPOPT := -u -r
189 endif
190 else
191 ifeq "$(TARGET_TYPE)" "sharedlib"
192    SHAREDLIB := -shared
193 else
194    SHAREDLIB :=
195 endif
196    LINKOPT :=
197    STRIPOPT := -x
198 endif