ide; fixed FileCompile menu entry for ProjectView's right-click menu isn't updated...
[sdk] / crossplatform.mk
1 # HOST PLATFORM DETECTION
2 ifeq "$(OS)" "Windows_NT"
3    HOST_PLATFORM := win32
4    WINDOWS_HOST := defined
5 else
6 ifeq "$(OSTYPE)" "FreeBSD"
7 # tocheck: temporarily using linux when on bsd
8 #   HOST_PLATFORM := bsd
9 #   BSD_HOST := defined
10    HOST_PLATFORM := linux
11    LINUX_HOST := defined
12 else
13 ifeq "$(shell uname)" "Darwin"
14    HOST_PLATFORM := apple
15    OSX_HOST := defined
16 else
17    HOST_PLATFORM := linux
18    LINUX_HOST := defined
19 endif
20 endif
21 endif
22
23 # TARGET_PLATFORM
24 ifndef TARGET_PLATFORM
25 ifdef PLATFORM
26    TARGET_PLATFORM := $(PLATFORM)
27 endif
28 endif
29 ifndef TARGET_PLATFORM
30 ifdef WINDOWS_HOST
31    TARGET_PLATFORM := win32
32 else
33 ifdef OSX_HOST
34    TARGET_PLATFORM := apple
35 else
36 ifdef BSD_HOST
37    TARGET_PLATFORM := bsd
38 else
39    TARGET_PLATFORM := linux
40 endif
41 endif
42 endif
43 endif
44 ifndef PLATFORM
45    PLATFORM := $(TARGET_PLATFORM)
46 endif
47 ifeq "$(TARGET_PLATFORM)" "win32"
48    WINDOWS_TARGET := defined
49 else
50 ifeq "$(TARGET_PLATFORM)" "apple"
51    OSX_TARGET := defined
52 else
53 ifeq "$(TARGET_PLATFORM)" "bsd"
54    BSD_TARGET := defined
55 else
56    LINUX_TARGET := defined
57 endif
58 endif
59 endif
60
61 # DEBUG SUFFIX
62 ifdef DEBUG
63 DEBUG_SUFFIX := .debug
64 endif
65
66 ifdef COMPILER
67 ifneq "$(COMPILER)" "default"
68 COMPILER_SUFFIX := .$(COMPILER)
69 endif
70 endif
71
72 # MISC STRING TOOLS
73 empty :=
74 space := $(empty) $(empty)
75 escspace = $(subst $(space),\$(space),$(subst \$(space),$(space),$1))
76 hidspace = $(subst $(space),\7f,$(subst \$(space),\7f,$1))
77 shwspace = $(subst \7f,\$(space),$1)
78
79 # PATH SEPARATOR STRING TOOLS
80 ifdef WINDOWS_HOST
81 ifndef MSYSCON
82    WIN_PS_TOOLS := defined
83 endif
84 endif
85 ifdef WIN_PS_TOOLS
86    fixps = $(subst \,/,$(1))
87    psep = $(subst \\,/,$(subst /,\,$(1)))
88    PS := $(strip \)
89 else
90    fixps = $(1)
91    PS := $(strip /)
92    psep = $(1)
93 endif
94
95 # PREFIXES AND EXTENSIONS
96 .SUFFIXES: .c .ec .sym .imp .bowl .o .a
97 EC := .ec
98 S := .sym
99 I := .imp
100 B := .bowl
101 C := .c
102 O := .o
103 A := .a
104 ifdef WINDOWS_TARGET
105    E := .exe
106 ifeq "$(TARGET_TYPE)" "staticlib"
107    LP := lib
108 else
109    LP :=
110 endif
111    SO := .dll
112 else
113 ifdef OSX_TARGET
114    E :=
115    LP := lib
116    SO := .dylib
117 else
118    E :=
119    LP := lib
120    SO := .so
121 endif
122 endif
123
124 # SUPER TOOLS
125 ifdef CCACHE
126    CCACHE_COMPILE := ccache
127 ifdef DISTCC
128    DISTCC_COMPILE := distcc
129 endif
130 else
131 ifdef DISTCC
132    DISTCC_COMPILE := distcc
133 endif
134 endif
135
136 # SHELL COMMANDS
137 ifdef WINDOWS_HOST
138 ifndef MSYSCON
139    WIN_SHELL_COMMANDS := defined
140 endif
141 endif
142 ifdef WIN_SHELL_COMMANDS
143    echo = $(if $(1),echo $(1))
144    cpq = $(if $(1),@cmd /c for %%I in ($(call psep,$(1))) do @copy /y %%I $(call psep,$(2)) > nul 2>&1)
145    rmq = $(if $(1),-@del /f /q $(call psep,$(1)) > nul 2>&1)
146    rmrq = $(if $(1),-@rmdir /q /s $(call psep,$(1)) > nul 2>&1)
147    mkdirq = $(if $(1),-@mkdir $(call psep,$(1)) > nul 2>&1)
148    rmdirq = $(if $(1),-@rmdir /q $(call psep,$(1)) > nul 2>&1)
149 else
150    echo = $(if $(1),echo "$(1)")
151    cpq = $(if $(1),@cp $(1) $(2))
152    rmq = $(if $(1),-@rm -f $(1))
153    rmrq = $(if $(1),-@rm -f -r $(1))
154    mkdirq = $(if $(1),-@mkdir -p $(1))
155    rmdirq = $(if $(1),-@rmdir $(1))
156 endif
157
158 # COMPILER OPTIONS
159 ifeq "$(TARGET_TYPE)" "sharedlib"
160    ECSLIBOPT := -dynamiclib
161 else
162 ifeq "$(TARGET_TYPE)" "staticlib"
163    ECSLIBOPT := -staticlib
164 else
165    ECSLIBOPT :=
166 endif
167 endif
168 ifdef WINDOWS_TARGET
169    FVISIBILITY :=
170    FPIC :=
171 ifeq "$(TARGET_TYPE)" "executable"
172    EXECUTABLE := $(CONSOLE)
173 else
174    EXECUTABLE :=
175 endif
176 else
177    FVISIBILITY := -fvisibility=hidden
178    FPIC := -fPIC
179    EXECUTABLE :=
180 endif
181 ifdef OSX
182 ifeq "$(TARGET_TYPE)" "sharedlib"
183    INSTALLNAME := -install_name $(LP)$(MODULE)$(SO)
184 else
185    INSTALLNAME :=
186 endif
187 else
188    INSTALLNAME :=
189 endif
190
191 # LINKER OPTIONS
192 ifdef OSX
193 ifeq "$(TARGET_TYPE)" "sharedlib"
194    SHAREDLIB := -dynamiclib -single_module -multiply_defined suppress
195    LINKOPT :=
196 else
197    SHAREDLIB :=
198    LINKOPT :=
199 endif
200 ifeq "$(TARGET_TYPE)" "sharedlib"
201    STRIPOPT := -x
202 else
203    STRIPOPT := -u -r
204 endif
205 else
206 ifeq "$(TARGET_TYPE)" "sharedlib"
207    SHAREDLIB := -shared
208 else
209    SHAREDLIB :=
210 endif
211    LINKOPT :=
212    STRIPOPT := -x --strip-unneeded --remove-section=.comment --remove-section=.note
213 endif
214 ifdef WINDOWS_TARGET
215    SODESTDIR := obj/$(TARGET_PLATFORM)/bin/
216 else
217    SODESTDIR := obj/$(TARGET_PLATFORM)/lib/
218 endif
219
220 _L = $(if $(filter $(1),$(EXCLUDED_LIBS)),,-l$(1))
221
222 # COMMON LIBRARIES DETECTION
223
224 ifdef WINDOWS_TARGET
225
226 ifdef OPENSSL_CONF
227 _OPENSSL_CONF = $(call hidspace,$(call fixps,$(OPENSSL_CONF)))
228 OPENSSL_INCLUDE_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/include,$(_OPENSSL_CONF)))
229 OPENSSL_LIB_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/lib,$(_OPENSSL_CONF)))
230 OPENSSL_BIN_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/bin,$(_OPENSSL_CONF)))
231 else
232 # to avoid issues with empty -L/-I
233 OPENSSL_INCLUDE_DIR = .
234 OPENSSL_LIB_DIR = .
235 OPENSSL_BIN_DIR = .
236 endif
237
238 else
239
240 OFLAGS += -L/usr/lib/ec
241
242 endif