blob: 2acf2266da441a2497f524aa22cb1e449f993774 [file] [log] [blame]
Patrick Georgib3db79e2011-04-21 18:48:50 +02001##
Patrick Georgib3db79e2011-04-21 18:48:50 +02002##
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
6##
7## Redistribution and use in source and binary forms, with or without
8## modification, are permitted provided that the following conditions
9## are met:
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.
17##
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
28## SUCH DAMAGE.
29##
30
31export KERNELVERSION := 0.2.0
32
Gabe Black51edd542013-09-30 23:00:33 -070033ARCHDIR-$(CONFIG_LP_ARCH_ARM) := arm
Furquan Shaikh8c8c3772014-02-19 11:35:30 -080034ARCHDIR-$(CONFIG_LP_ARCH_ARM64) := arm64
Gabe Black1ee2c6d2013-08-09 04:27:35 -070035ARCHDIR-$(CONFIG_LP_ARCH_X86) := x86
Tadas Slotkus09ea8ea2011-07-15 03:41:11 +030036DESTDIR ?= install
Patrick Georgib3db79e2011-04-21 18:48:50 +020037
38real-target: lib
39
Gabe Black1ee2c6d2013-08-09 04:27:35 -070040classes-$(CONFIG_LP_PCI) += libpci
41classes-$(CONFIG_LP_LIBC) += libc
42classes-$(CONFIG_LP_CURSES) += libcurses
43classes-$(CONFIG_LP_PDCURSES) += libmenu libform libpanel
44classes-$(CONFIG_LP_CBFS) += libcbfs
45classes-$(CONFIG_LP_LZMA) += liblzma
Julius Wernerbf273912015-06-30 10:30:30 -070046classes-$(CONFIG_LP_LZ4) += liblz4
Julius Werner50a81742014-05-15 11:57:38 -070047classes-$(CONFIG_LP_REMOTEGDB) += libgdb
Patrick Georgib3db79e2011-04-21 18:48:50 +020048libraries := $(classes-y)
49classes-y += head.o
50
Patrick Georgib3db79e2011-04-21 18:48:50 +020051subdirs-y := arch/$(ARCHDIR-y)
Julius Werner50a81742014-05-15 11:57:38 -070052subdirs-y += crypto libc drivers libpci gdb
Gabe Black1ee2c6d2013-08-09 04:27:35 -070053subdirs-$(CONFIG_LP_CURSES) += curses
54subdirs-$(CONFIG_LP_CBFS) += libcbfs
55subdirs-$(CONFIG_LP_LZMA) += liblzma
Julius Wernerbf273912015-06-30 10:30:30 -070056subdirs-$(CONFIG_LP_LZ4) += liblz4
Patrick Georgib3db79e2011-04-21 18:48:50 +020057
Stefan Reinauer1b4d3942015-06-29 15:47:34 -070058INCLUDES := -Iinclude -Iinclude/$(ARCHDIR-y) -I$(obj) -include include/kconfig.h
59
Patrick Georgi9b8c7382015-07-06 09:09:30 +000060CFLAGS += $(EXTRA_CFLAGS) $(INCLUDES) -Os -pipe -nostdinc -ggdb3
Stefan Reinauer08c41502013-05-21 14:45:28 -070061CFLAGS += -nostdlib -fno-builtin -ffreestanding -fomit-frame-pointer
Stefan Reinauere5595362015-07-01 11:30:03 -070062CFLAGS += -ffunction-sections -fdata-sections
Jacob Garber9cd53c52019-06-27 13:23:38 -060063CFLAGS += -Wall -Wundef -Wstrict-prototypes -Wmissing-prototypes -Wvla
Jacob Garber5f7b1162019-07-19 17:35:28 -060064CFLAGS += -Wwrite-strings -Wredundant-decls -Wno-trigraphs -Wimplicit-fallthrough
Vadim Bendebury19c3da52014-05-15 14:12:54 -070065CFLAGS += -Wstrict-aliasing -Wshadow -Werror
Patrick Georgib3db79e2011-04-21 18:48:50 +020066
67$(obj)/libpayload-config.h: $(KCONFIG_AUTOHEADER)
68 cmp $@ $< 2>/dev/null || cp $< $@
69
70library-targets = $(addsuffix .a,$(addprefix $(obj)/,$(libraries))) $(obj)/libpayload.a
71lib: $$(library-targets) $(obj)/head.o
72
Patrick Georgi3b77b722011-07-07 15:41:53 +020073extract_nth=$(word $(1), $(subst |, ,$(2)))
74
75#######################################################################
Martin Roth6116f362016-03-08 12:32:40 -070076# Add handler for special include files
Patrick Georgi3b77b722011-07-07 15:41:53 +020077$(call add-special-class,includes)
78includes-handler= \
79 $(if $(wildcard $(1)$(call extract_nth,1,$(2))), \
80 $(eval includes += $(1)$(2)))
81
Patrick Georgib3db79e2011-04-21 18:48:50 +020082$(obj)/libpayload.a: $(foreach class,$(libraries),$$($(class)-objs))
Martin Roth6116f362016-03-08 12:32:40 -070083 printf " AR $(subst $(CURDIR)/,,$(@))\n"
Patrick Georgib3db79e2011-04-21 18:48:50 +020084 $(AR) rc $@ $^
85
86$(obj)/%.a: $$(%-objs)
Martin Roth6116f362016-03-08 12:32:40 -070087 printf " AR $(subst $(CURDIR)/,,$(@))\n"
Patrick Georgib3db79e2011-04-21 18:48:50 +020088 $(AR) rc $@ $^
89
90$(obj)/head.o: $(obj)/arch/$(ARCHDIR-y)/head.head.o.o
Martin Roth6116f362016-03-08 12:32:40 -070091 printf " CP $(subst $(CURDIR)/,,$(@))\n"
Patrick Georgib3db79e2011-04-21 18:48:50 +020092 cp $^ $@
93
94install: real-target
95 printf " INSTALL $(DESTDIR)/libpayload/lib\n"
96 install -m 755 -d $(DESTDIR)/libpayload/lib
97 for lib in $(library-targets); do \
98 install -m 644 $$lib $(DESTDIR)/libpayload/lib/; \
99 done
Ronald G. Minnichc2e8cf52013-02-14 11:32:29 -0800100 install -m 644 arch/$(ARCHDIR-y)/libpayload.ldscript $(DESTDIR)/libpayload/lib/
Patrick Georgib3db79e2011-04-21 18:48:50 +0200101 install -m 755 -d $(DESTDIR)/libpayload/lib/$(ARCHDIR-y)
102 install -m 644 $(obj)/head.o $(DESTDIR)/libpayload/lib/$(ARCHDIR-y)
103 printf " INSTALL $(DESTDIR)/libpayload/include\n"
104 install -m 755 -d $(DESTDIR)/libpayload/include
105 for file in `find include -name *.h -type f`; do \
106 install -m 755 -d $(DESTDIR)/libpayload/`dirname $$file`; \
107 install -m 644 $$file $(DESTDIR)/libpayload/$$file; \
108 done
109 install -m 644 $(obj)/libpayload-config.h $(DESTDIR)/libpayload/include
Patrick Georgi3b77b722011-07-07 15:41:53 +0200110 $(foreach item,$(includes), \
111 install -m 755 -d $(DESTDIR)/libpayload/include/$(call extract_nth,2,$(item)); \
112 install -m 644 $(call extract_nth,1,$(item)) $(DESTDIR)/libpayload/include/$(call extract_nth,2,$(item)); )
Patrick Georgib3db79e2011-04-21 18:48:50 +0200113 printf " INSTALL $(DESTDIR)/libpayload/bin\n"
114 install -m 755 -d $(DESTDIR)/libpayload/bin
115 install -m 755 bin/lpgcc $(DESTDIR)/libpayload/bin
116 install -m 755 bin/lpas $(DESTDIR)/libpayload/bin
117 install -m 644 bin/lp.functions $(DESTDIR)/libpayload/bin
Stefan Reinauer658e4d32013-01-17 12:29:51 -0800118 install -m 644 $(DOTCONFIG) $(DESTDIR)/libpayload/libpayload.config
Stefan Reinauer5d866212015-07-08 17:09:49 -0700119 install -m 755 .xcompile $(DESTDIR)/libpayload/libpayload.xcompile
Patrick Georgib3db79e2011-04-21 18:48:50 +0200120
121clean-for-update-target:
122 rm -f $(addsuffix .a,$(addprefix $(obj)/,$(libraries))) $(obj)/libpayload.a
123
124clean-target:
125prepare:
Patrick Georgi34286b82013-12-21 21:08:53 +0100126
127junit.xml:
128 echo '<?xml version="1.0" encoding="utf-8"?><testsuite>' > $@.tmp
129 for i in $(filter-out %.old,$(wildcard configs/*)); do \
130 $(MAKE) clean; \
Keith Short31af70d2019-07-11 17:54:57 -0600131 echo "Building libpayload for $$i"; \
Martin Roth6959f5c2016-03-23 16:07:54 -0600132 cp "$$i" junit_config; \
133 $(MAKE) olddefconfig DOTCONFIG=junit_config V=$(V) Q=$(Q) 2>/dev/null >/dev/null; \
Patrick Georgi34286b82013-12-21 21:08:53 +0100134 echo "<testcase classname='libpayload' name='$$i'>" >> $@.tmp; \
Martin Roth6959f5c2016-03-23 16:07:54 -0600135 $(MAKE) V=$(V) Q=$(Q) CONFIG_LP_CCACHE=$(CONFIG_LP_CCACHE) DOTCONFIG=junit_config >> $@.tmp.2 2>&1 && type="system-out" || type="failure"; \
Patrick Georgi34286b82013-12-21 21:08:53 +0100136 if [ $$type = "failure" ]; then \
137 echo "<failure type='buildFailed'>" >> $@.tmp; \
138 else \
139 echo "<$$type>" >> $@.tmp; \
140 fi; \
141 echo '<![CDATA[' >> $@.tmp; \
142 cat $@.tmp.2 >> $@.tmp; \
143 echo "]]></$$type>" >>$@.tmp; \
144 rm -f $@.tmp.2; \
145 echo "</testcase>" >> $@.tmp; \
146 done
147 echo "</testsuite>" >> $@.tmp
Keith Short31af70d2019-07-11 17:54:57 -0600148 echo "libpayload build complete, test results in $@"
Patrick Georgi34286b82013-12-21 21:08:53 +0100149 mv $@.tmp $@
Martin Roth6c9c1962017-08-03 09:25:43 -0600150
151test-configs:
152 for config in $(filter-out %.old,$(wildcard configs/*)); do \
153 $(MAKE) clean; \
154 cp "$$config" test_config; \
155 echo "*** Making libpayload config $$config ***"; \
156 $(MAKE) olddefconfig DOTCONFIG=test_config V=$(V) Q=$(Q) ; \
157 $(MAKE) V=$(V) Q=$(Q) CONFIG_LP_CCACHE=$(CONFIG_LP_CCACHE) DOTCONFIG=test_config; \
158 done