115 lines · 2.7 KB · Makefile
RawDownload
# SPDX-License-Identifier: GPL-2.0# Makefile for nolibc installation and testsinclude ../../scripts/Makefile.include # we're in ".../tools/include/nolibc"ifeq ($(srctree),)srctree := $(patsubst %/tools/include/,%,$(dir $(CURDIR)))endif # when run as make -C tools/ nolibc_<foo> the arch is not setifeq ($(ARCH),)include $(srctree)/scripts/subarch.includeARCH = $(SUBARCH)endif # OUTPUT is only set when run from the main makefile, otherwise# it defaults to this nolibc directory.OUTPUT ?= $(CURDIR)/ architectures := alpha arm arm64 loongarch m68k mips openrisc parisc powerpc riscv s390 sh sparc x86arch_files := arch.h $(addsuffix .h, $(addprefix arch-, $(architectures)))all_files := \		alloca.h \		assert.h \		byteswap.h \		compiler.h \		crt.h \		ctype.h \		dirent.h \		elf.h \		endian.h \		err.h \		errno.h \		fcntl.h \		getopt.h \		inttypes.h \		limits.h \		math.h \		nolibc.h \		poll.h \		sched.h \		signal.h \		stackprotector.h \		std.h \		stdarg.h \		stdbool.h \		stddef.h \		stdint.h \		stdlib.h \		string.h \		sys.h \		sys/auxv.h \		sys/ioctl.h \		sys/mman.h \		sys/mount.h \		sys/prctl.h \		sys/ptrace.h \		sys/random.h \		sys/reboot.h \		sys/resource.h \		sys/select.h \		sys/stat.h \		sys/syscall.h \		sys/sysmacros.h \		sys/time.h \		sys/timerfd.h \		sys/types.h \		sys/uio.h \		sys/utsname.h \		sys/wait.h \		time.h \		types.h \		unistd.h \		stdio.h \  # install all headers needed to support a bare-metal compilerall: headers install: help help:	@echo "Supported targets under nolibc:"	@echo "  all                 call \"headers\""	@echo "  clean               clean the sysroot"	@echo "  headers             prepare a multi-arch sysroot in \$${OUTPUT}sysroot"	@echo "  headers_standalone  like \"headers\", and also install kernel headers"	@echo "  help                this help"	@echo ""	@echo "These targets may also be called from tools as \"make nolibc_<target>\"."	@echo ""	@echo "Currently using the following variables:"	@echo "  ARCH    = $(ARCH)"	@echo "  OUTPUT  = $(OUTPUT)"	@echo "" # installs headers for all archs at once.headers:	$(Q)mkdir -p "$(OUTPUT)sysroot/include"	$(Q)cp --parents $(arch_files) $(all_files) "$(OUTPUT)sysroot/include/" headers_standalone: headers	$(Q)$(MAKE) -C $(srctree) headers_install INSTALL_HDR_PATH=$(OUTPUT)sysroot CFLAGS_s390 := -m64CFLAGS := $(CFLAGS_$(ARCH)) headers_check: headers_standalone	$(Q)for header in $(filter-out crt.h std.h,$(all_files)); do \		$(CC) $(CFLAGS) $(CLANG_CROSS_FLAGS) -Wall -Werror -nostdinc -fsyntax-only -x c /dev/null \			-I$(or $(objtree),$(srctree))/usr/include -include $$header -include $$header || exit 1; \	done clean:	$(call QUIET_CLEAN, nolibc) rm -rf "$(OUTPUT)sysroot"