ecere/OS X: Tweaks to get the SDK building for OS X again
[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
22 UNAME_P := $(shell uname -p)
23 ifeq ($(UNAME_P),x86_64)
24   HOST_ARCH = X64
25 else
26 ifneq ($(filter %86,$(UNAME_P)),)
27   HOST_ARCH = X86
28 else
29 ifneq ($(filter arm%,$(UNAME_P)),)
30   HOST_ARCH = ARM
31 endif
32 endif
33 endif
34 endif
35
36 # TARGET_PLATFORM
37 ifndef TARGET_PLATFORM
38 ifdef PLATFORM
39    TARGET_PLATFORM := $(PLATFORM)
40 endif
41 endif
42 ifndef TARGET_PLATFORM
43 ifdef WINDOWS_HOST
44    TARGET_PLATFORM := win32
45 else
46 ifdef OSX_HOST
47    TARGET_PLATFORM := apple
48 else
49 #ifdef BSD_HOST
50 #   TARGET_PLATFORM := bsd
51 #else
52    TARGET_PLATFORM := linux
53 ifdef BSD_HOST
54    BSD_TARGET := defined
55 endif
56 #endif
57 endif
58 endif
59 endif
60 ifndef PLATFORM
61    PLATFORM := $(TARGET_PLATFORM)
62 endif
63 ifeq "$(TARGET_PLATFORM)" "win32"
64    WINDOWS_TARGET := defined
65 else
66 ifeq "$(TARGET_PLATFORM)" "apple"
67    OSX_TARGET := defined
68 else
69 #ifeq "$(TARGET_PLATFORM)" "bsd"
70 #   BSD_TARGET := defined
71 #else
72    LINUX_TARGET := defined
73 #endif
74 endif
75 endif
76
77 # CROSS_TARGET
78 ifneq "$(TARGET_PLATFORM)" "$(HOST_PLATFORM)"
79    CROSS_TARGET := defined
80 endif
81
82 # TARGET_TYPE
83 ifeq "$(TARGET_TYPE)" "staticlib"
84    STATIC_LIBRARY_TARGET := defined
85 else
86 ifeq "$(TARGET_TYPE)" "sharedlib"
87    SHARED_LIBRARY_TARGET := defined
88 else
89 ifeq "$(TARGET_TYPE)" "executable"
90    EXECUTABLE_TARGET := defined
91 endif
92 endif
93 endif
94
95 # DEBUG SUFFIX
96 ifdef DEBUG
97 DEBUG_SUFFIX := .debug
98 endif
99
100 # COMPILER SUFFIX
101 ifdef COMPILER
102 ifneq "$(COMPILER)" "default"
103 COMPILER_SUFFIX := .$(COMPILER)
104 endif
105 endif
106
107 # MISC STRING TOOLS
108 empty :=
109 space := $(empty) $(empty)
110 comma := ,
111 escspace = $(subst $(space),\$(space),$(subst \$(space),$(space),$1))
112 hidspace = $(subst $(space),\7f,$(subst \$(space),\7f,$1))
113 shwspace = $(subst \7f,\$(space),$1)
114
115 # PATH SEPARATOR STRING TOOLS
116 ifdef WINDOWS_HOST
117 ifndef MSYSCON
118    WIN_PS_TOOLS := defined
119 endif
120 endif
121 ifdef WIN_PS_TOOLS
122    fixps = $(subst \,/,$(1))
123    psep = $(subst \\,/,$(subst /,\,$(1)))
124    PS := $(strip \)
125 else
126    fixps = $(1)
127    PS := $(strip /)
128    psep = $(1)
129 endif
130
131 # PREFIXES AND EXTENSIONS
132 .SUFFIXES: .c .ec .sym .imp .bowl .o .a
133 EC := .ec
134 S := .sym
135 I := .imp
136 B := .bowl
137 C := .c
138 O := .o
139 A := .a
140 E := $(if $(WINDOWS_TARGET),.exe,)
141 SO := $(if $(WINDOWS_TARGET),.dll,$(if $(OSX_TARGET),.dylib,.so))
142 LP := $(if $(WINDOWS_TARGET),$(if $(STATIC_LIBRARY_TARGET),lib,),lib)
143 HOST_E := $(if $(WINDOWS_HOST),.exe,)
144 HOST_SO := $(if $(WINDOWS_HOST),.dll,$(if $(OSX_HOST),.dylib,.so))
145 HOST_LP := $(if $(WINDOWS_HOST),$(if $(STATIC_LIBRARY_TARGET),lib,),lib)
146
147 # SUPER TOOLS
148 ifdef CCACHE
149    CCACHE_COMPILE := ccache$(space)
150 ifdef DISTCC
151    DISTCC_COMPILE := distcc$(space)
152 endif
153 else
154 ifdef DISTCC
155    DISTCC_COMPILE := distcc$(space)
156 endif
157 endif
158
159 _CPP = $(if $(findstring $(space),$(CPP)),"$(CPP)",$(CPP))
160
161 _SYSROOT = $(if $(SYSROOT),$(space)--sysroot=$(SYSROOT),)
162
163 # SHELL COMMANDS
164 ifdef WINDOWS_HOST
165 ifndef MSYSCON
166    WIN_SHELL_COMMANDS := defined
167 endif
168 endif
169 ifdef WIN_SHELL_COMMANDS
170    echo = $(if $(1),echo $(1))
171    cpq = $(if $(1),@cmd /c for %%I in ($(call psep,$(1))) do @copy /y %%I $(call psep,$(2)) > nul 2>&1)
172    rmq = $(if $(1),-@del /f /q $(call psep,$(1)) > nul 2>&1)
173    rmrq = $(if $(1),-@rmdir /q /s $(call psep,$(1)) > nul 2>&1)
174    mkdirq = $(if $(1),-@mkdir $(call psep,$(1)) > nul 2>&1)
175    rmdirq = $(if $(1),-@rmdir /q $(call psep,$(1)) > nul 2>&1)
176 else
177    echo = $(if $(1),echo "$(1)")
178    cpq = $(if $(1),@cp $(1) $(2))
179    rmq = $(if $(1),-@rm -f $(1))
180    rmrq = $(if $(1),-@rm -f -r $(1))
181    mkdirq = $(if $(1),-@mkdir -p $(1))
182    rmdirq = $(if $(1),-@rmdir $(1))
183 endif
184
185 # COMPILER OPTIONS
186 ECSLIBOPT := $(if $(STATIC_LIBRARY_TARGET),-staticlib,$(if $(SHARED_LIBRARY_TARGET),-dynamiclib,))
187 FVISIBILITY := $(if $(WINDOWS_TARGET),,-fvisibility=hidden)
188 FPIC := $(if $(WINDOWS_TARGET),,-fPIC)
189 EXECUTABLE := $(if $(WINDOWS_TARGET),$(if $(EXECUTABLE_TARGET),$(CONSOLE),),)
190 INSTALLNAME := $(if $(OSX_TARGET),$(if $(STATIC_LIBRARY_TARGET),-install_name $(LP)$(MODULE)$(SO),),)
191
192 # LINKER OPTIONS
193 SHAREDLIB := $(if $(SHARED_LIBRARY_TARGET),$(if $(OSX_TARGET),-dynamiclib -single_module -multiply_defined suppress,-shared),)
194 LINKOPT :=
195 STRIPOPT := $(if $(OSX_TARGET),$(if $(SHARED_LIBRARY_TARGET),-x, -u -r), -x --strip-unneeded --remove-section=.comment --remove-section=.note)
196 HOST_SODESTDIR := $(if $(WINDOWS_HOST),obj/$(HOST_PLATFORM)/bin/,obj/$(HOST_PLATFORM)/lib/)
197 SODESTDIR := $(if $(WINDOWS_TARGET),obj/$(TARGET_PLATFORM)/bin/,obj/$(TARGET_PLATFORM)/lib/)
198
199 # EXCLUDED_LIBS TOOL
200 _L = $(if $(filter $(1),$(EXCLUDED_LIBS)),,-l$(1))
201
202 # DEBIAN
203 ifdef DEBIAN_PACKAGE
204 CFLAGS += $(CPPFLAGS)
205 endif
206
207 ifdef DEBUG
208 CFLAGS += -D_DEBUG
209 endif
210
211 # COMMON LIBRARIES DETECTION
212 ifdef WINDOWS_TARGET
213 ifdef OPENSSL_CONF
214 _OPENSSL_CONF = $(call hidspace,$(call fixps,$(OPENSSL_CONF)))
215 OPENSSL_INCLUDE_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/include,$(_OPENSSL_CONF)))
216 OPENSSL_LIB_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/lib,$(_OPENSSL_CONF)))
217 OPENSSL_BIN_DIR = $(call shwspace,$(subst /bin/openssl.cfg,/bin,$(_OPENSSL_CONF)))
218 else
219 # to avoid issues with empty -L/-I
220 OPENSSL_INCLUDE_DIR = .
221 OPENSSL_LIB_DIR = .
222 OPENSSL_BIN_DIR = .
223 endif
224 else
225 OFLAGS += -L/usr/lib/ec
226 endif