aboutsummaryrefslogtreecommitdiffstats
path: root/rules.mk
blob: a0a9a5d2023b818735ba5d70aeb38d2b0da3533c (plain) ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES))BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD))TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION))export EXTRA_OPTIMIZATION:=$(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION))TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX))BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX))SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})export SHELL:=/usr/bin/env bash OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH))ifeq ($(ARCH),powerpc) FPIC:=-fPIC else FPIC:=-fpic endifHOST_FPIC:=-fPIC ARCH_SUFFIX:=$(call qstrip,$(CONFIG_CPU_TYPE))GCC_ARCH:=ifneq ($(ARCH_SUFFIX),) ARCH_SUFFIX:=_$(ARCH_SUFFIX)endififneq ($(filter -march=armv%,$(TARGET_OPTIMIZATION)),) GCC_ARCH:=$(patsubst -march=%,%,$(filter -march=armv%,$(TARGET_OPTIMIZATION)))endififdef CONFIG_HAS_SPE_FPU TARGET_SUFFIX:=$(TARGET_SUFFIX)spe endififdef CONFIG_MIPS64_ABI ifneq ($(CONFIG_MIPS64_ABI_O32),y) ARCH_SUFFIX:=$(ARCH_SUFFIX)_$(call qstrip,$(CONFIG_MIPS64_ABI)) endifendifDL_DIR:=$(if$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(TOPDIR)/dl)BIN_DIR:=$(if$(call qstrip,$(CONFIG_BINARY_FOLDER)),$(call qstrip,$(CONFIG_BINARY_FOLDER)),$(TOPDIR)/bin/$(BOARD))INCLUDE_DIR:=$(TOPDIR)/include SCRIPT_DIR:=$(TOPDIR)/scripts BUILD_DIR_BASE:=$(TOPDIR)/build_dir BUILD_DIR_HOST:=$(BUILD_DIR_BASE)/host STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION)) LIBC:=$(call qstrip,$(CONFIG_LIBC)) LIBCV:=$(call qstrip,$(CONFIG_LIBC_VERSION))REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if$(TARGET_SUFFIX),-$(TARGET_SUFFIX))GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux DIR_SUFFIX:=_$(LIBC)-$(LIBCV)$(if$(CONFIG_arm),_eabi) BIN_DIR:=$(BIN_DIR)$(if$(CONFIG_USE_MUSL),,-$(LIBC))TARGET_DIR_NAME= target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if$(BUILD_SUFFIX),_$(BUILD_SUFFIX))TOOLCHAIN_DIR_NAME= toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)else ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)GNU_TARGET_NAME=$(call qstrip,$(CONFIG_TARGET_NAME)) elseGNU_TARGET_NAME=$(shell gcc -dumpmachine) endifREAL_GNU_TARGET_NAME=$(GNU_TARGET_NAME) TARGET_DIR_NAME:=target-$(GNU_TARGET_NAME)$(if$(BUILD_SUFFIX),_$(BUILD_SUFFIX)) TOOLCHAIN_DIR_NAME:=toolchain-$(GNU_TARGET_NAME)endifPACKAGE_DIR:=$(BIN_DIR)/packages BUILD_DIR:=$(BUILD_DIR_BASE)/$(TARGET_DIR_NAME)STAGING_DIR:=$(TOPDIR)/staging_dir/$(TARGET_DIR_NAME)BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/$(TOOLCHAIN_DIR_NAME)TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/$(TOOLCHAIN_DIR_NAME)STAMP_DIR:=$(BUILD_DIR)/stamp STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp TARGET_ROOTFS_DIR?=$(if$(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(BUILD_DIR))TARGET_DIR:=$(TARGET_ROOTFS_DIR)/root-$(BOARD)STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD)BUILD_LOG_DIR:=$(TOPDIR)/logs PKG_INFO_DIR:=$(STAGING_DIR)/pkginfo TARGET_PATH:=$(subst $(space),:,$(filter-out .,$(filter-out ./,$(subst :,$(space),$(PATH)))))TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if$(CONFIG_DEBUG), -g3)$(EXTRA_OPTIMIZATION)TARGET_CXXFLAGS=$(TARGET_CFLAGS)TARGET_ASFLAGS_DEFAULT=$(TARGET_CFLAGS)TARGET_ASFLAGS=$(TARGET_ASFLAGS_DEFAULT)TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include TARGET_LDFLAGS:=-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib ifneq ($(CONFIG_EXTERNAL_TOOLCHAIN),)LIBGCC_S_PATH=$(realpath $(wildcard $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC))))LIBGCC_S=$(if$(LIBGCC_S_PATH),-L$(dir $(LIBGCC_S_PATH)) -lgcc_s)LIBGCC_A=$(realpath $(lastword $(wildcard $(dir $(LIBGCC_S_PATH))/gcc/*/*/libgcc.a)))elseLIBGCC_A=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a))LIBGCC_S=$(if$(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(LIBGCC_A))endifLIBRPC=-lrpc LIBRPC_DEPENDS=+librpc ifeq ($(CONFIG_ARCH_64BIT),y) LIB_SUFFIX:=64endififndef DUMP ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) -include $(TOOLCHAIN_DIR)/info.mkexport GCC_HONOUR_COPTS:=0 TARGET_CROSS:=$(if$(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if$(TARGET_SUFFIX),-$(TARGET_SUFFIX))-)TARGET_CFLAGS+= -fhonour-copts $(if$(CONFIG_GCC_VERSION_4_4)$(CONFIG_GCC_VERSION_4_5),,-Wno-error=unused-but-set-variable)TARGET_CPPFLAGS+= -I$(TOOLCHAIN_DIR)/usr/include -I$(TOOLCHAIN_DIR)/include/fortify -I$(TOOLCHAIN_DIR)/include TARGET_LDFLAGS+= -L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH) else ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) TARGET_CROSS:=$(call qstrip,$(CONFIG_TOOLCHAIN_PREFIX)) TOOLCHAIN_ROOT_DIR:=$(call qstrip,$(CONFIG_TOOLCHAIN_ROOT)) TOOLCHAIN_BIN_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_BIN_PATH))) TOOLCHAIN_INC_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_INC_PATH))) TOOLCHAIN_LIB_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_LIB_PATH))) ifneq ($(TOOLCHAIN_BIN_DIRS),) TARGET_PATH:=$(subst $(space),:,$(TOOLCHAIN_BIN_DIRS)):$(TARGET_PATH) endif ifneq ($(TOOLCHAIN_INC_DIRS),)TARGET_CPPFLAGS+=$(patsubst %,-I%,$(TOOLCHAIN_INC_DIRS)) endif ifneq ($(TOOLCHAIN_LIB_DIRS),)TARGET_LDFLAGS+=$(patsubst %,-L%,$(TOOLCHAIN_LIB_DIRS)) endif TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH) endif endifendifTARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(TARGET_PATH)ifeq ($(CONFIG_SOFT_FLOAT),y) SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft ifeq ($(CONFIG_arm),y)TARGET_CFLAGS+= -mfloat-abi=soft elseTARGET_CFLAGS+= -msoft-float endifelse SOFT_FLOAT_CONFIG_OPTION:= ifeq ($(CONFIG_arm),y)TARGET_CFLAGS+= -mfloat-abi=hard endifendifexport PATH:=$(TARGET_PATH)exportSTAGING_DIRexport SH_FUNC:=. $(INCLUDE_DIR)/shell.sh;PKG_CONFIG:=$(STAGING_DIR_HOST)/bin/pkg-config exportPKG_CONFIGHOSTCC:=gcc HOSTCXX:=g++ HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include -I$(STAGING_DIR_HOST)/usr/include HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS)HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib -L$(STAGING_DIR_HOST)/usr/lib ifeq ($(CONFIG_GCC_VERSION_4_4)$(CONFIG_GCC_VERSION_4_6)$(CONFIG_EXTERNAL_TOOLCHAIN),) TARGET_AR:=$(TARGET_CROSS)gcc-ar TARGET_RANLIB:=$(TARGET_CROSS)gcc-ranlib TARGET_NM:=$(TARGET_CROSS)gcc-nm else TARGET_AR:=$(TARGET_CROSS)ar TARGET_RANLIB:=$(TARGET_CROSS)ranlib TARGET_NM:=$(TARGET_CROSS)nm endifBUILD_KEY=$(TOPDIR)/key-build TARGET_CC:=$(TARGET_CROSS)gcc TARGET_CXX:=$(TARGET_CROSS)g++ KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh SED:=$(STAGING_DIR_HOST)/bin/sed -i -e CP:=cp -fpR LN:=ln -sf XARGS:=xargs -r BASH:=bash TAR:=tar FIND:=find PATCH:=patch PYTHON:=python INSTALL_BIN:=install -m0755 INSTALL_DIR:=install -d -m0755 INSTALL_DATA:=install -m0644 INSTALL_CONF:=install -m0600 TARGET_CC_NOCACHE:=$(TARGET_CC)TARGET_CXX_NOCACHE:=$(TARGET_CXX)HOSTCC_NOCACHE:=$(HOSTCC)HOSTCXX_NOCACHE:=$(HOSTCXX)exportTARGET_CC_NOCACHEexportTARGET_CXX_NOCACHEexportHOSTCC_NOCACHEifneq ($(CONFIG_CCACHE),) TARGET_CC:= ccache_cc TARGET_CXX:= ccache_cxx HOSTCC:= ccache $(HOSTCC) HOSTCXX:= ccache $(HOSTCXX)endifTARGET_CONFIGURE_OPTS=\AR="$(TARGET_AR)"\AS="$(TARGET_CC) -c $(TARGET_ASFLAGS)"\LD=$(TARGET_CROSS)ld \NM="$(TARGET_NM)"\CC="$(TARGET_CC)"\GCC="$(TARGET_CC)"\CXX="$(TARGET_CXX)"\RANLIB="$(TARGET_RANLIB)"\STRIP=$(TARGET_CROSS)strip \OBJCOPY=$(TARGET_CROSS)objcopy \OBJDUMP=$(TARGET_CROSS)objdump \SIZE=$(TARGET_CROSS)size # strip an entire directoryifneq ($(CONFIG_NO_STRIP),) RSTRIP:=: STRIP:=: else ifneq ($(CONFIG_USE_STRIP),) STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS)) else ifneq ($(CONFIG_USE_SSTRIP),) STRIP:=$(STAGING_DIR_HOST)/bin/sstrip endif endif RSTRIP:=\exportCROSS="$(TARGET_CROSS)"\$(if$(CONFIG_KERNEL_KALLSYMS),NO_RENAME=1)\$(if$(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1);\NM="$(TARGET_CROSS)nm"\STRIP="$(STRIP)"\STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh"\PATCHELF="$(STAGING_DIR_HOST)/bin/patchelf"\$(SCRIPT_DIR)/rstrip.sh endififeq ($(CONFIG_IPV6),y) DISABLE_IPV6:=else DISABLE_IPV6:=--disable-ipv6 endifTAR_OPTIONS:=-xf - ifeq ($(CONFIG_BUILD_LOG),y) BUILD_LOG:=1endifexport BISON_PKGDATADIR:=$(STAGING_DIR_HOST)/share/bison export M4:=$(STAGING_DIR_HOST)/bin/m4 define shvarV_$(subst.,_,$(subst-,_,$(subst /,_,$(1))))endefdefine shexportexport $(callshvar,$(1))=$$(call$(1))endefdefine include_mk$(eval-include$(if$(DUMP),,$(STAGING_DIR)/mk/$(strip$(1))))endef# Execute commands under flock# $(1) => The shell expression.# $(2) => The lock name. If not given, the global lock will be used.define lockedSHELL=\$(STAGING_DIR_HOST)/bin/flock \$(TMP_DIR)/.$(if$(2),$(strip $(2)),global).flock \ -c '$(subst ','\'',$(1))'endef# Recursively copy paths into another directory, purge dangling# symlinks before.# $(1) => File glob expression# $(2) => Destination directorydefine file_copyfor src_dir in $(sort $(foreach d,$(wildcard $(1)),$(dir $(d))));do\(cd$$src_dir; find -type f -or -type d )|\(cd$(2);while :;do\read FILE;\[ -z "$$FILE"]&& break;\[ -L "$$FILE"]||continue;\echo"Removing symlink $(2)/$$FILE";\ rm -f "$$FILE";\done;);\done;\$(CP)$(1)$(2)endef# file extensionext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1)))all:FORCE: ; .PHONY:FORCEval.%: @$(if$(filter undefined,$(origin $*)),\echo"$* undefined" >&2, \echo'$(subst ','"'"',$($*))' \ )var.%: @$(if$(filter undefined,$(origin $*)),\echo"$* undefined" >&2, \echo"$*='"'$(subst ','"'\"'\"'"',$($*))'"'" \ )endif #__rules_inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
pre { line-height: 125%; margin: 0; }
td.linenos pre { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; }
span.linenos { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; }
td.linenos pre.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #ffffff; }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
--  Bug handling
--  Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold
--
--  GHDL is free software; you can redistribute it and/or modify it under
--  the terms of the GNU General Public License as published by the Free
--  Software Foundation; either version 2, or (at your option) any later
--  version.
--
--  GHDL is distributed in the hope that it will be useful, but WITHOUT ANY
--  WARRANTY; without even the implied warranty of MERCHANTABILITY or
--  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
--  for more details.
--
--  You should have received a copy of the GNU General Public License
--  along with GHDL; see the file COPYING.  If not, write to the Free
--  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
--  02111-1307, USA.
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Command_Line; use Ada.Command_Line;
with GNAT.Directory_Operations;
with Version; use Version;

