ide/Compiler Configs: Added predefined DEBUG_SUFFIX variable when DEBUG is set for...
[sdk] / crossplatform.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 # DEBUG SUFFIX
30 ifdef DEBUG
31 DEBUG_SUFFIX := .debug
32 endif
33
34 # MISC STRING TOOLS
35 empty :=
36 space := $(empty) $(empty)
37 escspace = $(subst $(space),\$(space),$(subst \$(space),$(space),$1))
38 hidspace = $(subst $(space),\7f,$(subst \$(space),\7f,$1))
39 shwspace = $(subst \7f,\$(space),$1)
40
41 # PATH SEPARATOR STRING TOOLS
42 ifdef WINDOWS
43 ifndef MSYSCON
44    WIN_PS_TOOLS := defined
45 endif
46 endif
47 ifdef WIN_PS_TOOLS
48    fixps = $(subst \,/,$(1))
49    psep = $(subst \\,/,$(subst /,\,$(1)))
50    PS := $(strip \)
51 else
52    fixps = $(1)
53    PS := $(strip /)
54    psep = $(1)
55 endif
56
57 # PREFIXES AND EXTENSIONS
58 .SUFFIXES: .ec .pec .sym .imp .c .o .a
59 P := .pec
60 EC := .ec
61 S := .sym
62 I := .imp
63 C := .c
64 O := .o
65 A := .a
66 ifeq "$(PLATFORM)" "win32"
67    E := .exe
68 ifeq "$(TARGET_TYPE)" "staticlib"
69    LP := lib
70 else
71    LP :=
72 endif
73    SO := .dll
74 else
75 ifeq "$(PLATFORM)" "apple"
76    E :=
77    LP := lib
78    SO := .dylib
79 else
80    E :=
81    LP := lib
82    SO := .so
83 endif
84 endif
85
86 # SUPER TOOLS
87 ifdef CCACHE
88    CCACHE_COMPILE := ccache
89 ifdef DISTCC
90    DISTCC_COMPILE := distcc
91 endif
92 else
93 ifdef DISTCC
94    DISTCC_COMPILE := distcc
95 endif
96 endif
97
98 # SHELL COMMANDS
99 ifdef WINDOWS
100 ifndef MSYSCON
101    WIN_SHELL_COMMANDS := defined
102 endif
103 endif
104 ifdef WIN_SHELL_COMMANDS
105    echo = $(if $(1),echo $(1))
106    cpq = $(if $(1),@cmd /c for %%I in ($(call psep,$(1))) do @copy /y %%I $(call psep,$(2)) > nul 2>&1)
107    rmq = $(if $(1),-@del /f /q $(call psep,$(1)) > nul 2>&1)
108    rmrq = $(if $(1),-@rmdir /q /s $(call psep,$(1)) > nul 2>&1)
109    mkdirq = $(if $(1),-@mkdir $(call psep,$(1)) > nul 2>&1)
110    rmdirq = $(if $(1),-@rmdir /q $(call psep,$(1)) > nul 2>&1)
111 else
112    echo = $(if $(1),echo "$(1)")
113    cpq = $(if $(1),@cp $(1) $(2))
114    rmq = $(if $(1),-@rm -f $(1))
115    rmrq = $(if $(1),-@rm -f -r $(1))
116    mkdirq = $(if $(1),-@mkdir -p $(1))
117    rmdirq = $(if $(1),-@rmdir $(1))
118 endif
119
120 # COMPILER OPTIONS
121 ifeq "$(TARGET_TYPE)" "sharedlib"
122    ECSLIBOPT := -dynamiclib
123 else
124 ifeq "$(TARGET_TYPE)" "staticlib"
125    ECSLIBOPT := -staticlib
126 else
127    ECSLIBOPT :=
128 endif
129 endif
130 ifdef WINDOWS
131    FVISIBILITY :=
132    FPIC :=
133 ifeq "$(TARGET_TYPE)" "executable"
134    EXECUTABLE = $(CONSOLE)
135 else
136    EXECUTABLE =
137 endif
138 else
139    FVISIBILITY := -fvisibility=hidden
140    FPIC := -fPIC
141    EXECUTABLE :=
142 endif
143 ifdef OSX
144 ifeq "$(TARGET_TYPE)" "sharedlib"
145    INSTALLNAME := -install_name $(LP)$(MODULE)$(SO)
146 else
147    INSTALLNAME :=
148 endif
149 else
150    INSTALLNAME :=
151 endif
152
153 # LINKER OPTIONS
154 ifdef OSX
155 ifeq "$(TARGET_TYPE)" "sharedlib"
156    SHAREDLIB := -dynamiclib -single_module -multiply_defined suppress
157    LINKOPT :=
158 else
159    SHAREDLIB :=
160    LINKOPT :=
161 endif
162 ifeq "$(TARGET_TYPE)" "sharedlib"
163    STRIPOPT := -x
164 else
165    STRIPOPT := -u -r
166 endif
167 else
168 ifeq "$(TARGET_TYPE)" "sharedlib"
169    SHAREDLIB := -shared
170 else
171    SHAREDLIB :=
172 endif
173    LINKOPT :=
174    STRIPOPT := -x
175 endif
176 ifdef WINDOWS
177    SODESTDIR := obj/$(PLATFORM)/bin/
178 else
179    SODESTDIR := obj/$(PLATFORM)/lib/
180 endif
181
182 # COMMON LIBRARIES DETECTION
183
184 ifdef WINDOWS
185
186 ifdef OPENSSL_CONF
187 _OPENSSL_CONF = $(call hidspace,$(call fixps,$(OPENSSL_CONF)))
188 OPENSSL_INCLUDE_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/include,$(_OPENSSL_CONF)))
189 OPENSSL_LIB_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/lib,$(_OPENSSL_CONF)))
190 OPENSSL_BIN_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/bin,$(_OPENSSL_CONF)))
191 endif
192
193 endif