162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci# Makefile for nolibc installation and tests 362306a36Sopenharmony_ciinclude ../../scripts/Makefile.include 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci# we're in ".../tools/include/nolibc" 662306a36Sopenharmony_ciifeq ($(srctree),) 762306a36Sopenharmony_cisrctree := $(patsubst %/tools/include/,%,$(dir $(CURDIR))) 862306a36Sopenharmony_ciendif 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci# when run as make -C tools/ nolibc_<foo> the arch is not set 1162306a36Sopenharmony_ciifeq ($(ARCH),) 1262306a36Sopenharmony_ciinclude $(srctree)/scripts/subarch.include 1362306a36Sopenharmony_ciARCH = $(SUBARCH) 1462306a36Sopenharmony_ciendif 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci# OUTPUT is only set when run from the main makefile, otherwise 1762306a36Sopenharmony_ci# it defaults to this nolibc directory. 1862306a36Sopenharmony_ciOUTPUT ?= $(CURDIR)/ 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciifeq ($(V),1) 2162306a36Sopenharmony_ciQ= 2262306a36Sopenharmony_cielse 2362306a36Sopenharmony_ciQ=@ 2462306a36Sopenharmony_ciendif 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cinolibc_arch := $(patsubst arm64,aarch64,$(ARCH)) 2762306a36Sopenharmony_ciarch_file := arch-$(nolibc_arch).h 2862306a36Sopenharmony_ciall_files := \ 2962306a36Sopenharmony_ci compiler.h \ 3062306a36Sopenharmony_ci crt.h \ 3162306a36Sopenharmony_ci ctype.h \ 3262306a36Sopenharmony_ci errno.h \ 3362306a36Sopenharmony_ci nolibc.h \ 3462306a36Sopenharmony_ci signal.h \ 3562306a36Sopenharmony_ci stackprotector.h \ 3662306a36Sopenharmony_ci std.h \ 3762306a36Sopenharmony_ci stdint.h \ 3862306a36Sopenharmony_ci stdlib.h \ 3962306a36Sopenharmony_ci string.h \ 4062306a36Sopenharmony_ci sys.h \ 4162306a36Sopenharmony_ci time.h \ 4262306a36Sopenharmony_ci types.h \ 4362306a36Sopenharmony_ci unistd.h \ 4462306a36Sopenharmony_ci stdio.h \ 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci# install all headers needed to support a bare-metal compiler 4862306a36Sopenharmony_ciall: headers 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciinstall: help 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cihelp: 5362306a36Sopenharmony_ci @echo "Supported targets under nolibc:" 5462306a36Sopenharmony_ci @echo " all call \"headers\"" 5562306a36Sopenharmony_ci @echo " clean clean the sysroot" 5662306a36Sopenharmony_ci @echo " headers prepare a sysroot in tools/include/nolibc/sysroot" 5762306a36Sopenharmony_ci @echo " headers_standalone like \"headers\", and also install kernel headers" 5862306a36Sopenharmony_ci @echo " help this help" 5962306a36Sopenharmony_ci @echo "" 6062306a36Sopenharmony_ci @echo "These targets may also be called from tools as \"make nolibc_<target>\"." 6162306a36Sopenharmony_ci @echo "" 6262306a36Sopenharmony_ci @echo "Currently using the following variables:" 6362306a36Sopenharmony_ci @echo " ARCH = $(ARCH)" 6462306a36Sopenharmony_ci @echo " OUTPUT = $(OUTPUT)" 6562306a36Sopenharmony_ci @echo "" 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci# Note: when ARCH is "x86" we concatenate both x86_64 and i386 6862306a36Sopenharmony_ciheaders: 6962306a36Sopenharmony_ci $(Q)mkdir -p $(OUTPUT)sysroot 7062306a36Sopenharmony_ci $(Q)mkdir -p $(OUTPUT)sysroot/include 7162306a36Sopenharmony_ci $(Q)cp $(all_files) $(OUTPUT)sysroot/include/ 7262306a36Sopenharmony_ci $(Q)if [ "$(ARCH)" = "x86" ]; then \ 7362306a36Sopenharmony_ci sed -e \ 7462306a36Sopenharmony_ci 's,^#ifndef _NOLIBC_ARCH_X86_64_H,#if !defined(_NOLIBC_ARCH_X86_64_H) \&\& defined(__x86_64__),' \ 7562306a36Sopenharmony_ci arch-x86_64.h; \ 7662306a36Sopenharmony_ci sed -e \ 7762306a36Sopenharmony_ci 's,^#ifndef _NOLIBC_ARCH_I386_H,#if !defined(_NOLIBC_ARCH_I386_H) \&\& !defined(__x86_64__),' \ 7862306a36Sopenharmony_ci arch-i386.h; \ 7962306a36Sopenharmony_ci elif [ -e "$(arch_file)" ]; then \ 8062306a36Sopenharmony_ci cat $(arch_file); \ 8162306a36Sopenharmony_ci else \ 8262306a36Sopenharmony_ci echo "Fatal: architecture $(ARCH) not yet supported by nolibc." >&2; \ 8362306a36Sopenharmony_ci exit 1; \ 8462306a36Sopenharmony_ci fi > $(OUTPUT)sysroot/include/arch.h 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ciheaders_standalone: headers 8762306a36Sopenharmony_ci $(Q)$(MAKE) -C $(srctree) headers 8862306a36Sopenharmony_ci $(Q)$(MAKE) -C $(srctree) headers_install INSTALL_HDR_PATH=$(OUTPUT)sysroot 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ciclean: 9162306a36Sopenharmony_ci $(call QUIET_CLEAN, nolibc) rm -rf "$(OUTPUT)sysroot" 92