makefile generation: fixed support for space in source filename with make generated...
[sdk] / include.mk
1 # HOST PLATFORM DETECTION
2 ifeq "$(OS)" "Windows_NT"
3    WINDOWS = defined
4 else
5 ifeq "$(OSTYPE)" "FreeBSD"
6    BSD = defined
7 else
8 ifeq "$(shell uname)" "Darwin"
9    OSX = defined
10 else
11    LINUX = defined
12 endif
13 endif
14 endif
15
16 # PLATFORM (TARGET)
17 ifndef PLATFORM
18 ifdef WINDOWS
19    PLATFORM := win32
20 else
21 ifdef OSX
22    PLATFORM := apple
23 else
24    PLATFORM := linux
25 endif
26 endif
27 endif
28
29 # MISC STRING TOOLS
30 empty :=
31 space := $(empty) $(empty)
32 escspace = $(subst $(space),\$(space),$1)
33 hidspace = $(subst \$(space),\7f,$1)
34 shwspace = $(subst \7f,\$(space),$1)
35
36 # PATH SEPARATOR STRING TOOLS
37 ifdef WINDOWS
38 ifndef MSYSCON
39    WIN_PS_TOOLS := defined
40 endif
41 endif
42 ifdef WIN_PS_TOOLS
43    fixps = $(subst \,/,$(1))
44    psep = $(subst \\,/,$(subst /,\,$(1)))
45    PS := $(strip \)
46 else
47    fixps = $(1)
48    PS := $(strip /)
49    psep = $(1)
50 endif
51
52 # PREFIXES AND EXTENSIONS
53 .SUFFIXES: .c .ec .sym .imp .o
54 S := .sym
55 I := .imp
56 C := .c
57 O := .o
58 A := .a
59 ifeq "$(PLATFORM)" "win32"
60    E := .exe
61 ifeq "$(TARGET_TYPE)" "staticlib"
62    LP := lib
63 else
64    LP :=
65 endif
66    SO := .dll
67 else
68 ifeq "$(PLATFORM)" "apple"
69    E :=
70    LP := lib
71    SO := .dylib
72 else
73    E :=
74    LP := lib
75    SO := .so
76 endif
77 endif
78
79 # SUPER TOOLS
80 ifdef CCACHE
81    CCACHE_COMPILE := ccache
82 ifdef DISTCC
83    DISTCC_COMPILE := distcc
84 endif
85 else
86 ifdef DISTCC
87    DISTCC_COMPILE := distcc
88 endif
89 endif
90
91 # TOOLCHAIN
92 export CC      = $(CCACHE_COMPILE) $(DISTCC_COMPILE) gcc
93 export CPP     = $(CCACHE_COMPILE) $(DISTCC_COMPILE) cpp
94 export ECP     = ecp
95 export ECC     = ecc
96 export ECS     = ecs
97 export EAR     = ear
98 export AS      = as
99 export LD      = ld
100 export AR      = ar
101 export STRIP   = strip
102 UPX := upx
103
104 # SHELL COMMANDS
105 ifdef WINDOWS
106 ifndef MSYSCON
107    WIN_SHELL_COMMANDS := defined
108 endif
109 endif
110 ifdef WIN_SHELL_COMMANDS
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
126 # COMPILER OPTIONS
127 ifeq "$(TARGET_TYPE)" "sharedlib"
128    ECSLIBOPT := -dynamiclib
129 else
130 ifeq "$(TARGET_TYPE)" "staticlib"
131    ECSLIBOPT := -staticlib
132 else
133    ECSLIBOPT :=
134 endif
135 endif
136 ifdef WINDOWS
137    FVISIBILITY :=
138    FPIC :=
139 ifeq "$(TARGET_TYPE)" "executable"
140    EXECUTABLE := $(CONSOLE)
141 else
142    EXECUTABLE :=
143 endif
144 else
145    FVISIBILITY := -fvisibility=hidden
146    FPIC := -fPIC
147    EXECUTABLE :=
148 endif
149 ifdef OSX
150 ifeq "$(TARGET_TYPE)" "sharedlib"
151    INSTALLNAME := -install_name $(LP)$(MODULE)$(SO)
152 else
153    INSTALLNAME :=
154 endif
155 else
156    INSTALLNAME :=
157 endif
158
159 # LINKER OPTIONS
160 ifdef OSX
161 ifeq "$(TARGET_TYPE)" "sharedlib"
162    SHAREDLIB := -dynamiclib -single_module -multiply_defined suppress
163    LINKOPT :=
164 else
165    SHAREDLIB :=
166    LINKOPT :=
167 endif
168 ifeq "$(TARGET_TYPE)" "sharedlib"
169    STRIPOPT := -x
170 else
171    STRIPOPT := -u -r
172 endif
173 else
174 ifeq "$(TARGET_TYPE)" "sharedlib"
175    SHAREDLIB := -shared
176 else
177    SHAREDLIB :=
178 endif
179    LINKOPT :=
180    STRIPOPT := -x
181 endif
182 ifdef WINDOWS
183    SODESTDIR := obj/$(PLATFORM)/bin/
184 else
185    SODESTDIR := obj/$(PLATFORM)/lib/
186 endif
187
188 # COMMON LIBRARIES DETECTION
189
190 ifdef WINDOWS
191
192 _SSL_CONF = $(call hidspace,$(call fixps,$(OPENSSL_CONF)))
193 _SSL_BIN = $(_SSL_CONF:$(notdir $(_SSL_CONF))=$(empty))
194 OPEN_SSL_INCLUDE_DIR = $(call escspace,$(call shwspace,$(subst /bin,/include,$(_SSL_BIN))))
195 OPEN_SSL_LIB_DIR = $(call escspace,$(call shwspace,$(subst /bin,/lib,$(_SSL_BIN))))
196 OPEN_SSL_BIN_DIR = $(call escspace,$(call shwspace,$(_SSL_BIN)))
197
198 endif