From e4d332c787e57abc32dec949ca8def57feae32ce Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Fri, 28 Oct 2016 18:44:24 +0200 Subject: add new toplevel infrastructure --- Rules.mak | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 Rules.mak (limited to 'Rules.mak') diff --git a/Rules.mak b/Rules.mak new file mode 100644 index 0000000..39ed7e3 --- /dev/null +++ b/Rules.mak @@ -0,0 +1,184 @@ +# Rules.mak for uClibc +# +# Copyright (C) 2000-2008 Erik Andersen +# +# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +# + +# make nano-doc +# FOO = bar -- recursively expanded variable. Value is remebered verbatim. +# If it contains references to other variables, these references +# are expanded whenever this variable is _substituted_. +# FOO := bar -- simply expanded variable. Right hand is expanded when +# the variable is _defined_. Therefore faster than =. +# FOO ?= bar -- set a value only if it is not already set +# (behaves as =, not :=). +# FOO += bar -- append; if FOO is not defined, acts like = (not :=). + + +# check for proper make version +ifneq ($(findstring x3.7,x$(MAKE_VERSION)),) +$(error Your make is too old $(MAKE_VERSION). Go get at least 3.80) +endif + +#----------------------------------------------------------- +# This file contains rules which are shared between multiple +# Makefiles. All normal configuration options live in the +# file named ".config". Don't mess with this file unless +# you know what you are doing. + +clean_targets := clean realclean distclean \ + objclean-y headers_clean-y CLEAN_utils +noconfig_targets := menuconfig config nconfig \ + oldaskconfig silentoldconfig oldconfig allnoconfig allyesconfig \ + alldefconfig randconfig defconfig savedefconfig listnewconfig \ + olddefconfig \ + xconfig gconfig update-po-config mconf qconf gconf nconf conf \ + release dist tags help + + +#----------------------------------------------------------- +# If you are running a cross compiler, you will want to set +# 'CROSS_COMPILE' to something more interesting ... Target +# architecture is determined by asking the CC compiler what +# arch it compiles things for, so unless your compiler is +# broken, you should not need to specify TARGET_ARCH. +# +# Most people will set this stuff on the command line, i.e. +# make CROSS_COMPILE=arm-linux- +# will build uClibc for 'arm'. +# CROSS is still supported for backward compatibily only + +CROSS_COMPILE ?= $(CROSS) + +CC = $(CROSS_COMPILE)gcc +AR = $(CROSS_COMPILE)ar +LD = $(CROSS_COMPILE)ld +NM = $(CROSS_COMPILE)nm +OBJDUMP = $(CROSS_COMPILE)objdump +STRIPTOOL = $(CROSS_COMPILE)strip + +INSTALL = install +LN = ln +RM = rm -f +TAR = tar +SED = sed +AWK = awk + +STRIP_FLAGS ?= -x -R .note -R .comment + +# Select the compiler needed to build binaries for your development system +HOSTCC = gcc +BUILD_CFLAGS = -Os + +#--------------------------------------------------------- +# Nothing beyond this point should ever be touched by mere +# mortals. Unless you hang out with the gods, you should +# probably leave all this stuff alone. + +# strip quotes +qstrip = $(strip $(subst ",,$(1))) +#")) + +TARGET_ARCH:=$(call qstrip,$(TARGET_ARCH)) +ifeq ($(TARGET_ARCH),) +ARCH ?= $(shell uname -m | $(SED) -e s/i.86/i386/ \ + -e s/sun.*/sparc/ -e s/sparc.*/sparc/ \ + -e s/arm.*/arm/ -e s/sa110/arm/ \ + -e s/nds32.*/nds32/ \ + -e s/sh.*/sh/ \ + -e s/s390x/s390/ -e s/parisc.*/hppa/ \ + -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \ + -e s/xtensa.*/xtensa/ ) +else +ARCH = $(TARGET_ARCH) +endif +export ARCH + +# Make certain these contain a final "/", but no "//"s. +scrub_path = $(strip $(subst //,/, $(subst ,/, $(call qstrip,$(1))))) +TARGET_SUBARCH := $(call qstrip,$(TARGET_SUBARCH)) +RUNTIME_PREFIX := $(call scrub_path,$(RUNTIME_PREFIX)) +DEVEL_PREFIX := $(call scrub_path,$(DEVEL_PREFIX)) +MULTILIB_DIR := $(call scrub_path,$(MULTILIB_DIR)) +KERNEL_HEADERS := $(call scrub_path,$(KERNEL_HEADERS)) +export RUNTIME_PREFIX DEVEL_PREFIX KERNEL_HEADERS MULTILIB_DIR + +# Make sure DESTDIR and PREFIX can be used to install +# PREFIX is a uClibcism while DESTDIR is a common GNUism +ifndef PREFIX +PREFIX = $(DESTDIR) +endif + +comma:=, +space:= # + +ifeq ($(CROSS_COMPILE),) +CROSS_COMPILE=$(call qstrip,$(CROSS_COMPILER_PREFIX)) +endif + +# A nifty macro to make testing gcc features easier +check_gcc=$(shell \ + if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ + then echo "$(1)"; else echo "$(2)"; fi) +check_as=$(shell \ + if $(CC) -Wa,$(1) -Wa,-Z -c -o /dev/null -xassembler /dev/null > /dev/null 2>&1; \ + then echo "-Wa,$(1)"; fi) +check_ld=$(shell \ + if $(CC) $(LDFLAG-fuse-ld) $(CFLAG_-Wl--no-warn-mismatch) -Wl,$(1) $(CFLAG_-nostdlib) -o /dev/null -Wl,-b,binary /dev/null > /dev/null 2>&1; \ + then echo "$(1)"; fi) + +# Use variable indirection here so that we can have variable +# names with fun chars in them like equal signs +define check-tool-var +ifeq ($(filter $(clean_targets) CLEAN_%,$(MAKECMDGOALS)),) +_v = $(2)_$(3) +ifndef $$(_v) +$$(_v) := $$(call $(1),$(subst %, ,$(3))) +export $$(_v) +endif +endif +endef + +# Usage: check-gcc-var, +# Check the C compiler to see if it supports . +# Export the variable CFLAG_ if it does. +define check-gcc-var +$(call check-tool-var,check_gcc,CFLAG,$(1)) +endef +# Usage: check-as-var, +# Check the assembler to see if it supports . Export the +# variable ASFLAG_ if it does (for invoking the assembler), +# as well CFLAG_-Wa (for invoking the compiler driver). +define check-as-var +$(call check-tool-var,check_as,ASFLAG,$(1)) +_v = CFLAG_-Wa$(1) +export $$(_v) = $$(if $$(ASFLAG_$(1)),-Wa$$(comma)$$(ASFLAG_$(1))) +endef +# Usage: check-ld-var, +# Check the linker to see if it supports . Export the +# variable LDFLAG_ if it does (for invoking the linker), +# as well CFLAG_-Wl (for invoking the compiler driver). +define check-ld-var +$(call check-tool-var,check_ld,LDFLAG,$(1)) +_v = CFLAG_-Wl$(1) +export $$(_v) = $$(if $$(LDFLAG_$(1)),-Wl$$(comma)$$(LDFLAG_$(1))) +endef +# Usage: cache-output-var,, +# Execute and cache the output in . +define cache-output-var +ifndef $(1) +$(1) := $$(shell $(2)) +export $(1) +endif +endef + + +ARFLAGS:=cr + +ifneq ($(strip $(UCLIBC_EXTRA_CFLAGS)),"") +CFLAGS += $(call qstrip,$(UCLIBC_EXTRA_CFLAGS)) +endif +ifneq ($(strip $(UCLIBC_EXTRA_LDFLAGS)),"") +LDFLAGS += $(call qstrip,$(UCLIBC_EXTRA_LDFLAGS)) +endif -- cgit v1.2.3