Build System: Fixed linking issues with SQLiteCipher occurring when OPENSSL_CONF...
[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 ifdef COMPILER
35 ifneq "$(COMPILER)" "default"
36 COMPILER_SUFFIX := .$(COMPILER)
37 endif
38 endif
39
40 # MISC STRING TOOLS
41 empty :=
42 space := $(empty) $(empty)
43 escspace = $(subst $(space),\$(space),$(subst \$(space),$(space),$1))
44 hidspace = $(subst $(space),\7f,$(subst \$(space),\7f,$1))
45 shwspace = $(subst \7f,\$(space),$1)
46
47 # PATH SEPARATOR STRING TOOLS
48 ifdef WINDOWS
49 ifndef MSYSCON
50    WIN_PS_TOOLS := defined
51 endif
52 endif
53 ifdef WIN_PS_TOOLS
54    fixps = $(subst \,/,$(1))
55    psep = $(subst \\,/,$(subst /,\,$(1)))
56    PS := $(strip \)
57 else
58    fixps = $(1)
59    PS := $(strip /)
60    psep = $(1)
61 endif
62
63 # PREFIXES AND EXTENSIONS
64 .SUFFIXES: .c .ec .sym .imp .bowl .o .a
65 EC := .ec
66 S := .sym
67 I := .imp
68 B := .bowl
69 C := .c
70 O := .o
71 A := .a
72 ifeq "$(PLATFORM)" "win32"
73    E := .exe
74 ifeq "$(TARGET_TYPE)" "staticlib"
75    LP := lib
76 else
77    LP :=
78 endif
79    SO := .dll
80 else
81 ifeq "$(PLATFORM)" "apple"
82    E :=
83    LP := lib
84    SO := .dylib
85 else
86    E :=
87    LP := lib
88    SO := .so
89 endif
90 endif
91
92 # SUPER TOOLS
93 ifdef CCACHE
94    CCACHE_COMPILE := ccache
95 ifdef DISTCC
96    DISTCC_COMPILE := distcc
97 endif
98 else
99 ifdef DISTCC
100    DISTCC_COMPILE := distcc
101 endif
102 endif
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 ifdef OPENSSL_CONF
193 _OPENSSL_CONF = $(call hidspace,$(call fixps,$(OPENSSL_CONF)))
194 OPENSSL_INCLUDE_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/include,$(_OPENSSL_CONF)))
195 OPENSSL_LIB_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/lib,$(_OPENSSL_CONF)))
196 OPENSSL_BIN_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/bin,$(_OPENSSL_CONF)))
197 else
198 # To avoid confusion with empty -L/-I
199 OPENSSL_INCLUDE_DIR = .
200 OPENSSL_LIB_DIR = .
201 OPENSSL_BIN_DIR = .
202 endif
203
204 endif