package body Bug is
   --  Declared in the files generated by gnatbind.
   --  Note: since the string is exported with C convension, there is no way
   --  to know the length (gnat1 crashes if the string is unconstrained).
   --  Hopefully, the format of the string seems to be fixed.
   --  We don't use GNAT.Compiler_Version because it doesn't exist
   --   in gnat 3.15p
   GNAT_Version : constant String (1 .. 31 + 15);
   pragma Import (C, GNAT_Version, "__gnat_version");

   function Get_Gnat_Version return String
   is
      C : Character;
   begin
      for I in GNAT_Version'Range loop
         C := GNAT_Version (I);
         case C is
            when ' '
              | 'A' .. <
#
# Copyright (C) 2006-2010 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

ifneq ($(__rules_inc),1)
__rules_inc=1

ifeq ($(DUMP),)
  -include $(TOPDIR)/.config
endif
include $(TOPDIR)/include/debug.mk
include $(TOPDIR)/include/verbose.mk

export TMP_DIR:=$(TOPDIR)/tmp

qstrip=$(strip $(subst ",,$(1)))
#"))

empty:=
space:= $(empty) $(empty)
comma:=,
merge=$(subst $(space),,$(1))
confvar=$(call merge,$(foreach v,$(1),$(if $($(v)),y,n)))
strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1))

define sep

endef

define newline


endef

_SINGLE=export MAKEFLAGS=$(space);
CFLAGS:=
ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH