The original default, minimum abbreviated hash length was 7. It dif- fers on newer systems, however. This breaks reproducibility, so set an explicit length. 12 hex digits should be good enough. Note: This sets only a minimum. With a high enough number of commit objects in the repository, Git could still decide to use a longer hash, again breaking reproducibility. 12 digits will hopefully pro- vide enough margin. Change-Id: Ia86e9cc41e27a0a57d498dcb13aec954c4ea0f04 Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/76560 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martin.roth@amd.corp-partner.google.com>
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env sh
 | |
| #
 | |
| # SPDX-License-Identifier: GPL-2.0-only
 | |
| 
 | |
| DATE=""
 | |
| GITREV=""
 | |
| TIMESOURCE=""
 | |
| XGCCPATH="${XGCCPATH:-util/crossgcc/xgcc/bin/}"
 | |
| MAJOR_VER="0"
 | |
| MINOR_VER="0"
 | |
| COREBOOT_VERSION_FILE=".coreboot-version"
 | |
| 
 | |
| export LANG=C
 | |
| export LC_ALL=C
 | |
| export TZ=UTC0
 | |
| 
 | |
| XCOMPILE=$1
 | |
| 
 | |
| if [ -z "${XCOMPILE}" ] || [ "$1" = "--help" ]; then
 | |
| 	echo "usage: $0 <xcompile>" >&2
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| # $1: format string
 | |
| get_git_head_data() {
 | |
| 	LANG="" git log --no-show-signature --abbrev=12 -1 --format="format:$1" 2>/dev/null || \
 | |
| 	LANG="" git log --abbrev=12 -1 --format="format:$1"
 | |
| }
 | |
| 
 | |
| if [ "${BUILD_TIMELESS}" = "1" ]; then
 | |
| 	GITREV=Timeless
 | |
| 	TIMESOURCE="fixed"
 | |
| 	DATE=0
 | |
| elif [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then
 | |
| 	GITREV="$(get_git_head_data %h)"
 | |
| 	TIMESOURCE=git
 | |
| 	DATE="$(get_git_head_data %ct)"
 | |
| 	VERSION="$(git describe)"
 | |
| 	# Only use the `git describe` output if the tag is in the expected <major>.<minor>
 | |
| 	# format, e.g. 4.18. Forks of coreboot may have other tags in different formats.
 | |
| 	if echo "${VERSION}" | grep -q "^[0-9]\.[0-9][0-9]*"; then
 | |
| 		MAJOR_VER="$(echo "${VERSION}" | sed 's/\([0-9]\)\.\([0-9][0-9]*\).*/\1/')"
 | |
| 		MINOR_VER="$(echo "${VERSION}" | sed 's/\([0-9]\)\.\([0-9][0-9]*\).*/\2/')"
 | |
| 	fi
 | |
| else
 | |
| 	GITREV=Unknown
 | |
| 	TIMESOURCE="date"
 | |
| 	DATE=$(LANG="" LC_ALL=C TZ=UTC0 date +%s)
 | |
| 	if [ -f "${COREBOOT_VERSION_FILE}" ]; then
 | |
| 		MAJOR_VER="$(sed 's/\([0-9]\)\.\([0-9][0-9]*\).*/\1/' "${COREBOOT_VERSION_FILE}")"
 | |
| 		MINOR_VER="$(sed 's/\([0-9]\)\.\([0-9][0-9]*\).*/\2/' "${COREBOOT_VERSION_FILE}")"
 | |
| 	fi
 | |
| fi
 | |
| 
 | |
| our_date() {
 | |
| case $(uname) in
 | |
| NetBSD|OpenBSD|DragonFly|FreeBSD|Darwin)
 | |
| 	date -r "$1" "$2"
 | |
| 	;;
 | |
| *)
 | |
| 	date -d "@$1" "$2"
 | |
| esac
 | |
| }
 | |
| 
 | |
| # Look for IASL in XGCCPATH and xcompile.  Unfortunately,
 | |
| # xcompile isn't available on the first build.
 | |
| # If neither of those gives a valid iasl, check the path.
 | |
| IASL="${XGCCPATH}iasl"
 | |
| eval "$(grep ^IASL:= "${XCOMPILE}" 2>/dev/null | sed s,:=,=,)"
 | |
| if [ ! -x "${IASL}" ]; then
 | |
| 	IASL=$(command -v iasl)
 | |
| fi
 | |
| IASLVERSION="$(${IASL} -v | grep version | sed 's/.*version //')" >/dev/null
 | |
| 
 | |
| #Print out the information that goes into build.h
 | |
| printf "/* build system definitions (autogenerated) */\n"
 | |
| printf "#ifndef __BUILD_H\n"
 | |
| printf "#define __BUILD_H\n\n"
 | |
| printf "#define COREBOOT_VERSION %s\n" "\"${KERNELVERSION}\""
 | |
| 
 | |
| #See if the build is running in a git repo and the git command is available
 | |
| printf "/* timesource: %s */\n" "${TIMESOURCE}"
 | |
| printf "#define COREBOOT_VERSION_TIMESTAMP %s\n" "${DATE}"
 | |
| printf "#define COREBOOT_ORIGIN_GIT_REVISION \"%s\"\n" "${GITREV}"
 | |
| 
 | |
| printf "#define COREBOOT_EXTRA_VERSION \"%s\"\n" "${COREBOOT_EXTRA_VERSION}"
 | |
| printf "#define COREBOOT_MAJOR_VERSION %s\n" "${MAJOR_VER}"
 | |
| printf "#define COREBOOT_MINOR_VERSION %s\n" "${MINOR_VER}"
 | |
| printf "#define COREBOOT_BUILD \"%s\"\n" "$(our_date "${DATE}" "+%a %b %d %H:%M:%S %Z %Y")"
 | |
| printf "#define COREBOOT_BUILD_YEAR_BCD 0x%s\n" "$(our_date "${DATE}" "+%y")"
 | |
| printf "#define COREBOOT_BUILD_MONTH_BCD 0x%s\n" "$(our_date "${DATE}" "+%m")"
 | |
| printf "#define COREBOOT_BUILD_DAY_BCD 0x%s\n" "$(our_date "${DATE}" "+%d")"
 | |
| printf "#define COREBOOT_BUILD_WEEKDAY_BCD 0x%s\n" "$(our_date "${DATE}" "+%w")"
 | |
| printf "#define COREBOOT_BUILD_EPOCH \"%s\"\n" "$(our_date "${DATE}" "+%s")"
 | |
| printf "#define COREBOOT_DMI_DATE \"%s\"\n" "$(our_date "${DATE}" "+%m/%d/%Y")"
 | |
| printf "\n"
 | |
| printf "#define COREBOOT_COMPILE_TIME \"%s\"\n" "$(our_date "${DATE}" "+%T")"
 | |
| printf "#define ASL_VERSION 0x%s\n" "${IASLVERSION}"
 | |
| printf "#endif\n"
 |