xref: /aosp_15_r20/external/coreboot/util/crossgcc/Makefile.mk (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1## SPDX-License-Identifier: GPL-2.0-only
2
3TOOLCHAIN_ARCHES := i386 x64 arm aarch64 riscv ppc64 nds32le
4
5help_toolchain help::
6	@echo
7	@echo  '*** Toolchain targets ***'
8	@echo  '  crossgcc        - Build coreboot cross-compilers for all platforms'
9	@echo  '  crossgcc-clean  - Remove all built coreboot cross-compilers'
10	@echo  '  iasl            - Build coreboot IASL compiler (built by all cross targets)'
11	@echo  '  clang           - Build coreboot clang compiler'
12	@echo  '  nasm            - Build coreboot nasm'
13	@echo  '  test-toolchain  - Reports if toolchain components are out of date'
14	@echo  '  crossgcc-ARCH   - Build cross-compiler for specific architecture'
15	@echo  '  ARCH can be "$(subst $(spc),"$(comma) ",$(TOOLCHAIN_ARCHES))"'
16	@echo  '  Use "make [target] CPUS=#" to build toolchain using multiple cores'
17	@echo  '  Use "make [target] DEST=some/path" to install toolchain there'
18	@echo  '  Use "make [target] BUILDGCC_OPTIONS="-m" to get packages from coreboot mirror"'
19	@echo
20
21# For the toolchain builds, use CPUS=x to use multiple processors to build
22# use BUILDGCC_OPTIONS= to set any crossgcc command line options
23# Example: BUILDGCC_OPTIONS='-t' will keep temporary files after build
24crossgcc: clean-for-update
25	$(MAKE) -C util/crossgcc all SKIP_CLANG=1
26
27.PHONY: crossgcc crossgcc-i386 crossgcc-x64 crossgcc-arm crossgcc-aarch64 \
28	crossgcc-riscv crossgcc-power8 crossgcc-clean iasl \
29	clang jenkins-build-toolchain nasm
30
31$(foreach arch,$(TOOLCHAIN_ARCHES),crossgcc-$(arch)): clean-for-update
32	$(MAKE) -C util/crossgcc $(patsubst crossgcc-%,build-%,$@) build_iasl
33
34iasl: clean-for-update
35	$(MAKE) -C util/crossgcc build_iasl
36
37clang: clean-for-update
38	$(MAKE) -C util/crossgcc build_clang
39
40nasm: clean-for-update
41	$(MAKE) -C util/crossgcc build_nasm
42
43crossgcc-clean: clean-for-update
44	$(MAKE) -C util/crossgcc clean
45
46test-toolchain:
47ifeq ($(COMPILER_OUT_OF_DATE),1)
48	echo "The coreboot toolchain is not the current version."
49	$(error )
50else
51	echo "The coreboot toolchain is the current version."
52endif # ifeq ($(COMPILER_OUT_OF_DATE),1)
53
54# This target controls what the jenkins builder tests
55jenkins-build-toolchain: BUILDGCC_OPTIONS ?= -y --nocolor
56jenkins-build-toolchain:
57	$(MAKE) crossgcc clang KEEP_SOURCES=1 BUILDGCC_OPTIONS='$(BUILDGCC_OPTIONS)'
58	PATH=$(if $(DEST),$(DEST)/bin,$(top)/util/crossgcc/xgcc/bin):$$PATH; $(MAKE) what-jenkins-does
59	PATH=$(if $(DEST),$(DEST)/bin,$(top)/util/crossgcc/xgcc/bin):$$PATH; $(MAKE) test-toolchain
60