3 ## Copyright (C) 2008 Advanced Micro Devices, Inc.
4 ## Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
5 ## Copyright (C) 2011 secunet Security Networks AG
7 ## Redistribution and use in source and binary forms, with or without
8 ## modification, are permitted provided that the following conditions
10 ## 1. Redistributions of source code must retain the above copyright
11 ## notice, this list of conditions and the following disclaimer.
12 ## 2. 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 ## 3. The name of the author may not be used to endorse or promote products
16 ## derived from this software without specific prior written permission.
18 ## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 ## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 ## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 ## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 ## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 ## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 ## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 ## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 ## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 ## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 ifneq ($(NOCOMPILE
),1)
32 GIT
:=$(shell git
-C
"$(top)" rev-parse
--git-dir
1>/dev
/null
2>&1 \
38 export KERNELVERSION
:= 0.2.0
40 ARCHDIR-
$(CONFIG_LP_ARCH_ARM
) := arm
41 ARCHDIR-
$(CONFIG_LP_ARCH_ARM64
) := arm64
42 ARCHDIR-
$(CONFIG_LP_ARCH_X86
) := x86
43 ARCHDIR-
$(CONFIG_LP_ARCH_MOCK
) := mock
48 classes-
$(CONFIG_LP_PCI
) += libpci
49 classes-
$(CONFIG_LP_LIBC
) += libc
50 classes-
$(CONFIG_LP_CURSES
) += libcurses
51 classes-
$(CONFIG_LP_PDCURSES
) += libmenu libform libpanel
52 classes-
$(CONFIG_LP_CBFS
) += libcbfs
53 classes-
$(CONFIG_LP_LZMA
) += liblzma
54 classes-
$(CONFIG_LP_LZ4
) += liblz4
55 classes-
$(CONFIG_LP_REMOTEGDB
) += libgdb
56 classes-
$(CONFIG_LP_VBOOT_LIB
) += vboot_fw
57 classes-
$(CONFIG_LP_VBOOT_LIB
) += tlcl
58 libraries
:= $(classes-y
)
60 subdirs-y
:= arch
/$(ARCHDIR-y
)
61 subdirs-y
+= crypto libc drivers libpci gdb
62 subdirs-
$(CONFIG_LP_CURSES
) += curses
63 subdirs-
$(CONFIG_LP_CBFS
) += libcbfs
64 subdirs-
$(CONFIG_LP_LZMA
) += liblzma
65 subdirs-
$(CONFIG_LP_LZ4
) += liblz4
66 subdirs-
$(CONFIG_LP_VBOOT_LIB
) += vboot
68 INCLUDES
:= -Iinclude
-Iinclude
/$(ARCHDIR-y
) -I
$(obj
)
69 INCLUDES
+= -include include/kconfig.h
70 INCLUDES
+= -include $(coreboottop
)/src
/commonlib
/bsd
/include/commonlib
/bsd
/compiler.h
71 INCLUDES
+= -I
$(coreboottop
)/src
/commonlib
/bsd
/include
72 ifeq ($(CONFIG_LP_GPL
),y
)
73 INCLUDES
+= -I
$(coreboottop
)/src
/commonlib
/include
75 INCLUDES
+= -I
$(VBOOT_SOURCE
)/firmware
/include
77 CFLAGS
+= $(INCLUDES
) -Os
-pipe
-nostdinc
-ggdb3
78 CFLAGS
+= -nostdlib
-fno-builtin
-ffreestanding
-fomit-frame-pointer
79 CFLAGS
+= -ffunction-sections
-fdata-sections
80 CFLAGS
+= -Wall
-Wundef
-Wstrict-prototypes
-Wmissing-prototypes
-Wvla
81 CFLAGS
+= -Wwrite-strings
-Wredundant-decls
-Wno-trigraphs
-Wimplicit-fallthrough
82 CFLAGS
+= -Wstrict-aliasing
-Wshadow
-Werror
84 ifeq ($(CONFIG_LP_LTO
),y
)
88 # Some of the commonlib cbfs headers include vboot headers, so initialize the
89 # submodule in case we are building a payload outside the main coreboot build
90 forgetthis
:=$(if
$(GIT
),$(shell git submodule update
--init ..
/..
/3rdparty
/vboot
$(quiet_errors
)))
92 $(obj
)/libpayload.config
: $(DOTCONFIG
)
95 $(obj
)/libpayload-config.h
: $(KCONFIG_AUTOHEADER
) $(obj
)/libpayload.config
96 cmp
$@
$< 2>/dev
/null || cp
$< $@
98 library-targets
= $(addsuffix .a
,$(addprefix $(obj
)/,$(libraries
))) $(obj
)/libpayload.a
99 lib
: $$(library-targets
) $(obj
)/libpayload.ldscript
101 extract_nth
=$(word $(1), $(subst |
, ,$(2)))
103 #######################################################################
104 # Add handler for special include files
105 $(call add-special-class
,includes
)
107 $(if
$(wildcard $(1)$(call extract_nth
,1,$(2))), \
108 $(eval includes
+= $(1)$(2)))
110 $(obj
)/libpayload.a
: $(foreach class
,$(libraries
),$$($(class
)-objs
))
111 printf
" AR $(subst $(CURDIR)/,,$(@))\n"
112 printf
"create $@\n$(foreach objc,$(filter-out %.a,$^),addmod $(objc)\n)$(foreach lib,$(filter %.a,$^),addlib $(lib)\n)save\nend\n" |
$(AR
) -M
114 $(obj
)/%.a
: $$(%-objs
)
115 printf
" AR $(subst $(CURDIR)/,,$(@))\n"
116 printf
"create $@\n$(foreach objc,$(filter-out %.a,$^),addmod $(objc)\n)$(foreach lib,$(filter %.a,$^),addlib $(lib)\n)save\nend\n" |
$(AR
) -M
118 $(obj
)/libpayload.ldscript
: arch
/$(ARCHDIR-y
)/libpayload.ldscript
$(obj
)/libpayload-config.h
119 @printf
" LDSCRIPT $@\n"
120 $(CC
) $(CFLAGS
) $(EXTRA_CFLAGS
) -E
-P
-x assembler-with-cpp
-undef
-o
$@
$<
123 printf
" INSTALL $(DESTDIR)/libpayload/lib\n"
124 install -m
755 -d
$(DESTDIR
)/libpayload
/lib
125 install -m
644 $(library-targets
) $(DESTDIR
)/libpayload
/lib
/
126 install -m
644 $(obj
)/libpayload.ldscript
$(DESTDIR
)/libpayload
/lib
/
127 install -m
755 -d
$(DESTDIR
)/libpayload
/lib
/$(ARCHDIR-y
)
128 printf
" INSTALL $(DESTDIR)/libpayload/include\n"
129 install -m
755 -d
$(DESTDIR
)/libpayload
/include
130 find
include -type d
-exec
install -m755
-d
$(DESTDIR
)/libpayload
/{} \
;
131 find
include -type f
-exec
install -m644
{} $(DESTDIR
)/libpayload
/{} \
;
132 cd
$(coreboottop
)/src
/commonlib
/bsd
&& find
include -type d
-exec
install -m755
-d
$(abspath
$(DESTDIR
))/libpayload
/{} \
;
133 cd
$(coreboottop
)/src
/commonlib
/bsd
&& find
include -type f
-exec
install -m644
{} $(abspath
$(DESTDIR
))/libpayload
/{} \
;
134 ifeq ($(CONFIG_LP_GPL
),y
)
135 cd
$(coreboottop
)/src
/commonlib
&& find
include -type d
-exec
install -m755
-d
$(abspath
$(DESTDIR
))/libpayload
/{} \
;
136 cd
$(coreboottop
)/src
/commonlib
&& find
include -type f
-exec
install -m644
{} $(abspath
$(DESTDIR
))/libpayload
/{} \
;
138 install -m
644 $(obj
)/libpayload-config.h
$(DESTDIR
)/libpayload
/include
139 $(foreach item
,$(includes
), \
140 install -m
755 -d
$(DESTDIR
)/libpayload
/include/$(call extract_nth
,2,$(item
)); \
141 install -m
644 $(call extract_nth
,1,$(item
)) $(DESTDIR
)/libpayload
/include/$(call extract_nth
,2,$(item
)); )
142 printf
" INSTALL $(DESTDIR)/libpayload/vboot\n"
143 install -m
755 -d
$(DESTDIR
)/libpayload
/vboot
144 for file in
`find $(VBOOT_SOURCE)/firmware/include \
145 $(VBOOT_SOURCE)/firmware/2lib/include \
146 -iname '*.h' -type f \
147 | sed 's,$(VBOOT_SOURCE)/firmware/,,'`; do \
148 install -m
755 -d
$(DESTDIR
)/libpayload
/vboot
/$$(dirname
$$file); \
149 install -m
644 $(VBOOT_SOURCE
)/firmware
/$$file $(DESTDIR
)/libpayload
/vboot
/$$file ; \
151 printf
" INSTALL $(DESTDIR)/libpayload/bin\n"
152 install -m
755 -d
$(DESTDIR
)/libpayload
/bin
153 install -m
755 bin
/lpgcc
$(DESTDIR
)/libpayload
/bin
154 install -m
755 bin
/lpas
$(DESTDIR
)/libpayload
/bin
155 install -m
644 bin
/lp.functions
$(DESTDIR
)/libpayload
/bin
156 install -m
644 $(DOTCONFIG
) $(DESTDIR
)/libpayload
/libpayload.config
157 install -m
755 $(xcompile
) $(DESTDIR
)/libpayload
/libpayload.xcompile
159 clean-for-update-target
:
160 rm -f
$(addsuffix .a
,$(addprefix $(obj
)/,$(libraries
))) $(obj
)/libpayload.a
166 echo
'<?xml version="1.0" encoding="utf-8"?><testsuite>' > $@.tmp
167 for i in
$(filter-out %.old
%.unit-tests
,$(wildcard configs
/*)); do \
169 echo
"Building libpayload for $$i"; \
170 cp
"$$i" junit_config
; \
171 $(MAKE
) olddefconfig DOTCONFIG
=junit_config V
=$(V
) Q
=$(Q
) 2>/dev
/null
>/dev
/null
; \
172 echo
"<testcase classname='libpayload' name='$$i'>" >> $@.tmp
; \
173 $(MAKE
) V
=$(V
) Q
=$(Q
) CONFIG_LP_CCACHE
=$(CONFIG_LP_CCACHE
) DOTCONFIG
=junit_config
>> $@.tmp
.2 2>&1 && type
="system-out" || type
="failure"; \
174 if
[ $$type = "failure" ]; then \
175 echo
"<failure type='buildFailed'>" >> $@.tmp
; \
177 echo
"<$$type>" >> $@.tmp
; \
179 echo
'<![CDATA[' >> $@.tmp
; \
180 cat
$@.tmp
.2 >> $@.tmp
; \
181 echo
"]]></$$type>" >>$@.tmp
; \
183 echo
"</testcase>" >> $@.tmp
; \
185 echo
"</testsuite>" >> $@.tmp
186 echo
"libpayload build complete, test results in $@"
190 for config in
$(filter-out %.old
%.unit-tests
,$(wildcard configs
/*)); do \
192 cp
"$$config" test_config
; \
193 echo
"*** Making libpayload config $$config ***"; \
194 $(MAKE
) olddefconfig DOTCONFIG
=test_config V
=$(V
) Q
=$(Q
) ; \
195 $(MAKE
) V
=$(V
) Q
=$(Q
) CONFIG_LP_CCACHE
=$(CONFIG_LP_CCACHE
) DOTCONFIG
=test_config
; \