blob: ed8d66e410c12e7869cf7c01d65c80821b51c050 [file] [log] [blame]
Stefan Reinauerd5779c12016-01-29 17:48:47 -08001##
2## This file is part of the coreboot project.
3##
4## Copyright (C) 2016 Google Inc.
5##
6## This program is free software; you can redistribute it and/or modify
7## it under the terms of the GNU General Public License as published by
8## the Free Software Foundation; version 2 of the License.
9##
10## This program is distributed in the hope that it will be useful,
11## but WITHOUT ANY WARRANTY; without even the implied warranty of
12## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13## GNU General Public License for more details.
14##
15
Julius Wernerf96d9052019-08-16 15:35:39 -070016TOOLCHAIN_ARCHES := i386 x64 arm aarch64 riscv ppc64 nds32le
Patrick Georgi6c0ccfb2016-01-30 09:14:45 +010017
Stefan Reinauerd5779c12016-01-29 17:48:47 -080018help_toolchain help::
19 @echo '*** Toolchain targets ***'
20 @echo ' crossgcc - Build coreboot cross-compilers for all platforms'
21 @echo ' crosstools - Build coreboot cross-compiler and GDB for all platforms'
22 @echo ' crossgcc-clean - Remove all built coreboot cross-compilers'
23 @echo ' iasl - Build coreboot IASL compiler (built by all cross targets)'
24 @echo ' clang - Build coreboot clang compiler'
Martin Roth109a7db2016-08-11 18:16:59 -060025 @echo ' gnumake - Build coreboot make'
Martin Rothd70f5fa2019-05-26 17:24:19 -060026 @echo ' nasm - Build coreboot nasm'
Stefan Reinauerd5779c12016-01-29 17:48:47 -080027 @echo ' test-toolchain - Reports if toolchain components are out of date'
28 @echo ' crossgcc-ARCH - Build cross-compiler for specific architecture'
29 @echo ' crosstools-ARCH - Build cross-compiler with GDB for specific architecture'
Patrick Georgi6c0ccfb2016-01-30 09:14:45 +010030 @echo ' ARCH can be "$(subst $(spc),"$(comma) ",$(TOOLCHAIN_ARCHES))"'
Stefan Reinauerd5779c12016-01-29 17:48:47 -080031 @echo ' Use "make [target] CPUS=#" to build toolchain using multiple cores'
Patrick Georgid971e762018-11-24 23:14:45 +010032 @echo ' Use "make [target] DEST=some/path" to install toolchain there'
Stefan Reinauerd5779c12016-01-29 17:48:47 -080033 @echo
34
35# For the toolchain builds, use CPUS=x to use multiple processors to build
36# use BUILDGCC_OPTIONS= to set any crossgcc command line options
37# Example: BUILDGCC_OPTIONS='-t' will keep temporary files after build
38crossgcc: clean-for-update
39 $(MAKE) -C util/crossgcc all_without_gdb SKIP_CLANG=1
40
41.PHONY: crossgcc crossgcc-i386 crossgcc-x64 crossgcc-arm crossgcc-aarch64 \
Julius Wernerf96d9052019-08-16 15:35:39 -070042 crossgcc-riscv crossgcc-power8 crossgcc-clean iasl \
Stefan Reinauerd5779c12016-01-29 17:48:47 -080043 clang crosstools-i386 crosstools-x64 crosstools-arm \
Julius Wernerf96d9052019-08-16 15:35:39 -070044 crosstools-aarch64 crosstools-riscv crosstools-power8 \
Martin Rothd70f5fa2019-05-26 17:24:19 -060045 jenkins-build-toolchain gnumake nasm
Stefan Reinauerd5779c12016-01-29 17:48:47 -080046
Patrick Georgi6c0ccfb2016-01-30 09:14:45 +010047$(foreach arch,$(TOOLCHAIN_ARCHES),crossgcc-$(arch)): clean-for-update
Patrick Georgi3df92622016-02-02 19:33:00 +010048 $(MAKE) -C util/crossgcc $(patsubst crossgcc-%,build-%,$@) build_iasl SKIP_GDB=1
Stefan Reinauerd5779c12016-01-29 17:48:47 -080049
50crosstools: clean-for-update
51 $(MAKE) -C util/crossgcc all_with_gdb SKIP_CLANG=1
52
53iasl: clean-for-update
54 $(MAKE) -C util/crossgcc build_iasl
55
56clang: clean-for-update
57 $(MAKE) -C util/crossgcc build_clang
58
Martin Roth109a7db2016-08-11 18:16:59 -060059gnumake: clean-for-update
60 $(MAKE) -C util/crossgcc build_make
61
Martin Rothd70f5fa2019-05-26 17:24:19 -060062nasm: clean-for-update
63 $(MAKE) -C util/crossgcc build_nasm
64
Patrick Georgi6c0ccfb2016-01-30 09:14:45 +010065$(foreach arch,$(TOOLCHAIN_ARCHES),crosstools-$(arch)): clean-for-update
Patrick Georgi3df92622016-02-02 19:33:00 +010066 $(MAKE) -C util/crossgcc $(patsubst crosstools-%,build-%,$@) build_iasl
Stefan Reinauerd5779c12016-01-29 17:48:47 -080067
68crossgcc-clean: clean-for-update
69 $(MAKE) -C util/crossgcc clean
70
71test-toolchain:
72ifeq ($(COMPILER_OUT_OF_DATE),1)
73 echo "The coreboot toolchain is not the current version."
74 $(error )
75else
76 echo "The coreboot toolchain is the current version."
77endif # ifeq ($(COMPILER_OUT_OF_DATE),1)
Martin Roth21148802016-03-08 09:27:45 -070078
79# This target controls what the jenkins builder tests
Martin Rothab8f7d32016-12-07 10:45:55 -070080jenkins-build-toolchain: BUILDGCC_OPTIONS ?= -y --nocolor
Martin Roth21148802016-03-08 09:27:45 -070081jenkins-build-toolchain:
Martin Rothe7a50622020-03-15 09:43:31 -060082 $(MAKE) crossgcc clang KEEP_SOURCES=1 BUILDGCC_OPTIONS='$(BUILDGCC_OPTIONS)'
83 #TODO: Re-enable gdb build after the builders can build it again.
84 #$(MAKE) crosstools clang KEEP_SOURCES=1 BUILDGCC_OPTIONS='$(BUILDGCC_OPTIONS)'
Martin Roth4c3b1562016-03-22 13:05:42 -060085 rm -f .xcompile
Martin Rotha5395802016-04-02 11:10:08 -060086 PATH=$(if $(DEST),$(DEST)/bin,$(top)/util/crossgcc/xgcc/bin):$$PATH; $(MAKE) what-jenkins-does
87 -cat .xcompile
88 PATH=$(if $(DEST),$(DEST)/bin,$(top)/util/crossgcc/xgcc/bin):$$PATH; $(MAKE) test-toolchain