source: mainline/uspace/Makefile.common@ 1dcc0b9

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 1dcc0b9 was 1dcc0b9, checked in by Jan Kolarik <kolarik@…>, 11 years ago

Scanning whole 2.4GHz spectrum, created supplicant for managing connection between device STA and AP, finished association process between STA and AP, handling 4way handshake protocol used for key management, written needed cryptographic algorithms (AES, SHA1, HMAC, PBKDF2) for CCMP protocol, data communication on OPEN/CCMP networks.

  • Property mode set to 100644
File size: 12.3 KB
Line 
1#
2# Copyright (c) 2005 Martin Decky
3# Copyright (c) 2007 Jakub Jermar
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9#
10# - Redistributions of source code must retain the above copyright
11# notice, this list of conditions and the following disclaimer.
12# - Redistributions in binary form must reproduce the above copyright
13# notice, this list of conditions and the following disclaimer in the
14# documentation and/or other materials provided with the distribution.
15# - The name of the author may not be used to endorse or promote products
16# derived from this software without specific prior written permission.
17#
18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28#
29
30# Individual makefiles set:
31#
32# USPACE_PREFIX (*) relative path to uspace/ directory
33# SOURCES (*) list of source files
34# LIBS libraries to link with
35# DEFS compiler defines
36# EXTRA_CFLAGS additional flags to pass to C compiler
37# LINKER_SCRIPT linker script
38# PRE_DEPEND targets required for dependency check
39#
40# BINARY (/) binary output name (like appname)
41# LIBRARY (/) library output name (like libname)
42#
43# EXTRA_OUTPUT additional output targets
44# EXTRA_CLEAN additional cleanup targets
45#
46# MATH set to 'y' to use the math library
47# POSIX_COMPAT set to 'y' to use POSIX compatibility layer
48#
49# Optionally, for a binary:
50# STATIC_NEEDED set to 'y' for init binaries, will build statically
51# linked version
52# STATIC_ONLY set to 'y' if binary cannot be linked dynamically
53# (e.g. uses thread-local variables)
54#
55# Optionally, for a libary:
56# SLIBRARY Name with full version, e.g. libfoo.so.0.0
57# LSONAME Soname / name with short version, e.g. libfoo.so.0
58#
59# (x) required variables
60# (/) exactly one of the variables must be defined
61#
62
63ROOT_PATH = $(USPACE_PREFIX)/..
64
65VERSION_DEF = $(ROOT_PATH)/version
66
67COMMON_MAKEFILE = $(ROOT_PATH)/Makefile.common
68COMMON_HEADER = $(ROOT_PATH)/common.h
69
70CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config
71CONFIG_HEADER = $(ROOT_PATH)/config.h
72
73-include $(VERSION_DEF)
74-include $(COMMON_MAKEFILE)
75-include $(CONFIG_MAKEFILE)
76
77ifneq ($(BINARY),)
78 JOB = $(BINARY).job
79 OUTPUT = $(BINARY)
80 TEST_BINARY = test-$(BINARY)
81 EXTRA_OUTPUT += $(BINARY).disasm
82 EXTRA_CLEAN += $(BINARY).map
83endif
84
85ifneq ($(LIBRARY),)
86 JOB = $(LIBRARY).job
87 OUTPUT = $(LIBRARY).a
88 TEST_BINARY = test-$(LIBRARY)
89endif
90
91ifeq ($(CONFIG_BUILD_SHARED_LIBS),y)
92 ifneq ($(SLIBRARY),)
93 LARCHIVE = $(LIBRARY).la
94 LOUTPUT = $(SLIBRARY)
95 EXTRA_OUTPUT += $(LOUTPUT).disasm $(LIBRARY).so $(LSONAME)
96 EXTRA_CLEAN += $(LOUTPUT).map $(LOUTPUT).ldisasm \
97 $(LIBC_PREFIX)/shared/arch/$(UARCH)/_lib.ld \
98 $(LIBRARY).so $(LSONAME)
99 endif
100endif
101
102DEPEND = Makefile.depend
103DEPEND_PREV = $(DEPEND).prev
104
105LIB_PREFIX = $(USPACE_PREFIX)/lib
106
107LIBC_PREFIX = $(LIB_PREFIX)/c
108LIBC_INCLUDES_FLAGS = \
109 -I$(LIBC_PREFIX)/include \
110 -I$(LIBC_PREFIX)/arch/$(UARCH)/include \
111 -I$(ROOT_PATH)/abi/include
112LIBSOFTFLOAT_PREFIX = $(LIB_PREFIX)/softfloat
113LIBSOFTINT_PREFIX = $(LIB_PREFIX)/softint
114
115LIBMATH_PREFIX = $(LIB_PREFIX)/math
116LIBMATH_INCLUDES_FLAGS = \
117 -I$(LIBMATH_PREFIX)/include \
118 -I$(LIBMATH_PREFIX)/arch/$(UARCH)/include
119
120LIBPOSIX_PREFIX = $(LIB_PREFIX)/posix
121
122LIBCRYPTO_PREFIX = $(LIB_PREFIX)/crypto
123LIBBLOCK_PREFIX = $(LIB_PREFIX)/block
124LIBFS_PREFIX = $(LIB_PREFIX)/fs
125LIBCLUI_PREFIX = $(LIB_PREFIX)/clui
126LIBFMTUTIL_PREFIX = $(LIB_PREFIX)/fmtutil
127
128LIBGRAPH_PREFIX = $(LIB_PREFIX)/graph
129LIBSOFTREND_PREFIX = $(LIB_PREFIX)/softrend
130LIBDRAW_PREFIX = $(LIB_PREFIX)/draw
131LIBGUI_PREFIX = $(LIB_PREFIX)/gui
132
133LIBEXT4_PREFIX = $(LIB_PREFIX)/ext4
134
135LIBUSB_PREFIX = $(LIB_PREFIX)/usb
136LIBUSBHOST_PREFIX = $(LIB_PREFIX)/usbhost
137LIBUSBDEV_PREFIX = $(LIB_PREFIX)/usbdev
138LIBUSBHID_PREFIX = $(LIB_PREFIX)/usbhid
139LIBUSBVIRT_PREFIX = $(LIB_PREFIX)/usbvirt
140
141LIBDRV_PREFIX = $(LIB_PREFIX)/drv
142LIBHOUND_PREFIX = $(LIB_PREFIX)/hound
143LIBPCM_PREFIX = $(LIB_PREFIX)/pcm
144LIBNET_PREFIX = $(LIB_PREFIX)/net
145LIBNIC_PREFIX = $(LIB_PREFIX)/nic
146LIBIEEE80211_PREFIX = $(LIB_PREFIX)/ieee80211
147LIBMINIX_PREFIX = $(LIB_PREFIX)/minix
148LIBCOMPRESS_PREFIX = $(LIB_PREFIX)/compress
149
150LIBSCSI_PREFIX = $(LIB_PREFIX)/scsi
151LIBTRACKMOD_PREFIX = $(LIB_PREFIX)/trackmod
152
153LIBBITHENGE_PREFIX = $(LIB_PREFIX)/bithenge
154
155LIBHTTP_PREFIX = $(LIB_PREFIX)/http
156LIBURI_PREFIX = $(LIB_PREFIX)/uri
157
158LIBMBR_PREFIX = $(LIB_PREFIX)/mbr
159LIBGPT_PREFIX = $(LIB_PREFIX)/gpt
160
161LIBURCU_PREFIX = $(LIB_PREFIX)/urcu
162
163ifeq ($(STATIC_NEEDED),y)
164 STATIC_BUILD = y
165else
166 ifeq ($(STATIC_ONLY),y)
167 STATIC_BUILD = y
168 else
169 ifeq ($(CONFIG_USE_SHARED_LIBS),y)
170 STATIC_BUILD = n
171 else
172 STATIC_BUILD = y
173 endif
174 endif
175endif
176
177# Build static whenever we use libusb because that library uses
178# thread local variables
179ifneq ($(findstring usb, $(LIBS)),)
180 STATIC_BUILD = y
181endif
182
183ifeq ($(STATIC_BUILD),y)
184 BASE_LIBS = $(LIBC_PREFIX)/libc.a $(LIBSOFTINT_PREFIX)/libsoftint.a
185 LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld
186 ifeq ($(MATH),y)
187 BASE_LIBS += $(LIBMATH_PREFIX)/libmath.a
188 endif
189else
190 BASE_LIBS = $(LIBC_PREFIX)/libc.so0 $(LIBSOFTINT_PREFIX)/libsofti.so0
191 LFLAGS = -Bdynamic
192 LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld
193 ifeq ($(MATH),y)
194 BASE_LIBS += $(LIBMATH_PREFIX)/libmath.so0
195 endif
196endif
197
198ifeq ($(MATH),y)
199 INCLUDES_FLAGS = $(LIBC_INCLUDES_FLAGS) $(LIBMATH_INCLUDES_FLAGS)
200else
201 INCLUDES_FLAGS = $(LIBC_INCLUDES_FLAGS)
202endif
203
204ifeq ($(CONFIG_OPTIMIZE_FOR_SIZE),y)
205 OPTIMIZATION = s
206else
207 OPTIMIZATION = 3
208endif
209
210# PCUT-based unit tests
211ifneq ($(TEST_SOURCES),)
212 TEST_OUTPUT = $(TEST_BINARY)
213 TEST_CFLAGS = -I$(LIB_PREFIX)/pcut/include -D__helenos__
214 TEST_OUTPUT_LIBS = $(LIB_PREFIX)/pcut/libpcut.a
215 EXTRA_CLEAN += $(TEST_OUTPUT) $(TEST_OUTPUT).map
216ifneq ($(LIBRARY),)
217 TEST_OUTPUT_LIBS += $(OUTPUT)
218endif
219 TEST_OUTPUT_LIBS += $(TEST_LIBS)
220endif
221
222.PHONY: all clean
223
224all: $(VERSION_DEF) $(COMMON_MAKEFILE) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) $(LIBS) $(OUTPUT) $(LOUTPUT) $(EXTRA_OUTPUT)
225 -[ -f $(DEPEND) ] && cp -a $(DEPEND) $(DEPEND_PREV)
226
227all-test: $(TEST_OUTPUT)
228
229clean:
230 rm -f $(DEPEND) $(DEPEND_PREV) $(JOB) $(OUTPUT) $(LARCHIVE) $(LOUTPUT) $(EXTRA_OUTPUT) $(EXTRA_CLEAN)
231 find . -name '*.o' -follow -exec rm \{\} \;
232 find . -name '*.lo' -follow -exec rm \{\} \;
233
234GCC_CFLAGS = $(INCLUDES_FLAGS) -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
235 -fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
236 -finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
237 -Wall -Wextra -Wno-clobbered -Wno-unused-parameter -Wmissing-prototypes \
238 -std=gnu99 -Werror-implicit-function-declaration -Wwrite-strings \
239 -pipe -ggdb -D__$(ENDIANESS)__
240
241ICC_CFLAGS = $(INCLUDES_FLAGS) -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
242 -fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
243 -finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
244 -Wall -Wextra -Wno-clobbered -Wno-unused-parameter -Wmissing-prototypes \
245 -Werror-implicit-function-declaration -Wwrite-strings \
246 -pipe -g -D__$(ENDIANESS)__
247
248# clang does not support following options but I am not sure whether
249# something won't break because of that:
250# -fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) -finput-charset=UTF-8
251CLANG_CFLAGS = $(LIBC_INCLUDES_FLAGS) -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
252 -ffreestanding -fno-builtin -nostdlib -nostdinc \
253 -Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes \
254 -Werror-implicit-function-declaration -Wwrite-strings \
255 -integrated-as \
256 -pipe -g -target $(CLANG_TARGET) -D__$(ENDIANESS)__
257
258LIB_CFLAGS = $(CFLAGS) -fPIC -D__IN_SHARED_LIBC__
259LIB_LFLAGS = $(LFLAGS) -shared -soname $(LSONAME) --whole-archive
260
261ifeq ($(CONFIG_DEBUG),y)
262 GCC_CFLAGS += -Werror
263 ICC_CFLAGS += -Werror
264endif
265
266ifeq ($(CONFIG_LINE_DEBUG),y)
267 GCC_CFLAGS += -g
268 ICC_CFLAGS += -g
269 CLANG_CFLAGS += -g
270endif
271
272# Prepare for POSIX before including platform specific stuff
273ifeq ($(POSIX_COMPAT),y)
274 CFLAGS = -I$(LIBPOSIX_PREFIX)/include/posix -I$(LIBPOSIX_PREFIX)/include/
275 BASE_LIBS = $(LIBPOSIX_PREFIX)/libposixaslibc.a $(LIBPOSIX_PREFIX)/libc4posix.a $(LIBSOFTINT_PREFIX)/libsoftint.a
276endif
277
278## Setup platform configuration
279#
280
281-include $(LIBC_PREFIX)/arch/$(UARCH)/Makefile.common
282
283## Compilation options
284#
285
286JOBFILE = $(LIBC_PREFIX)/../../../tools/jobfile.py
287
288ifeq ($(FUTEX_UPGRADABLE),y)
289 CFLAGS += -I$(LIBURCU_PREFIX)/
290 LIBS += $(LIBURCU_PREFIX)/liburcu.a
291endif
292
293ifeq ($(COMPILER),gcc_cross)
294 CFLAGS += $(GCC_CFLAGS) $(EXTRA_CFLAGS)
295 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
296endif
297
298ifeq ($(COMPILER),gcc_helenos)
299 CFLAGS += $(GCC_CFLAGS) $(EXTRA_CFLAGS)
300 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
301endif
302
303ifeq ($(COMPILER),gcc_native)
304 CFLAGS += $(GCC_CFLAGS) $(EXTRA_CFLAGS)
305 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
306endif
307
308ifeq ($(COMPILER),icc)
309 CFLAGS += $(ICC_CFLAGS) $(EXTRA_CFLAGS)
310 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
311endif
312
313ifeq ($(COMPILER),clang)
314 CFLAGS += $(CLANG_CFLAGS) $(EXTRA_CFLAGS)
315 GCC_CFLAGS += $(EXTRA_CFLAGS)
316 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
317endif
318
319-include $(DEPEND)
320
321OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
322LOBJECTS := $(addsuffix .lo,$(basename $(SOURCES)))
323TEST_OBJECTS := $(addsuffix .test.o,$(basename $(TEST_SOURCES)))
324
325ifneq ($(BINARY),)
326%.disasm: $(BINARY)
327ifeq ($(CONFIG_LINE_DEBUG),y)
328 $(OBJDUMP) -d -S $< > $@
329else
330 $(OBJDUMP) -d $< > $@
331endif
332
333$(BINARY): $(LINKER_SCRIPT) $(OBJECTS) $(LIBS) $(BASE_LIBS)
334 $(LD) -n $(LFLAGS) -T $(LINKER_SCRIPT) -M -Map $(BINARY).map -o $(BINARY) $(OBJECTS) $(LIBS) $(BASE_LIBS)
335ifeq ($(CONFIG_STRIP_BINARIES),y)
336 $(STRIP) $(BINARY)
337endif
338endif
339
340ifneq ($(SLIBRARY),)
341%.disasm: $(LOUTPUT)
342ifeq ($(CONFIG_LINE_DEBUG),y)
343 $(OBJDUMP) -d -S $< > $@
344else
345 $(OBJDUMP) -d $< > $@
346endif
347
348$(LOUTPUT): $(LARCHIVE) $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld
349 $(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld $(LIB_LFLAGS) $(LARCHIVE) -o $@ -Map $(LOUTPUT).map
350
351$(LIBRARY).so:
352 ln -s $(SLIBRARY) $@
353
354$(LSONAME):
355 ln -s $(SLIBRARY) $@
356endif
357
358ifneq ($(LIBRARY),)
359%.a: $(OBJECTS)
360 $(AR) rc $@ $(OBJECTS)
361endif
362
363ifneq ($(SLIBRARY),)
364%.la: $(LOBJECTS)
365 $(AR) rc $@ $(LOBJECTS)
366endif
367
368ifneq ($(TEST_OUTPUT),)
369$(TEST_OUTPUT): $(LINKER_SCRIPT) $(TEST_OBJECTS) $(TEST_OUTPUT_LIBS)
370 $(LD) -n $(LFLAGS) -T $(LINKER_SCRIPT) -M -Map $(TEST_OUTPUT).map -o $@ $(TEST_OBJECTS) $(TEST_OUTPUT_LIBS) $(LIBS) $(BASE_LIBS)
371ifeq ($(CONFIG_STRIP_BINARIES),y)
372 $(STRIP) $(TEST_OUTPUT)
373endif
374endif
375
376%.o: %.S $(DEPEND)
377 $(GCC) $(DEFS) $(GCC_CFLAGS) -D__ASM__ -c $< -o $@
378ifeq ($(PRECHECK),y)
379 $(JOBFILE) $(JOB) $< $@ as asm/preproc $(DEFS) $(CFLAGS) -D__ASM__
380endif
381
382%.o: %.s $(DEPEND)
383 $(AS) $(AFLAGS) -o $@ $<
384ifeq ($(PRECHECK),y)
385 $(JOBFILE) $(JOB) $< $@ as asm
386endif
387
388%.o: %.c $(DEPEND)
389 $(CC) $(DEFS) $(CFLAGS) -c $< -o $@
390ifeq ($(PRECHECK),y)
391 $(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS)
392endif
393
394%.test.o: %.c $(DEPEND)
395 $(CC) $(DEFS) $(CFLAGS) $(TEST_CFLAGS) -c $< -o $@
396ifeq ($(PRECHECK),y)
397 $(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS)
398endif
399
400%.lo: %.S $(DEPEND)
401 $(CC) $(DEFS) $(LIB_CFLAGS) -D__ASM__ -c $< -o $@
402ifeq ($(PRECHECK),y)
403 $(JOBFILE) $(JOB) $< $@ as asm/preproc $(DEFS) $(CFLAGS) -D__ASM__
404endif
405
406%.lo: %.s $(DEPEND)
407 $(AS) $(AFLAGS) -o $@ $<
408ifeq ($(PRECHECK),y)
409 $(JOBFILE) $(JOB) $< $@ as asm
410endif
411
412%.lo: %.c $(DEPEND)
413 $(CC) $(DEFS) $(LIB_CFLAGS) -c $< -o $@
414ifeq ($(PRECHECK),y)
415 $(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS)
416endif
417
418$(DEPEND): $(PRE_DEPEND)
419 makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(SOURCES) $(TEST_SOURCES) > $@ 2> /dev/null
420 -[ -f $(DEPEND_PREV) ] && diff -q $(DEPEND_PREV) $@ && mv -f $(DEPEND_PREV) $@
421
422##
423# This explicit dependecy of the output binary on the object files seems to be
424# necessary to prevent parallel build failures (GNU make bug #26893 ???).
425$(OUTPUT): $(OBJECTS)
426
427$(LARCHIVE): $(LOBJECTS)
Note: See TracBrowser for help on using the repository browser.