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