source: mainline/uspace/Makefile.common@ f4af048

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since f4af048 was 9ded977, checked in by Martin Decky <martin@…>, 15 years ago

add initial support for line debugging information and generating disassembly outputs with source code intermixed (useful for analyzing of stack traces)
currently the disassembly and source is intermixed only in the case of amd64 kernel (other linker scripts strip the debugging sections so far)

  • Property mode set to 100644
File size: 6.4 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# EXTRA_OUTPUT additional output targets
43# EXTRA_CLEAN additional cleanup targets
44#
45# (x) required variables
46# (/) exactly one of the variables must be defined
47#
48
49ROOT_PATH = $(USPACE_PREFIX)/..
50
51VERSION_DEF = $(ROOT_PATH)/version
52
53COMMON_MAKEFILE = $(ROOT_PATH)/Makefile.common
54COMMON_HEADER = $(ROOT_PATH)/common.h
55
56CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config
57CONFIG_HEADER = $(ROOT_PATH)/config.h
58
59-include $(VERSION_DEF)
60-include $(COMMON_MAKEFILE)
61-include $(CONFIG_MAKEFILE)
62
63ifneq ($(BINARY),)
64 JOB = $(BINARY).job
65 OUTPUT = $(BINARY)
66 EXTRA_OUTPUT += $(BINARY).disasm
67 EXTRA_CLEAN += $(BINARY).map
68endif
69
70ifneq ($(LIBRARY),)
71 JOB = $(LIBRARY).job
72 OUTPUT = $(LIBRARY).a
73endif
74
75DEPEND = Makefile.depend
76DEPEND_PREV = $(DEPEND).prev
77
78LIB_PREFIX = $(USPACE_PREFIX)/lib
79
80LIBC_PREFIX = $(LIB_PREFIX)/c
81LIBSOFTFLOAT_PREFIX = $(LIB_PREFIX)/softfloat
82LIBSOFTINT_PREFIX = $(LIB_PREFIX)/softint
83
84LIBBLOCK_PREFIX = $(LIB_PREFIX)/block
85LIBFS_PREFIX = $(LIB_PREFIX)/fs
86LIBCLUI_PREFIX = $(LIB_PREFIX)/clui
87
88LIBPCI_PREFIX = $(LIB_PREFIX)/pci
89
90LIBSOCKET_PREFIX = $(LIB_PREFIX)/socket
91LIBNET_PREFIX = $(LIB_PREFIX)/net
92
93BASE_LIBS = $(LIBC_PREFIX)/libc.a $(LIBSOFTINT_PREFIX)/libsoftint.a
94
95LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld
96
97ifeq ($(CONFIG_OPTIMIZE_FOR_SIZE),y)
98 OPTIMIZATION = s
99else
100 OPTIMIZATION = 3
101endif
102
103.PHONY: all clean
104
105all: $(VERSION_DEF) $(COMMON_MAKEFILE) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) $(LIBS) $(OUTPUT) $(EXTRA_OUTPUT)
106 -[ -f $(DEPEND) ] && cp -a $(DEPEND) $(DEPEND_PREV)
107
108clean:
109 rm -f $(DEPEND) $(DEPEND_PREV) $(JOB) $(OUTPUT) $(EXTRA_OUTPUT) $(EXTRA_CLEAN)
110 find . -name '*.o' -follow -exec rm \{\} \;
111
112GCC_CFLAGS = -I$(LIBC_PREFIX)/include -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
113 -fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
114 -finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
115 -Wall -Wextra -Wno-clobbered -Wno-unused-parameter -Wmissing-prototypes \
116 -Werror-implicit-function-declaration -Wwrite-strings \
117 -pipe -g -D__$(ENDIANESS)__
118
119ICC_CFLAGS = -I$(LIBC_PREFIX)/include -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
120 -fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
121 -finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
122 -Wall -Wextra -Wno-clobbered -Wno-unused-parameter -Wmissing-prototypes \
123 -Werror-implicit-function-declaration -Wwrite-strings \
124 -pipe -g -D__$(ENDIANESS)__
125
126CLANG_CFLAGS = -I$(LIBC_PREFIX)/include -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
127 -fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
128 -finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
129 -Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes \
130 -Werror-implicit-function-declaration -Wwrite-strings \
131 -pipe -g -arch $(CLANG_ARCH) -D__$(ENDIANESS)__
132
133ifeq ($(CONFIG_DEBUG),y)
134 GCC_CFLAGS += -Werror
135 ICC_CFLAGS += -Werror
136endif
137
138## Setup platform configuration
139#
140
141-include $(LIBC_PREFIX)/arch/$(UARCH)/Makefile.common
142
143## Compilation options
144#
145
146JOBFILE = $(LIBC_PREFIX)/../../../tools/jobfile.py
147
148ifeq ($(COMPILER),gcc_cross)
149 CFLAGS = $(GCC_CFLAGS) $(EXTRA_CFLAGS)
150 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
151endif
152
153ifeq ($(COMPILER),gcc_native)
154 CFLAGS = $(GCC_CFLAGS) $(EXTRA_CFLAGS)
155 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
156endif
157
158ifeq ($(COMPILER),icc)
159 CFLAGS = $(ICC_CFLAGS) $(EXTRA_CFLAGS)
160 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
161endif
162
163ifeq ($(COMPILER),clang)
164 CFLAGS = $(CLANG_CFLAGS) $(EXTRA_CFLAGS)
165 DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
166endif
167
168-include $(DEPEND)
169
170OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
171
172ifneq ($(BINARY),)
173%.disasm: $(BINARY)
174ifeq ($(CONFIG_LINE_DEBUG),y)
175 $(OBJDUMP) -d -S $< > $@
176else
177 $(OBJDUMP) -d $< > $@
178endif
179
180$(BINARY): $(LINKER_SCRIPT) $(OBJECTS) $(LIBS) $(BASE_LIBS)
181 $(LD) -N $(LFLAGS) -T $(LINKER_SCRIPT) -M -Map $(BINARY).map -o $(BINARY) $(OBJECTS) $(LIBS) $(BASE_LIBS)
182ifeq ($(CONFIG_STRIP_BINARIES),y)
183 $(STRIP) $(BINARY)
184endif
185endif
186
187ifneq ($(LIBRARY),)
188%.a: $(OBJECTS)
189 $(AR) rc $@ $(OBJECTS)
190endif
191
192%.o: %.S $(DEPEND)
193 $(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@
194ifeq ($(PRECHECK),y)
195 $(JOBFILE) $(JOB) $< $@ as asm/preproc $(DEFS) $(CFLAGS) -D__ASM__
196endif
197
198%.o: %.s $(DEPEND)
199 $(AS) $(AFLAGS) -o $@ $<
200ifeq ($(PRECHECK),y)
201 $(JOBFILE) $(JOB) $< $@ as asm
202endif
203
204%.o: %.c $(DEPEND)
205 $(CC) $(DEFS) $(CFLAGS) -c $< -o $@
206ifeq ($(PRECHECK),y)
207 $(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS)
208endif
209
210$(DEPEND): $(PRE_DEPEND)
211 makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(SOURCES) > $@ 2> /dev/null
212 -[ -f $(DEPEND_PREV) ] && diff -q $(DEPEND_PREV) $@ && mv -f $(DEPEND_PREV) $@
Note: See TracBrowser for help on using the repository browser.