mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 07:34:31 +00:00
Merge branch '2021-07-14-build-and-host-updates'
- Resync Kbuild with the v4.20 Linux Kernel release - Update checkpatch.pl - Assorted other tooling updates
This commit is contained in:
commit
c11f5abce8
21 changed files with 294 additions and 180 deletions
15
Kconfig
15
Kconfig
|
@ -57,6 +57,21 @@ config LOCALVERSION_AUTO
|
|||
|
||||
which is done within the script "scripts/setlocalversion".)
|
||||
|
||||
config CC_IS_GCC
|
||||
def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)
|
||||
|
||||
config GCC_VERSION
|
||||
int
|
||||
default $(shell,$(srctree)/scripts/gcc-version.sh -p $(CC) | sed 's/^0*//') if CC_IS_GCC
|
||||
default 0
|
||||
|
||||
config CC_IS_CLANG
|
||||
def_bool $(success,$(CC) --version | head -n 1 | grep -q clang)
|
||||
|
||||
config CLANG_VERSION
|
||||
int
|
||||
default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
|
||||
|
||||
config CC_OPTIMIZE_FOR_SIZE
|
||||
bool "Optimize for size"
|
||||
default y
|
||||
|
|
65
Makefile
65
Makefile
|
@ -12,10 +12,9 @@ NAME =
|
|||
# Comments in this file are targeted only to the developer, do not
|
||||
# expect to learn how to build the kernel reading this file.
|
||||
|
||||
# o Do not use make's built-in rules and variables
|
||||
# (this increases performance and avoids hard-to-debug behaviour);
|
||||
# o Look for make include files relative to root of kernel src
|
||||
MAKEFLAGS += -rR --include-dir=$(CURDIR)
|
||||
# Do not use make's built-in rules and variables
|
||||
# (this increases performance and avoids hard-to-debug behaviour)
|
||||
MAKEFLAGS += -rR
|
||||
|
||||
# Determine target architecture for the sandbox
|
||||
include include/host_arch.h
|
||||
|
@ -162,6 +161,13 @@ KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
|
|||
$(if $(KBUILD_OUTPUT),, \
|
||||
$(error failed to create output directory "$(saved-output)"))
|
||||
|
||||
# Look for make include files relative to root of kernel src
|
||||
#
|
||||
# This does not become effective immediately because MAKEFLAGS is re-parsed
|
||||
# once after the Makefile is read. It is OK since we are going to invoke
|
||||
# 'sub-make' below.
|
||||
MAKEFLAGS += --include-dir=$(CURDIR)
|
||||
|
||||
PHONY += $(MAKECMDGOALS) sub-make
|
||||
|
||||
$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
||||
|
@ -492,8 +498,7 @@ PHONY += outputmakefile
|
|||
outputmakefile:
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
$(Q)ln -fsn $(srctree) source
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
|
||||
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
|
||||
endif
|
||||
|
||||
# To make sure we do not include .config for any of the *config targets
|
||||
|
@ -572,7 +577,7 @@ else
|
|||
# Carefully list dependencies so we do not try to build scripts twice
|
||||
# in parallel
|
||||
PHONY += scripts
|
||||
scripts: scripts_basic include/config/auto.conf
|
||||
scripts: scripts_basic scripts_dtc include/config/auto.conf
|
||||
$(Q)$(MAKE) $(build)=$(@)
|
||||
|
||||
ifeq ($(dot-config),1)
|
||||
|
@ -709,6 +714,9 @@ KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
|
|||
endif
|
||||
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)
|
||||
|
||||
# disable pointer signed / unsigned warnings in gcc 4.0
|
||||
KBUILD_CFLAGS += -Wno-pointer-sign
|
||||
|
||||
# disable stringop warnings in gcc 8+
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
||||
|
||||
|
@ -739,7 +747,7 @@ endif
|
|||
KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
||||
|
||||
ifeq ($(cc-name),clang)
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
|
||||
|
@ -751,12 +759,11 @@ KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
|
|||
# See modpost pattern 2
|
||||
KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
|
||||
KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
|
||||
else
|
||||
endif
|
||||
|
||||
# These warnings generated too much noise in a regular build.
|
||||
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
||||
endif
|
||||
|
||||
# Prohibit date/time macros, which would make the build non-deterministic
|
||||
KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
|
||||
|
@ -1864,6 +1871,8 @@ endif
|
|||
|
||||
ifeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)
|
||||
prepare1: $(defaultenv_h)
|
||||
|
||||
envtools: $(defaultenv_h)
|
||||
endif
|
||||
|
||||
archprepare: prepare1 scripts_basic
|
||||
|
@ -1946,6 +1955,35 @@ $(dt_h): $(srctree)/Makefile FORCE
|
|||
$(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
|
||||
$(call filechk,defaultenv.h)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Devicetree files
|
||||
|
||||
ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)
|
||||
dtstree := arch/$(SRCARCH)/boot/dts
|
||||
endif
|
||||
|
||||
ifneq ($(dtstree),)
|
||||
|
||||
%.dtb: prepare3 scripts_dtc
|
||||
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
|
||||
|
||||
PHONY += dtbs dtbs_install
|
||||
dtbs: prepare3 scripts_dtc
|
||||
$(Q)$(MAKE) $(build)=$(dtstree)
|
||||
|
||||
dtbs_install:
|
||||
$(Q)$(MAKE) $(dtbinst)=$(dtstree)
|
||||
|
||||
ifdef CONFIG_OF_EARLY_FLATTREE
|
||||
all: dtbs
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
PHONY += scripts_dtc
|
||||
scripts_dtc: scripts_basic
|
||||
$(Q)$(MAKE) $(build)=scripts/dtc
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
quiet_cmd_cpp_lds = LDS $@
|
||||
cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \
|
||||
|
@ -2208,9 +2246,6 @@ PHONY += $(DOC_TARGETS)
|
|||
$(DOC_TARGETS): scripts_basic FORCE
|
||||
$(Q)$(MAKE) $(build)=doc $@
|
||||
|
||||
endif #ifeq ($(config-targets),1)
|
||||
endif #ifeq ($(mixed-targets),1)
|
||||
|
||||
PHONY += checkstack ubootrelease ubootversion
|
||||
|
||||
checkstack:
|
||||
|
@ -2298,13 +2333,15 @@ quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files))
|
|||
|
||||
# read all saved command lines
|
||||
|
||||
cmd_files := $(wildcard .*.cmd $(foreach f,$(sort $(targets)),$(dir $(f)).$(notdir $(f)).cmd))
|
||||
cmd_files := $(wildcard .*.cmd)
|
||||
|
||||
ifneq ($(cmd_files),)
|
||||
$(cmd_files): ; # Do not try to update included dependency files
|
||||
include $(cmd_files)
|
||||
endif
|
||||
|
||||
endif #ifeq ($(config-targets),1)
|
||||
endif #ifeq ($(mixed-targets),1)
|
||||
endif # skip-makefile
|
||||
|
||||
PHONY += FORCE
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
obj-$(CONFIG_$(SPL_TPL_)DM_RTC) += rtc-uclass.o
|
||||
|
||||
obj-$(CONFIG_RTC_AT91SAM9_RTT) += at91sam9_rtt.o
|
||||
obj-y += rtc-lib.o
|
||||
obj-$(CONFIG_RTC_ARMADA38X) += armada38x.o
|
||||
obj-$(CONFIG_RTC_DAVINCI) += davinci.o
|
||||
obj-$(CONFIG_RTC_DS1302) += ds1302.o
|
||||
|
|
|
@ -135,6 +135,7 @@ obj-$(CONFIG_SSCANF) += sscanf.o
|
|||
endif
|
||||
|
||||
obj-y += date.o
|
||||
obj-y += rtc-lib.o
|
||||
obj-$(CONFIG_LIB_ELF) += elf.o
|
||||
|
||||
#
|
||||
|
|
|
@ -142,10 +142,6 @@ cc-name = $(shell $(CC) -v 2>&1 | grep -q "clang version" && echo clang || echo
|
|||
# cc-version
|
||||
cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
|
||||
|
||||
# cc-fullversion
|
||||
cc-fullversion = $(shell $(CONFIG_SHELL) \
|
||||
$(srctree)/scripts/gcc-version.sh -p $(CC))
|
||||
|
||||
# cc-ifversion
|
||||
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
|
||||
cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3) || echo $(4))
|
||||
|
@ -193,7 +189,7 @@ modbuiltin := -f $(srctree)/scripts/Makefile.modbuiltin obj
|
|||
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.dtbinst obj=
|
||||
# Usage:
|
||||
# $(Q)$(MAKE) $(dtbinst)=dir
|
||||
dtbinst := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.dtbinst obj
|
||||
dtbinst := -f $(srctree)/scripts/Makefile.dtbinst obj
|
||||
|
||||
###
|
||||
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=
|
||||
|
|
|
@ -48,9 +48,6 @@ include scripts/Makefile.uncmd_spl
|
|||
|
||||
include scripts/Kbuild.include
|
||||
|
||||
# For backward compatibility check that these variables do not change
|
||||
save-cflags := $(CFLAGS)
|
||||
|
||||
# The filename Kbuild has precedence over Makefile
|
||||
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
|
||||
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
|
||||
|
@ -61,13 +58,6 @@ asflags-y += $(PLATFORM_CPPFLAGS)
|
|||
ccflags-y += $(PLATFORM_CPPFLAGS)
|
||||
cppflags-y += $(PLATFORM_CPPFLAGS)
|
||||
|
||||
# If the save-* variables changed error out
|
||||
ifeq ($(KBUILD_NOPEDANTIC),)
|
||||
ifneq ("$(save-cflags)","$(CFLAGS)")
|
||||
$(error CFLAGS was changed in "$(kbuild-file)". Fix it to use ccflags-y)
|
||||
endif
|
||||
endif
|
||||
|
||||
include scripts/Makefile.lib
|
||||
|
||||
# Do not include host rules unless needed
|
||||
|
@ -99,14 +89,12 @@ __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
|
|||
@:
|
||||
|
||||
# Linus' kernel sanity checking tool
|
||||
ifneq ($(KBUILD_CHECKSRC),0)
|
||||
ifeq ($(KBUILD_CHECKSRC),2)
|
||||
quiet_cmd_force_checksrc = CHECK $<
|
||||
cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
|
||||
else
|
||||
quiet_cmd_checksrc = CHECK $<
|
||||
cmd_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
|
||||
endif
|
||||
ifeq ($(KBUILD_CHECKSRC),1)
|
||||
quiet_cmd_checksrc = CHECK $<
|
||||
cmd_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
|
||||
else ifeq ($(KBUILD_CHECKSRC),2)
|
||||
quiet_cmd_force_checksrc = CHECK $<
|
||||
cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
|
||||
endif
|
||||
|
||||
# Do section mismatch analysis for each module/built-in.o
|
||||
|
@ -369,21 +357,8 @@ $(lib-target): $(lib-y) FORCE
|
|||
targets += $(lib-target)
|
||||
endif
|
||||
|
||||
#
|
||||
# Rule to link composite objects
|
||||
#
|
||||
# Composite objects are specified in kbuild makefile as follows:
|
||||
# <composite-object>-objs := <list of .o files>
|
||||
# or
|
||||
# <composite-object>-y := <list of .o files>
|
||||
link_multi_deps = \
|
||||
$(filter $(addprefix $(obj)/, \
|
||||
$($(subst $(obj)/,,$(@:.o=-objs))) \
|
||||
$($(subst $(obj)/,,$(@:.o=-y)))), $^)
|
||||
|
||||
|
||||
quiet_cmd_link_multi-y = AR $@
|
||||
cmd_link_multi-y = rm -f $@; $(AR) cDPrsT$(KBUILD_ARFLAGS) $@ $(link_multi_deps)
|
||||
cmd_link_multi-y = rm -f $@; $(AR) cDPrsT$(KBUILD_ARFLAGS) $@ $(filter %.o,$^)
|
||||
|
||||
quiet_cmd_link_multi-m = AR [M] $@
|
||||
cmd_link_multi-m = $(cmd_link_multi-y)
|
||||
|
@ -394,7 +369,7 @@ $(call multi_depend, $(multi-used-y), .o, -objs -y)
|
|||
|
||||
$(multi-used-m): FORCE
|
||||
$(call if_changed,link_multi-m)
|
||||
@{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
|
||||
@{ echo $(@:.o=.ko); echo $(filter %.o,$^); } > $(MODVERDIR)/$(@F:.o=.mod)
|
||||
$(call multi_depend, $(multi-used-m), .o, -objs -y)
|
||||
|
||||
targets += $(multi-used-y) $(multi-used-m)
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
# are not supported by all versions of the compiler
|
||||
# ==========================================================================
|
||||
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned)
|
||||
|
||||
ifeq ("$(origin W)", "command line")
|
||||
export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W)
|
||||
endif
|
||||
|
@ -25,7 +27,11 @@ warning-1 += $(call cc-option, -Wmissing-prototypes)
|
|||
warning-1 += -Wold-style-definition
|
||||
warning-1 += $(call cc-option, -Wmissing-include-dirs)
|
||||
warning-1 += $(call cc-option, -Wunused-but-set-variable)
|
||||
warning-1 += $(call cc-option, -Wunused-const-variable)
|
||||
warning-1 += $(call cc-option, -Wpacked-not-aligned)
|
||||
warning-1 += $(call cc-option, -Wstringop-truncation)
|
||||
warning-1 += $(call cc-disable-warning, missing-field-initializers)
|
||||
warning-1 += $(call cc-disable-warning, sign-compare)
|
||||
|
||||
warning-2 := -Waggregate-return
|
||||
warning-2 += -Wcast-align
|
||||
|
@ -34,6 +40,9 @@ warning-2 += -Wnested-externs
|
|||
warning-2 += -Wshadow
|
||||
warning-2 += $(call cc-option, -Wlogical-op)
|
||||
warning-2 += $(call cc-option, -Wmissing-field-initializers)
|
||||
warning-2 += $(call cc-option, -Wsign-compare)
|
||||
warning-2 += $(call cc-option, -Wmaybe-uninitialized)
|
||||
warning-2 += $(call cc-option, -Wunused-macros)
|
||||
|
||||
warning-3 := -Wbad-function-cast
|
||||
warning-3 += -Wcast-qual
|
||||
|
|
|
@ -320,7 +320,7 @@ quiet_cmd_dtc = DTC $@
|
|||
# Bring in any U-Boot-specific include at the end of the file
|
||||
cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \
|
||||
(cat $<; $(if $(u_boot_dtsi),echo '$(pound)include "$(u_boot_dtsi)"')) > $(pre-tmp); \
|
||||
$(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $(pre-tmp) ; \
|
||||
$(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $(pre-tmp) ; \
|
||||
$(DTC) -O dtb -o $@ -b 0 \
|
||||
-i $(dir $<) $(DTC_FLAGS) \
|
||||
-d $(depfile).dtc.tmp $(dtc-tmp) || \
|
||||
|
|
|
@ -257,13 +257,9 @@ static void parse_config_file(const char *p)
|
|||
/*
|
||||
* U-Boot also handles
|
||||
* CONFIG_IS_ENABLED(...)
|
||||
* CONFIG_IS_BUILTIN(...)
|
||||
* CONFIG_IS_MODULE(...)
|
||||
* CONFIG_VAL(...)
|
||||
*/
|
||||
if ((q - p == 10 && !memcmp(p, "IS_ENABLED(", 11)) ||
|
||||
(q - p == 10 && !memcmp(p, "IS_BUILTIN(", 11)) ||
|
||||
(q - p == 9 && !memcmp(p, "IS_MODULE(", 10)) ||
|
||||
(q - p == 3 && !memcmp(p, "VAL(", 4))) {
|
||||
p = q + 1;
|
||||
q = p;
|
||||
|
|
23
scripts/clang-version.sh
Executable file
23
scripts/clang-version.sh
Executable file
|
@ -0,0 +1,23 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# clang-version [-p] clang-command
|
||||
#
|
||||
# Prints the compiler version of `clang-command' in a canonical 4-digit form
|
||||
# such as `0500' for clang-5.0 etc.
|
||||
#
|
||||
# With the -p option, prints the patchlevel as well, for example `050001' for
|
||||
# clang-5.0.1 etc.
|
||||
#
|
||||
|
||||
compiler="$*"
|
||||
|
||||
if ! ( $compiler --version | grep -q clang) ; then
|
||||
echo 0
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MAJOR=$(echo __clang_major__ | $compiler -E -x c - | tail -n 1)
|
||||
MINOR=$(echo __clang_minor__ | $compiler -E -x c - | tail -n 1)
|
||||
PATCHLEVEL=$(echo __clang_patchlevel__ | $compiler -E -x c - | tail -n 1)
|
||||
printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
|
|
@ -1,4 +1,5 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# gcc-version [-p] gcc-command
|
||||
#
|
||||
|
@ -22,10 +23,10 @@ if [ ${#compiler} -eq 0 ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
MAJOR=$(echo __GNUC__ | $compiler -E -xc - | tail -n 1)
|
||||
MINOR=$(echo __GNUC_MINOR__ | $compiler -E -xc - | tail -n 1)
|
||||
MAJOR=$(echo __GNUC__ | $compiler -E -x c - | tail -n 1)
|
||||
MINOR=$(echo __GNUC_MINOR__ | $compiler -E -x c - | tail -n 1)
|
||||
if [ "x$with_patchlevel" != "x" ] ; then
|
||||
PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -xc - | tail -n 1)
|
||||
PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -x c - | tail -n 1)
|
||||
printf "%02d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
|
||||
else
|
||||
printf "%02d%02d\\n" $MAJOR $MINOR
|
||||
|
|
|
@ -10,7 +10,7 @@ set -ue
|
|||
|
||||
: "${OBJCOPY:=${CROSS_COMPILE:-}objcopy}"
|
||||
|
||||
ENV_OBJ_FILE="built-in.o"
|
||||
ENV_OBJ_FILE="common.o"
|
||||
ENV_OBJ_FILE_COPY="copy_${ENV_OBJ_FILE}"
|
||||
|
||||
echoerr() { echo "$@" 1>&2; }
|
||||
|
@ -32,7 +32,8 @@ cp ${env_obj_file_path} ${ENV_OBJ_FILE_COPY}
|
|||
# NOTE: objcopy saves its output to file passed in
|
||||
# (copy_${ENV_OBJ_FILE} in this case)
|
||||
|
||||
${OBJCOPY} -O binary -j ".rodata.default_environment" ${ENV_OBJ_FILE_COPY}
|
||||
${OBJCOPY} --dump-section .rodata.default_environment=${ENV_OBJ_FILE_COPY} \
|
||||
${env_obj_file_path}
|
||||
|
||||
# Replace default '\0' with '\n' and sort entries
|
||||
tr '\0' '\n' < ${ENV_OBJ_FILE_COPY} | sort --field-separator== -k1,1 --stable
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
#!/usr/bin/env perl
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# (c) 2007, Joe Perches <joe@perches.com>
|
||||
# created from checkpatch.pl
|
||||
#
|
||||
|
@ -7,8 +9,6 @@
|
|||
#
|
||||
# usage: perl scripts/get_maintainer.pl [OPTIONS] <patch>
|
||||
# perl scripts/get_maintainer.pl [OPTIONS] -f <file>
|
||||
#
|
||||
# Licensed under the terms of the GNU GPL License version 2
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
@ -19,6 +19,7 @@ my $V = '0.26';
|
|||
use Getopt::Long qw(:config no_auto_abbrev);
|
||||
use Cwd;
|
||||
use File::Find;
|
||||
use File::Spec::Functions;
|
||||
|
||||
my $cur_path = fastgetcwd() . '/';
|
||||
my $lk_path = "./";
|
||||
|
@ -26,7 +27,9 @@ my $email = 1;
|
|||
my $email_usename = 1;
|
||||
my $email_maintainer = 1;
|
||||
my $email_reviewer = 1;
|
||||
my $email_fixes = 1;
|
||||
my $email_list = 1;
|
||||
my $email_moderated_list = 1;
|
||||
my $email_subscriber_list = 0;
|
||||
my $email_git_penguin_chiefs = 0;
|
||||
my $email_git = 0;
|
||||
|
@ -48,24 +51,31 @@ my $output_roles = 0;
|
|||
my $output_rolestats = 1;
|
||||
my $output_section_maxlen = 50;
|
||||
my $scm = 0;
|
||||
my $tree = 1;
|
||||
my $web = 0;
|
||||
my $subsystem = 0;
|
||||
my $status = 0;
|
||||
my $letters = "";
|
||||
my $keywords = 1;
|
||||
my $sections = 0;
|
||||
my $file_emails = 0;
|
||||
my $email_file_emails = 0;
|
||||
my $from_filename = 0;
|
||||
my $pattern_depth = 0;
|
||||
my $self_test = undef;
|
||||
my $version = 0;
|
||||
my $help = 0;
|
||||
my $find_maintainer_files = 1;
|
||||
|
||||
my $find_maintainer_files = 0;
|
||||
my $maintainer_path;
|
||||
my $vcs_used = 0;
|
||||
|
||||
my $exit = 0;
|
||||
|
||||
my @files = ();
|
||||
my @fixes = (); # If a patch description includes Fixes: lines
|
||||
my @range = ();
|
||||
my @keyword_tvi = ();
|
||||
my @file_emails = ();
|
||||
|
||||
my %commit_author_hash;
|
||||
my %commit_signer_hash;
|
||||
|
||||
|
@ -245,6 +255,8 @@ if (!GetOptions(
|
|||
'r!' => \$email_reviewer,
|
||||
'n!' => \$email_usename,
|
||||
'l!' => \$email_list,
|
||||
'fixes!' => \$email_fixes,
|
||||
'moderated!' => \$email_moderated_list,
|
||||
's!' => \$email_subscriber_list,
|
||||
'multiline!' => \$output_multiline,
|
||||
'roles!' => \$output_roles,
|
||||
|
@ -253,14 +265,16 @@ if (!GetOptions(
|
|||
'subsystem!' => \$subsystem,
|
||||
'status!' => \$status,
|
||||
'scm!' => \$scm,
|
||||
'tree!' => \$tree,
|
||||
'web!' => \$web,
|
||||
'letters=s' => \$letters,
|
||||
'pattern-depth=i' => \$pattern_depth,
|
||||
'k|keywords!' => \$keywords,
|
||||
'sections!' => \$sections,
|
||||
'fe|file-emails!' => \$file_emails,
|
||||
'fe|file-emails!' => \$email_file_emails,
|
||||
'f|file' => \$from_filename,
|
||||
'find-maintainer-files' => \$find_maintainer_files,
|
||||
'mpath|maintainer-path=s' => \$maintainer_path,
|
||||
'self-test:s' => \$self_test,
|
||||
'v|version' => \$version,
|
||||
'h|help|usage' => \$help,
|
||||
|
@ -317,7 +331,7 @@ if ($email &&
|
|||
die "$P: Please select at least 1 email option\n";
|
||||
}
|
||||
|
||||
if (!top_of_kernel_tree($lk_path)) {
|
||||
if ($tree && !top_of_kernel_tree($lk_path)) {
|
||||
die "$P: The current directory does not appear to be "
|
||||
. "a U-Boot source tree.\n";
|
||||
}
|
||||
|
@ -382,26 +396,52 @@ sub find_ignore_git {
|
|||
read_all_maintainer_files();
|
||||
|
||||
sub read_all_maintainer_files {
|
||||
if (-d "${lk_path}MAINTAINERS") {
|
||||
opendir(DIR, "${lk_path}MAINTAINERS") or die $!;
|
||||
my @files = readdir(DIR);
|
||||
closedir(DIR);
|
||||
foreach my $file (@files) {
|
||||
push(@mfiles, "${lk_path}MAINTAINERS/$file") if ($file !~ /^\./);
|
||||
}
|
||||
my $path = "${lk_path}MAINTAINERS";
|
||||
if (defined $maintainer_path) {
|
||||
$path = $maintainer_path;
|
||||
# Perl Cookbook tilde expansion if necessary
|
||||
$path =~ s@^~([^/]*)@ $1 ? (getpwnam($1))[7] : ( $ENV{HOME} || $ENV{LOGDIR} || (getpwuid($<))[7])@ex;
|
||||
}
|
||||
|
||||
if ($find_maintainer_files) {
|
||||
find( { wanted => \&find_is_maintainer_file,
|
||||
preprocess => \&find_ignore_git,
|
||||
no_chdir => 1,
|
||||
}, "${lk_path}");
|
||||
if (-d $path) {
|
||||
$path .= '/' if ($path !~ m@/$@);
|
||||
if ($find_maintainer_files) {
|
||||
find( { wanted => \&find_is_maintainer_file,
|
||||
preprocess => \&find_ignore_git,
|
||||
no_chdir => 1,
|
||||
}, "$path");
|
||||
} else {
|
||||
opendir(DIR, "$path") or die $!;
|
||||
my @files = readdir(DIR);
|
||||
closedir(DIR);
|
||||
foreach my $file (@files) {
|
||||
push(@mfiles, "$path$file") if ($file !~ /^\./);
|
||||
}
|
||||
}
|
||||
} elsif (-f "$path") {
|
||||
push(@mfiles, "$path");
|
||||
} else {
|
||||
push(@mfiles, "${lk_path}MAINTAINERS") if -f "${lk_path}MAINTAINERS";
|
||||
die "$P: MAINTAINER file not found '$path'\n";
|
||||
}
|
||||
|
||||
die "$P: No MAINTAINER files found in '$path'\n" if (scalar(@mfiles) == 0);
|
||||
foreach my $file (@mfiles) {
|
||||
read_maintainer_file("$file");
|
||||
read_maintainer_file("$file");
|
||||
}
|
||||
}
|
||||
|
||||
sub maintainers_in_file {
|
||||
my ($file) = @_;
|
||||
|
||||
return if ($file =~ m@\bMAINTAINERS$@);
|
||||
|
||||
if (-f $file && ($email_file_emails || $file =~ /\.yaml$/)) {
|
||||
open(my $f, '<', $file)
|
||||
or die "$P: Can't open $file: $!\n";
|
||||
my $text = do { local($/) ; <$f> };
|
||||
close($f);
|
||||
|
||||
my @poss_addr = $text =~ m$[A-Za-zÀ-ÿ\"\' \,\.\+-]*\s*[\,]*\s*[\(\<\{]{0,1}[A-Za-z0-9_\.\+-]+\@[A-Za-z0-9\.-]+\.[A-Za-z0-9]+[\)\>\}]{0,1}$g;
|
||||
push(@file_emails, clean_file_emails(@poss_addr));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -485,17 +525,13 @@ sub read_mailmap {
|
|||
|
||||
## use the filenames on the command line or find the filenames in the patchfiles
|
||||
|
||||
my @files = ();
|
||||
my @range = ();
|
||||
my @keyword_tvi = ();
|
||||
my @file_emails = ();
|
||||
|
||||
if (!@ARGV) {
|
||||
push(@ARGV, "&STDIN");
|
||||
}
|
||||
|
||||
foreach my $file (@ARGV) {
|
||||
if ($file ne "&STDIN") {
|
||||
$file = canonpath($file);
|
||||
##if $file is a directory and it lacks a trailing slash, add one
|
||||
if ((-d $file)) {
|
||||
$file =~ s@([^/])$@$1/@;
|
||||
|
@ -503,11 +539,14 @@ foreach my $file (@ARGV) {
|
|||
die "$P: file '${file}' not found\n";
|
||||
}
|
||||
}
|
||||
if ($from_filename && (vcs_exists() && !vcs_file_exists($file))) {
|
||||
warn "$P: file '$file' not found in version control $!\n";
|
||||
}
|
||||
if ($from_filename || ($file ne "&STDIN" && vcs_file_exists($file))) {
|
||||
$file =~ s/^\Q${cur_path}\E//; #strip any absolute path
|
||||
$file =~ s/^\Q${lk_path}\E//; #or the path to the lk tree
|
||||
push(@files, $file);
|
||||
if ($file ne "MAINTAINERS" && -f $file && ($keywords || $file_emails)) {
|
||||
if ($file ne "MAINTAINERS" && -f $file && $keywords) {
|
||||
open(my $f, '<', $file)
|
||||
or die "$P: Can't open $file: $!\n";
|
||||
my $text = do { local($/) ; <$f> };
|
||||
|
@ -519,10 +558,6 @@ foreach my $file (@ARGV) {
|
|||
}
|
||||
}
|
||||
}
|
||||
if ($file_emails) {
|
||||
my @poss_addr = $text =~ m$[A-Za-zÀ-ÿ\"\' \,\.\+-]*\s*[\,]*\s*[\(\<\{]{0,1}[A-Za-z0-9_\.\+-]+\@[A-Za-z0-9\.-]+\.[A-Za-z0-9]+[\)\>\}]{0,1}$g;
|
||||
push(@file_emails, clean_file_emails(@poss_addr));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
my $file_cnt = @files;
|
||||
|
@ -540,7 +575,20 @@ foreach my $file (@ARGV) {
|
|||
|
||||
while (<$patch>) {
|
||||
my $patch_line = $_;
|
||||
if (m/^\+\+\+\s+(\S+)/ or m/^---\s+(\S+)/) {
|
||||
if (m/^ mode change [0-7]+ => [0-7]+ (\S+)\s*$/) {
|
||||
my $filename = $1;
|
||||
push(@files, $filename);
|
||||
} elsif (m/^rename (?:from|to) (\S+)\s*$/) {
|
||||
my $filename = $1;
|
||||
push(@files, $filename);
|
||||
} elsif (m/^diff --git a\/(\S+) b\/(\S+)\s*$/) {
|
||||
my $filename1 = $1;
|
||||
my $filename2 = $2;
|
||||
push(@files, $filename1);
|
||||
push(@files, $filename2);
|
||||
} elsif (m/^Fixes:\s+([0-9a-fA-F]{6,40})/) {
|
||||
push(@fixes, $1) if ($email_fixes);
|
||||
} elsif (m/^\+\+\+\s+(\S+)/ or m/^---\s+(\S+)/) {
|
||||
my $filename = $1;
|
||||
$filename =~ s@^[^/]*/@@;
|
||||
$filename =~ s@\n@@;
|
||||
|
@ -570,6 +618,7 @@ foreach my $file (@ARGV) {
|
|||
}
|
||||
|
||||
@file_emails = uniq(@file_emails);
|
||||
@fixes = uniq(@fixes);
|
||||
|
||||
my %email_hash_name;
|
||||
my %email_hash_address;
|
||||
|
@ -584,7 +633,6 @@ my %deduplicate_name_hash = ();
|
|||
my %deduplicate_address_hash = ();
|
||||
|
||||
my @maintainers = get_maintainers();
|
||||
|
||||
if (@maintainers) {
|
||||
@maintainers = merge_email(@maintainers);
|
||||
output(@maintainers);
|
||||
|
@ -890,6 +938,8 @@ sub get_maintainers {
|
|||
print("\n");
|
||||
}
|
||||
}
|
||||
|
||||
maintainers_in_file($file);
|
||||
}
|
||||
|
||||
if ($keywords) {
|
||||
|
@ -905,8 +955,10 @@ sub get_maintainers {
|
|||
|
||||
foreach my $file (@files) {
|
||||
if ($email &&
|
||||
($email_git || ($email_git_fallback &&
|
||||
!$exact_pattern_match_hash{$file}))) {
|
||||
($email_git ||
|
||||
($email_git_fallback &&
|
||||
$file !~ /MAINTAINERS$/ &&
|
||||
!$exact_pattern_match_hash{$file}))) {
|
||||
vcs_file_signoffs($file);
|
||||
}
|
||||
if ($email && $email_git_blame) {
|
||||
|
@ -937,6 +989,10 @@ sub get_maintainers {
|
|||
}
|
||||
}
|
||||
|
||||
foreach my $fix (@fixes) {
|
||||
vcs_add_commit_signers($fix, "blamed_fixes");
|
||||
}
|
||||
|
||||
my @to = ();
|
||||
if ($email || $email_list) {
|
||||
if ($email) {
|
||||
|
@ -997,11 +1053,13 @@ MAINTAINER field selection options:
|
|||
--r => include reviewer(s) if any
|
||||
--n => include name 'Full Name <addr\@domain.tld>'
|
||||
--l => include list(s) if any
|
||||
--s => include subscriber only list(s) if any
|
||||
--moderated => include moderated lists(s) if any (default: true)
|
||||
--s => include subscriber only list(s) if any (default: false)
|
||||
--remove-duplicates => minimize duplicate email names/addresses
|
||||
--roles => show roles (status:subsystem, git-signer, list, etc...)
|
||||
--rolestats => show roles and statistics (commits/total_commits, %)
|
||||
--file-emails => add email addresses found in -f file (default: 0 (off))
|
||||
--fixes => for patches, add signatures of commits with 'Fixes: <commit>' (default: 1 (on))
|
||||
--scm => print SCM tree(s) if any
|
||||
--status => print status if any
|
||||
--subsystem => print subsystem name if any
|
||||
|
@ -1018,13 +1076,14 @@ Other options:
|
|||
--sections => print all of the subsystem sections with pattern matches
|
||||
--letters => print all matching 'letter' types from all matching sections
|
||||
--mailmap => use .mailmap file (default: $email_use_mailmap)
|
||||
--no-tree => run without a kernel tree
|
||||
--self-test => show potential issues with MAINTAINERS file content
|
||||
--version => show version
|
||||
--help => show this help information
|
||||
|
||||
Default options:
|
||||
[--email --nogit --git-fallback --m --r --n --l --multiline --pattern-depth=0
|
||||
--remove-duplicates --rolestats]
|
||||
[--email --tree --nogit --git-fallback --m --r --n --l --multiline
|
||||
--pattern-depth=0 --remove-duplicates --rolestats]
|
||||
|
||||
Notes:
|
||||
Using "-f directory" may give unexpected results:
|
||||
|
@ -1288,11 +1347,14 @@ sub add_categories {
|
|||
} else {
|
||||
if ($email_list) {
|
||||
if (!$hash_list_to{lc($list_address)}) {
|
||||
$hash_list_to{lc($list_address)} = 1;
|
||||
if ($list_additional =~ m/moderated/) {
|
||||
push(@list_to, [$list_address,
|
||||
"moderated list${list_role}"]);
|
||||
if ($email_moderated_list) {
|
||||
$hash_list_to{lc($list_address)} = 1;
|
||||
push(@list_to, [$list_address,
|
||||
"moderated list${list_role}"]);
|
||||
}
|
||||
} else {
|
||||
$hash_list_to{lc($list_address)} = 1;
|
||||
push(@list_to, [$list_address,
|
||||
"open list${list_role}"]);
|
||||
}
|
||||
|
@ -1300,35 +1362,11 @@ sub add_categories {
|
|||
}
|
||||
}
|
||||
} elsif ($ptype eq "M") {
|
||||
my ($name, $address) = parse_email($pvalue);
|
||||
if ($name eq "") {
|
||||
if ($i > 0) {
|
||||
my $tv = $typevalue[$i - 1];
|
||||
if ($tv =~ m/^([A-Z]):\s*(.*)/) {
|
||||
if ($1 eq "P") {
|
||||
$name = $2;
|
||||
$pvalue = format_email($name, $address, $email_usename);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($email_maintainer) {
|
||||
my $role = get_maintainer_role($i);
|
||||
push_email_addresses($pvalue, $role);
|
||||
}
|
||||
} elsif ($ptype eq "R") {
|
||||
my ($name, $address) = parse_email($pvalue);
|
||||
if ($name eq "") {
|
||||
if ($i > 0) {
|
||||
my $tv = $typevalue[$i - 1];
|
||||
if ($tv =~ m/^([A-Z]):\s*(.*)/) {
|
||||
if ($1 eq "P") {
|
||||
$name = $2;
|
||||
$pvalue = format_email($name, $address, $email_usename);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($email_reviewer) {
|
||||
my $subsystem = get_subsystem_name($i);
|
||||
push_email_addresses($pvalue, "reviewer:$subsystem");
|
||||
|
@ -1699,6 +1737,32 @@ sub vcs_is_hg {
|
|||
return $vcs_used == 2;
|
||||
}
|
||||
|
||||
sub vcs_add_commit_signers {
|
||||
return if (!vcs_exists());
|
||||
|
||||
my ($commit, $desc) = @_;
|
||||
my $commit_count = 0;
|
||||
my $commit_authors_ref;
|
||||
my $commit_signers_ref;
|
||||
my $stats_ref;
|
||||
my @commit_authors = ();
|
||||
my @commit_signers = ();
|
||||
my $cmd;
|
||||
|
||||
$cmd = $VCS_cmds{"find_commit_signers_cmd"};
|
||||
$cmd =~ s/(\$\w+)/$1/eeg; #substitute variables in $cmd
|
||||
|
||||
($commit_count, $commit_signers_ref, $commit_authors_ref, $stats_ref) = vcs_find_signers($cmd, "");
|
||||
@commit_authors = @{$commit_authors_ref} if defined $commit_authors_ref;
|
||||
@commit_signers = @{$commit_signers_ref} if defined $commit_signers_ref;
|
||||
|
||||
foreach my $signer (@commit_signers) {
|
||||
$signer = deduplicate_email($signer);
|
||||
}
|
||||
|
||||
vcs_assign($desc, 1, @commit_signers);
|
||||
}
|
||||
|
||||
sub interactive_get_maintainers {
|
||||
my ($list_ref) = @_;
|
||||
my @list = @$list_ref;
|
||||
|
@ -1792,7 +1856,7 @@ tm toggle maintainers
|
|||
tg toggle git entries
|
||||
tl toggle open list entries
|
||||
ts toggle subscriber list entries
|
||||
f emails in file [$file_emails]
|
||||
f emails in file [$email_file_emails]
|
||||
k keywords in file [$keywords]
|
||||
r remove duplicates [$email_remove_duplicates]
|
||||
p# pattern match depth [$pattern_depth]
|
||||
|
@ -1917,7 +1981,7 @@ EOT
|
|||
bool_invert(\$email_git_all_signature_types);
|
||||
$rerun = 1;
|
||||
} elsif ($sel eq "f") {
|
||||
bool_invert(\$file_emails);
|
||||
bool_invert(\$email_file_emails);
|
||||
$rerun = 1;
|
||||
} elsif ($sel eq "r") {
|
||||
bool_invert(\$email_remove_duplicates);
|
||||
|
|
|
@ -74,21 +74,7 @@ PHONY += $(simple-targets)
|
|||
$(simple-targets): $(obj)/conf
|
||||
$< $(silent) --$@ $(Kconfig)
|
||||
|
||||
PHONY += oldnoconfig silentoldconfig savedefconfig defconfig
|
||||
|
||||
# oldnoconfig is an alias of olddefconfig, because people already are dependent
|
||||
# on its behavior (sets new symbols to their default value but not 'n') with the
|
||||
# counter-intuitive name.
|
||||
oldnoconfig: olddefconfig
|
||||
@echo " WARNING: \"oldnoconfig\" target will be removed after Linux 4.19"
|
||||
@echo " Please use \"olddefconfig\" instead, which is an alias."
|
||||
|
||||
# We do not expect manual invokcation of "silentoldcofig" (or "syncconfig").
|
||||
silentoldconfig: syncconfig
|
||||
@echo " WARNING: \"silentoldconfig\" has been renamed to \"syncconfig\""
|
||||
@echo " and is now an internal implementation detail."
|
||||
@echo " What you want is probably \"oldconfig\"."
|
||||
@echo " \"silentoldconfig\" will be removed after Linux 4.19"
|
||||
PHONY += savedefconfig defconfig
|
||||
|
||||
savedefconfig: $(obj)/conf
|
||||
$< $(silent) --$@=defconfig $(Kconfig)
|
||||
|
|
|
@ -460,12 +460,6 @@ static struct option long_opts[] = {
|
|||
{"randconfig", no_argument, NULL, randconfig},
|
||||
{"listnewconfig", no_argument, NULL, listnewconfig},
|
||||
{"olddefconfig", no_argument, NULL, olddefconfig},
|
||||
/*
|
||||
* oldnoconfig is an alias of olddefconfig, because people already
|
||||
* are dependent on its behavior(sets new symbols to their default
|
||||
* value but not 'n') with the counter-intuitive name.
|
||||
*/
|
||||
{"oldnoconfig", no_argument, NULL, olddefconfig},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
|
@ -480,7 +474,6 @@ static void conf_usage(const char *progname)
|
|||
printf(" --syncconfig Similar to oldconfig but generates configuration in\n"
|
||||
" include/{generated/,config/}\n");
|
||||
printf(" --olddefconfig Same as oldconfig but sets new symbols to their default value\n");
|
||||
printf(" --oldnoconfig An alias of olddefconfig\n");
|
||||
printf(" --defconfig <file> New config with default defined in <file>\n");
|
||||
printf(" --savedefconfig <file> Save the minimal current configuration to <file>\n");
|
||||
printf(" --allnoconfig New config where all options are answered with no\n");
|
||||
|
|
|
@ -33,12 +33,15 @@ usage() {
|
|||
echo " -n use allnoconfig instead of alldefconfig"
|
||||
echo " -r list redundant entries when merging fragments"
|
||||
echo " -O dir to put generated output files. Consider setting \$KCONFIG_CONFIG instead."
|
||||
echo
|
||||
echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_ environment variable."
|
||||
}
|
||||
|
||||
RUNMAKE=true
|
||||
ALLTARGET=alldefconfig
|
||||
WARNREDUN=false
|
||||
OUTPUT=.
|
||||
CONFIG_PREFIX=${CONFIG_-CONFIG_}
|
||||
|
||||
while true; do
|
||||
case $1 in
|
||||
|
@ -99,7 +102,9 @@ if [ ! -r "$INITFILE" ]; then
|
|||
fi
|
||||
|
||||
MERGE_LIST=$*
|
||||
SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
|
||||
SED_CONFIG_EXP1="s/^\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)=.*/\1/p"
|
||||
SED_CONFIG_EXP2="s/^# \(${CONFIG_PREFIX}[a-zA-Z0-9_]*\) is not set$/\1/p"
|
||||
|
||||
TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
|
||||
|
||||
echo "Using $INITFILE as base"
|
||||
|
@ -112,7 +117,7 @@ for MERGE_FILE in $MERGE_LIST ; do
|
|||
echo "The merge file '$MERGE_FILE' does not exist. Exit." >&2
|
||||
exit 1
|
||||
fi
|
||||
CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
|
||||
CFG_LIST=$(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $MERGE_FILE)
|
||||
|
||||
for CFG in $CFG_LIST ; do
|
||||
grep -q -w $CFG $TMP_FILE || continue
|
||||
|
@ -155,7 +160,7 @@ make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET
|
|||
|
||||
|
||||
# Check all specified config values took (might have missed-dependency issues)
|
||||
for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
|
||||
for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do
|
||||
|
||||
REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
|
||||
ACTUAL_VAL=$(grep -w -e "$CFG" "$KCONFIG_CONFIG")
|
||||
|
|
|
@ -1,35 +1,25 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Generates a small Makefile used in the root of the output
|
||||
# directory, to allow make to be started from there.
|
||||
# The Makefile also allow for more convinient build of external modules
|
||||
|
||||
# Usage
|
||||
# $1 - Kernel src directory
|
||||
# $2 - Output directory
|
||||
# $3 - version
|
||||
# $4 - patchlevel
|
||||
|
||||
|
||||
test ! -r $2/Makefile -o -O $2/Makefile || exit 0
|
||||
# Only overwrite automatically generated Makefiles
|
||||
# (so we do not overwrite kernel Makefile)
|
||||
if test -e $2/Makefile && ! grep -q Automatically $2/Makefile
|
||||
if test -e Makefile && ! grep -q Automatically Makefile
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
if [ "${quiet}" != "silent_" ]; then
|
||||
echo " GEN $2/Makefile"
|
||||
echo " GEN Makefile"
|
||||
fi
|
||||
|
||||
cat << EOF > $2/Makefile
|
||||
cat << EOF > Makefile
|
||||
# Automatically generated by $0: don't edit
|
||||
|
||||
VERSION = $3
|
||||
PATCHLEVEL = $4
|
||||
|
||||
lastword = \$(word \$(words \$(1)),\$(1))
|
||||
makedir := \$(dir \$(call lastword,\$(MAKEFILE_LIST)))
|
||||
|
||||
ifeq ("\$(origin V)", "command line")
|
||||
VERBOSE := \$(V)
|
||||
endif
|
||||
|
@ -37,15 +27,12 @@ ifneq (\$(VERBOSE),1)
|
|||
Q := @
|
||||
endif
|
||||
|
||||
MAKEARGS := -C $1
|
||||
MAKEARGS += O=\$(if \$(patsubst /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst %/,%,\$(makedir))
|
||||
|
||||
MAKEFLAGS += --no-print-directory
|
||||
|
||||
.PHONY: __sub-make \$(MAKECMDGOALS)
|
||||
|
||||
__sub-make:
|
||||
\$(Q)\$(MAKE) \$(MAKEARGS) \$(MAKECMDGOALS)
|
||||
\$(Q)\$(MAKE) -C $1 O=\$(CURDIR) \$(MAKECMDGOALS)
|
||||
|
||||
\$(filter-out __sub-make, \$(MAKECMDGOALS)): __sub-make
|
||||
@:
|
||||
|
|
|
@ -524,7 +524,7 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname)
|
|||
/* Check if an offset for the external data was set. */
|
||||
if (params->external_offset > 0) {
|
||||
if (params->external_offset < new_size) {
|
||||
debug("External offset %x overlaps FIT length %x",
|
||||
debug("External offset %x overlaps FIT length %x\n",
|
||||
params->external_offset, new_size);
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
|
@ -737,7 +737,7 @@ static int fit_handle_file(struct image_tool_params *params)
|
|||
if (strlen (params->imagefile) +
|
||||
strlen (MKIMAGE_TMPFILE_SUFFIX) + 1 > sizeof (tmpfile)) {
|
||||
fprintf (stderr, "%s: Image file name (%s) too long, "
|
||||
"can't create tmpfile",
|
||||
"can't create tmpfile.\n",
|
||||
params->imagefile, params->cmdname);
|
||||
return (EXIT_FAILURE);
|
||||
}
|
||||
|
|
|
@ -132,8 +132,10 @@ static int fit_image_write_sig(void *fit, int noffset, uint8_t *value,
|
|||
if (!ret) {
|
||||
time_t timestamp = imagetool_get_source_date(cmdname,
|
||||
time(NULL));
|
||||
uint32_t t = cpu_to_uimage(timestamp);
|
||||
|
||||
ret = fit_set_timestamp(fit, noffset, timestamp);
|
||||
ret = fdt_setprop(fit, noffset, FIT_TIMESTAMP_PROP, &t,
|
||||
sizeof(uint32_t));
|
||||
}
|
||||
if (region_prop && !ret) {
|
||||
uint32_t strdata[2];
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
#include "imximage.h"
|
||||
#include <image.h>
|
||||
#include <version.h>
|
||||
#ifdef __linux__
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
|
||||
static void copy_file(int, const char *, int);
|
||||
|
||||
|
@ -402,6 +405,7 @@ int main(int argc, char **argv)
|
|||
}
|
||||
|
||||
if (params.lflag || params.fflag) {
|
||||
uint64_t size;
|
||||
/*
|
||||
* list header information of existing image
|
||||
*/
|
||||
|
@ -412,14 +416,34 @@ int main(int argc, char **argv)
|
|||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if ((unsigned)sbuf.st_size < tparams->header_size) {
|
||||
if ((sbuf.st_mode & S_IFMT) == S_IFBLK) {
|
||||
#ifdef __linux__
|
||||
#if defined(__linux__) && defined(_IOR) && !defined(BLKGETSIZE64)
|
||||
#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */
|
||||
#endif
|
||||
if (ioctl(ifd, BLKGETSIZE64, &size) < 0) {
|
||||
fprintf (stderr,
|
||||
"%s: failed to get size of block device \"%s\"\n",
|
||||
params.cmdname, params.imagefile);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
#else
|
||||
fprintf (stderr,
|
||||
"%s: Bad size: \"%s\" is not valid image\n",
|
||||
"%s: \"%s\" is block device, don't know how to get its size\n",
|
||||
params.cmdname, params.imagefile);
|
||||
exit (EXIT_FAILURE);
|
||||
#endif
|
||||
} else if ((unsigned)sbuf.st_size < tparams->header_size) {
|
||||
fprintf (stderr,
|
||||
"%s: Bad size: \"%s\" is not valid image: size %ld < %u\n",
|
||||
params.cmdname, params.imagefile,
|
||||
sbuf.st_size, tparams->header_size);
|
||||
exit (EXIT_FAILURE);
|
||||
} else {
|
||||
size = sbuf.st_size;
|
||||
}
|
||||
|
||||
ptr = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, ifd, 0);
|
||||
ptr = mmap(0, size, PROT_READ, MAP_SHARED, ifd, 0);
|
||||
if (ptr == MAP_FAILED) {
|
||||
fprintf (stderr, "%s: Can't read %s: %s\n",
|
||||
params.cmdname, params.imagefile,
|
||||
|
|
Loading…
Reference in a new issue