blob: 08fcc297a59606776c75285fe3ed4418163ac591 [file] [log] [blame]
Jordan Crousec3e728f2008-04-09 23:05:59 +00001#!/bin/sh
Jordan Crousec3e728f2008-04-09 23:05:59 +00002##
3## Copyright (C) 2008 Advanced Micro Devices, Inc.
4##
5## Redistribution and use in source and binary forms, with or without
6## modification, are permitted provided that the following conditions
7## are met:
8## 1. Redistributions of source code must retain the above copyright
9## notice, this list of conditions and the following disclaimer.
10## 2. Redistributions in binary form must reproduce the above copyright
11## notice, this list of conditions and the following disclaimer in the
12## documentation and/or other materials provided with the distribution.
13## 3. The name of the author may not be used to endorse or promote products
14## derived from this software without specific prior written permission.
15##
16## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26## SUCH DAMAGE.
27
28# GCC wrapper for libpayload
Vadim Bendeburyc2537172014-05-19 15:43:47 -070029if [ "${V}" = "1" ]; then
Marc Jonesbb9490a2012-11-30 16:22:51 -070030 DEBUGME=1
31else
32 DEBUGME=0
33fi
34
35if [ $DEBUGME -eq 1 ]; then
36 echo "CC = $CC"
37fi
38
Stefan Reinauer14e22772010-04-27 06:56:47 +000039# let's not recurse.
Ronald G. Minnichb575d672009-02-15 23:32:57 +000040# This is a hack, I know, but it makes sure that really simple user errors
Stefan Reinauer14e22772010-04-27 06:56:47 +000041# don't fork-bomb your machine.
Patrick Georgia4a022c2011-02-14 19:24:37 +000042if [ -n "$CC" ]; then
Marc Jonesbb9490a2012-11-30 16:22:51 -070043b=`basename "$CC"`
Ronald G. Minnichb575d672009-02-15 23:32:57 +000044if [ "$b" = "lpgcc" ]; then
45CC=""
46fi
Patrick Georgia4a022c2011-02-14 19:24:37 +000047fi
Ronald G. Minnichb575d672009-02-15 23:32:57 +000048
Stefan Reinauerc3591242008-08-07 15:22:01 +000049if [ "$CC" != "" ]; then
50DEFAULT_CC=$CC
51else
Jordan Crousec3e728f2008-04-09 23:05:59 +000052DEFAULT_CC=gcc
Stefan Reinauerc3591242008-08-07 15:22:01 +000053fi
Jordan Crousec3e728f2008-04-09 23:05:59 +000054
55BASE=`dirname $0`
56
57# This will set the _LIBDIR and _INCDIR variables used below
58. $BASE/lp.functions
59
Nico Huber3e0b3f12020-11-14 23:37:39 +010060if [ $_LIBDIR != $_OBJ ]; then
61 _DOTCONFIG=$BASE/../libpayload.config
62 _XCOMPILE=$BASE/../libpayload.xcompile
63else
64 _DOTCONFIG=$_OBJ/libpayload.config
65 _XCOMPILE=$_OBJ/xcompile
66fi
67
Stefan Reinauer5429e262009-05-26 18:01:53 +000068# include libpayload config
Nico Huber3e0b3f12020-11-14 23:37:39 +010069if [ -f $_DOTCONFIG ]; then
70 . $_DOTCONFIG
Patrick Georgicb761362013-02-21 14:33:25 +010071else
72 echo "Can't find config"
73 exit 1
74fi
Stefan Reinauer5429e262009-05-26 18:01:53 +000075
Gabe Black51edd542013-09-30 23:00:33 -070076if [ "$CONFIG_LP_ARCH_ARM" = "y" ]; then
Subrata Banikf2d260d2024-05-17 06:02:08 +000077 _ARCHDIR=arm
Patrick Georgicb761362013-02-21 14:33:25 +010078 _ARCHEXTRA=""
Subrata Banikf2d260d2024-05-17 06:02:08 +000079
Patrick Georgicb761362013-02-21 14:33:25 +010080fi
Furquan Shaikh8c8c3772014-02-19 11:35:30 -080081if [ "$CONFIG_LP_ARCH_ARM64" = "y" ]; then
Subrata Banikf2d260d2024-05-17 06:02:08 +000082 _ARCHDIR=arm64
Furquan Shaikh8c8c3772014-02-19 11:35:30 -080083 _ARCHEXTRA=""
Furquan Shaikh8c8c3772014-02-19 11:35:30 -080084fi
Gabe Black1ee2c6d2013-08-09 04:27:35 -070085if [ "$CONFIG_LP_ARCH_X86" = "y" ]; then
Subrata Banikf2d260d2024-05-17 06:02:08 +000086 _ARCHDIR=x86
Subrata Banikafa39102024-05-18 12:26:40 +000087 if [ "$CONFIG_LP_ARCH_X86_32" = "y" ]; then
88 _ARCHEXTRA="-m32 "
89 else
90 _ARCHEXTRA="-m64 "
91 fi
Patrick Georgicb761362013-02-21 14:33:25 +010092fi
Jakub Czapiga3d91b472021-09-15 14:52:45 +020093if [ "$CONFIG_LP_ARCH_MOCK" = "y" ]; then
Subrata Banikf2d260d2024-05-17 06:02:08 +000094 _ARCHDIR=mock
Jakub Czapiga3d91b472021-09-15 14:52:45 +020095 _ARCHEXTRA=""
Jakub Czapiga3d91b472021-09-15 14:52:45 +020096fi
Patrick Georgicb761362013-02-21 14:33:25 +010097
Subrata Banikf2d260d2024-05-17 06:02:08 +000098_ARCHINCDIR=$_INCDIR/$_ARCHDIR
99_ARCHLIBDIR=$_LIBDIR/$_ARCHDIR
100
Patrick Georgicb761362013-02-21 14:33:25 +0100101if [ -f $_LIBDIR/libpayload.ldscript ]; then
102 _LDDIR=$_LIBDIR
Subrata Banikf2d260d2024-05-17 06:02:08 +0000103elif [ -f $BASE/../arch/$_ARCHDIR/libpayload.ldscript ]; then
104 _LDDIR=$BASE/../arch/$_ARCHDIR
Patrick Georgicb761362013-02-21 14:33:25 +0100105fi
Jakub Czapiga3d91b472021-09-15 14:52:45 +0200106# Host arch should youse default linker script
107if [ "$CONFIG_LP_ARCH_MOCK" = "y" ]; then
108 _LDSCRIPT=""
109else
110 _LDSCRIPT="-Wl,-T,$_LDDIR/libpayload.ldscript"
111fi
Ulf Jordan6818a322009-02-10 21:12:35 +0000112
Jordan Crousec3e728f2008-04-09 23:05:59 +0000113trygccoption() {
Patrick Georgi82867d32012-09-26 15:26:05 +0200114 $DEFAULT_CC $1 -S -xc /dev/null -o /dev/null &> /dev/null
115 return $?
Jordan Crousec3e728f2008-04-09 23:05:59 +0000116}
117
Jordan Crousec3e728f2008-04-09 23:05:59 +0000118DOLINK=1
119
120# This variable will contain the command line that the user wants to
121# pass to gas
122
123CMDLINE=
124
125# Process various flags that would change our behavior
126
127while [ $# -gt 0 ]; do
128 case $1 in
Subrata Banikafa39102024-05-18 12:26:40 +0000129 -m32|-fno-stack-protector|-m64)
Jordan Crousec3e728f2008-04-09 23:05:59 +0000130 shift
131 continue
132 ;;
Jordan Crousec3e728f2008-04-09 23:05:59 +0000133 -c)
134 DOLINK=0
135 ;;
136 -debug-wrapper)
137 DEBUGME=1
138 shift
139 continue
140 ;;
Ulf Jordan6818a322009-02-10 21:12:35 +0000141 -Wl,-T,*)
142 _LDSCRIPT="$1"
143 shift
144 continue
145 ;;
Jordan Crousec3e728f2008-04-09 23:05:59 +0000146 *)
147 ;;
148 esac
149
150 CMDLINE="$CMDLINE $1"
151 shift
152done
153
Nico Huberec703832020-11-14 23:43:12 +0100154_CFLAGS="$_ARCHEXTRA -nostdinc -nostdlib -I$_INCDIR -I$_ARCHINCDIR -D__LIBPAYLOAD__=1"
Jordan Crousec3e728f2008-04-09 23:05:59 +0000155
Nico Huberec703832020-11-14 23:43:12 +0100156if [ $_LIBDIR = $_OBJ ]; then
157 _CFLAGS="$_CFLAGS -I$_OBJ"
Vladimir Serbinenko571bec72014-01-15 22:04:12 +0100158
Nico Huberec703832020-11-14 23:43:12 +0100159 if [ "$CONFIG_LP_PDCURSES" = y ]; then
160 _CFLAGS="$_CFLAGS -I$BASE/../curses/PDCurses -I$BASE/../curses/pdcurses-backend"
161 _CFLAGS="$_CFLAGS -I$BASE/../curses/form -I$BASE/../curses/menu"
162 fi
163
164 if [ "$CONFIG_LP_TINYCURSES" = y ]; then
165 _CFLAGS="$_CFLAGS -I$BASE/../curses"
166 fi
Jakub Czapigae7006fb2021-12-16 16:11:30 +0000167
Julius Werner23d24652022-05-27 19:07:14 -0700168 _CFLAGS="$_CFLAGS -include $BASE/../../../src/commonlib/bsd/include/commonlib/bsd/compiler.h"
Jakub Czapigae7006fb2021-12-16 16:11:30 +0000169 _CFLAGS="$_CFLAGS -I$BASE/../../../src/commonlib/bsd/include"
Julius Wernerc00c1402024-03-15 14:08:14 -0700170 if [ "$CONFIG_LP_GPL" = y ]; then
171 _CFLAGS="$_CFLAGS -I$BASE/../../../src/commonlib/include"
172 fi
Jakub Czapiga395f5b32022-01-12 09:59:39 +0000173 _CFLAGS="$_CFLAGS -I$BASE/../../../3rdparty/vboot/firmware/include"
174else
Julius Werner23d24652022-05-27 19:07:14 -0700175 _CFLAGS="$_CFLAGS -include $BASE/../include/commonlib/bsd/compiler.h"
Jakub Czapiga395f5b32022-01-12 09:59:39 +0000176 _CFLAGS="$_CFLAGS -I$_VBOOTINCDIR"
Vladimir Serbinenko571bec72014-01-15 22:04:12 +0100177fi
178
Jordan Crousec3e728f2008-04-09 23:05:59 +0000179# Check for the -fno-stack-protector silliness
180
181trygccoption -fno-stack-protector
182[ $? -eq 0 ] && _CFLAGS="$_CFLAGS -fno-stack-protector"
183
Julius Werner23d24652022-05-27 19:07:14 -0700184_CFLAGS="$_CFLAGS -include $BASE/../include/kconfig.h"
Jacob Garberc98baa72020-11-04 21:49:49 -0700185_CFLAGS="$_CFLAGS -I`$DEFAULT_CC $_ARCHEXTRA -print-search-dirs | head -n 1 | cut -d' ' -f2`include"
Jordan Crousec3e728f2008-04-09 23:05:59 +0000186
Jakub Czapiga49fff572022-03-02 12:18:11 +0100187if [ "$CONFIG_LP_VBOOT_LIB" = y ]; then
188 if [ "$CONFIG_LP_VBOOT_TPM2_MODE" = y ]; then
189 _CFLAGS="$_CFLAGS -DTPM2_MODE"
190 else
191 _CFLAGS="$_CFLAGS -DTPM1_MODE"
192 fi
193fi
194
Nico Huber47722cf2022-02-22 02:08:11 +0100195_LDFLAGS="-L$_LIBDIR $_LDSCRIPT -static -Wl,--gc-sections"
Jordan Crousec3e728f2008-04-09 23:05:59 +0000196
197if [ $DOLINK -eq 0 ]; then
198 if [ $DEBUGME -eq 1 ]; then
Paul Kocialkowski7572e662015-08-03 14:08:40 +0200199 echo "$DEFAULT_CC $CMDLINE $_CFLAGS"
Jordan Crousec3e728f2008-04-09 23:05:59 +0000200 fi
201
Paul Kocialkowski7572e662015-08-03 14:08:40 +0200202 $DEFAULT_CC $CMDLINE $_CFLAGS
Jordan Crousec3e728f2008-04-09 23:05:59 +0000203else
Julius Wernerf96d9052019-08-16 15:35:39 -0700204 _LIBGCC=`$DEFAULT_CC $_ARCHEXTRA -print-libgcc-file-name`
Julius Werner4bfa29e2015-08-20 14:36:34 -0700205
Nico Huber3e0b3f12020-11-14 23:37:39 +0100206 if [ "$CONFIG_LP_ARM64_A53_ERRATUM_843419" = y ] &&
207 grep -q fix-cortex-a53-843419 $_XCOMPILE; then
Stefan Reinauer805d44f2016-03-12 16:38:17 -0800208 _LDFLAGS="$_LDFLAGS -Wl,--fix-cortex-a53-843419"
Julius Werner4bfa29e2015-08-20 14:36:34 -0700209 fi
210
Stefan Reinauer82184452016-03-12 16:18:17 -0800211 _LDFLAGS="$_LDFLAGS -Wl,--defsym=CONFIG_LP_BASE_ADDRESS=$CONFIG_LP_BASE_ADDRESS"
212 _LDFLAGS="$_LDFLAGS -Wl,--defsym=CONFIG_LP_HEAP_SIZE=$CONFIG_LP_HEAP_SIZE"
213 _LDFLAGS="$_LDFLAGS -Wl,--defsym=CONFIG_LP_STACK_SIZE=$CONFIG_LP_STACK_SIZE"
214
Jordan Crousec3e728f2008-04-09 23:05:59 +0000215 if [ $DEBUGME -eq 1 ]; then
Subrata Banik36e2b972024-05-16 15:19:22 +0530216 echo "$DEFAULT_CC $_LDFLAGS $CMDLINE $_CFLAGS -lpayload $_LIBGCC"
Jordan Crousec3e728f2008-04-09 23:05:59 +0000217 fi
218
Subrata Banik36e2b972024-05-16 15:19:22 +0530219 $DEFAULT_CC $_LDFLAGS $CMDLINE $_CFLAGS -lpayload -xnone $_LIBGCC
Jordan Crousec3e728f2008-04-09 23:05:59 +0000220fi