[PATCH V2] hv dm: change the version format


Zhang, Wei6
 

From: Zhangwei6 <wei6.zhang@...>

The version info is used to tell the user when and where the binary is
compiled and built, this will change the hv and dm version format.

The hv follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-commit_id-dirty
DBG/REL(tag-current_commit_id) scenario@board build by author date.
The dm follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-commit_id-dirty
(tag-current_commit_id) build by author date.

The dm doesn't contain DBG/REL because it's given in configurator-tool
only for hv. also not contain scenario and board info.

e.g.
with tag:
ACRN:\>version
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty DBG(tag: v3.1)
scenario3.1@... build by zhangwei 2022-11-16 07:02:37
$acrn-dm -v
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty(tag: v3.1)
build by zhangwei@2022-11-16 07:02:35
without tag:
ACRN:\>version
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty DBG
scenario3.1@... build by zhangwei 2022-11-16 06:49:44
$acrn-dm -v
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty
build by zhangwei@2022-11-16 06:49:43

Tracked-On #8303
Signed-off-by: Zhangwei6 <wei6.zhang@...>
---
Makefile | 9 +++++++++
devicemodel/Makefile | 19 +++++++++----------
devicemodel/core/main.c | 8 +++++---
hypervisor/Makefile | 19 ++++++++-----------
hypervisor/arch/x86/cpu.c | 12 +++++-------
hypervisor/debug/shell.c | 8 +++++---
6 files changed, 41 insertions(+), 34 deletions(-)

diff --git a/Makefile b/Makefile
index 69e322b34..da6e15c35 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,15 @@ ifneq ($(SCM_VERSION),)
SCM_VERSION := "-"$(SCM_VERSION)
endif
export FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION)$(SCM_VERSION)
+STABLE_STR := -stable
+ifeq ($(EXTRA_VERSION), -unstable)
+ STABLE_STR := -unstable
+endif
+REMOTE_BRANCH := $(shell [ -d .git ] && git rev-parse --abbrev-ref HEAD)
+ifneq ($(REMOTE_BRANCH),)
+ REMOTE_BRANCH := "-"$(REMOTE_BRANCH)
+endif
+export BRANCH_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(STABLE_STR)$(REMOTE_BRANCH)

ifdef TARGET_DIR
$(warning TARGET_DIR is obsoleted because generated configuration files are now stored in the build directory)
diff --git a/devicemodel/Makefile b/devicemodel/Makefile
index 823265e27..4c333f886 100644
--- a/devicemodel/Makefile
+++ b/devicemodel/Makefile
@@ -229,27 +229,26 @@ distclean:
$(VERSION_H):
mkdir -p $(DM_OBJDIR)/include
touch $(VERSION_H)
- if [ "$(DM_BUILD_VERSION)"x = x -o "$(DM_BUILD_TAG)"x = x ];then\
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else\
- PATCH=$(DM_BUILD_VERSION);\
- DAILY_TAG=$(DM_BUILD_TAG);\
+ PATCH="$(BUILD_VERSION)";\
fi;\
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --format=%cd); \
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}" "+%Y-%m-%d %H:%M:%S"); \
USER="$${USER:-$$(id -u -n)}"; \
echo "/*" > $(VERSION_H); \
sed 's/^/ * /' ../LICENSE >> $(VERSION_H);\
echo " */" >> $(VERSION_H);\
echo "" >> $(VERSION_H);\
- echo "#define DM_MAJOR_VERSION $(MAJOR_VERSION)" >> $(VERSION_H);\
- echo "#define DM_MINOR_VERSION $(MINOR_VERSION)" >> $(VERSION_H);\
- echo "#define DM_EXTRA_VERSION "\"$(EXTRA_VERSION)\""" >> $(VERSION_H);\
- echo "#define DM_FULL_VERSION "\"$(FULL_VERSION)\""" >> $(VERSION_H);\
- echo "#define DM_DAILY_TAG "\""$$DAILY_TAG"\""" >> $(VERSION_H);\
- echo "#define DM_BUILD_VERSION "\""$$PATCH"\""" >> $(VERSION_H);\
+ echo "#define DM_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_DIRTY "\""$$PATCH"\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_TIME "\"$$COMMIT_TIME\""" >> $(VERSION_H);\
echo "#define DM_BUILD_TIME "\""$$TIME"\""" >> $(VERSION_H);\
echo "#define DM_BUILD_USER "\""$$USER"\""" >> $(VERSION_H)

diff --git a/devicemodel/core/main.c b/devicemodel/core/main.c
index 135a6435c..690e2042c 100644
--- a/devicemodel/core/main.c
+++ b/devicemodel/core/main.c
@@ -202,9 +202,11 @@ static void outdate(char *msg)
static void
print_version(void)
{
- fprintf(stdout, "DM version is: %s-%s (daily tag:%s), build by %s@%s\n",
- DM_FULL_VERSION,
- DM_BUILD_VERSION, DM_DAILY_TAG, DM_BUILD_USER, DM_BUILD_TIME);
+ fprintf(stdout, "%s-%s-%s%s%s%s build by %s@%s\n",
+ DM_BRANCH_VERSION, DM_COMMIT_TIME, DM_COMMIT_DIRTY,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? "(tag: " : "", DM_COMMIT_TAGS,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? ")" : "",
+ DM_BUILD_USER, DM_BUILD_TIME);

exit(0);
}
diff --git a/hypervisor/Makefile b/hypervisor/Makefile
index cd49ae28c..4ba6a9772 100644
--- a/hypervisor/Makefile
+++ b/hypervisor/Makefile
@@ -517,15 +517,16 @@ distclean:
PHONY: (VERSION)
$(VERSION): $(HV_CONFIG_H)
touch $(VERSION)
- @if [ "$(BUILD_VERSION)"x = x -o "$(BUILD_TAG)"x = x ];then \
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else \
PATCH="$(BUILD_VERSION)"; \
- DAILY_TAG="$(BUILD_TAG)"; \
fi; \
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --format=%cd); \
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}" "+%F %T"); \
USER="$${USER:-$$(id -u -n)}"; \
if [ x$(CONFIG_RELEASE) = "xy" ];then BUILD_TYPE="REL";else BUILD_TYPE="DBG";fi;\
@@ -535,21 +536,17 @@ $(VERSION): $(HV_CONFIG_H)
echo "" >> $(VERSION); \
echo "#ifndef VERSION_H" >> $(VERSION); \
echo "#define VERSION_H" >> $(VERSION); \
- echo "#define HV_FULL_VERSION "\"$(FULL_VERSION)\""" >> $(VERSION);\
echo "#define HV_API_MAJOR_VERSION $(API_MAJOR_VERSION)U" >> $(VERSION);\
echo "#define HV_API_MINOR_VERSION $(API_MINOR_VERSION)U" >> $(VERSION);\
- echo "#define HV_DAILY_TAG "\""$$DAILY_TAG"\""" >> $(VERSION);\
- echo "#define HV_BUILD_VERSION "\""$$PATCH"\""" >> $(VERSION);\
+ echo "#define HV_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_DIRTY "\""$$PATCH"\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_TIME "\"$$COMMIT_TIME\""" >> $(VERSION);\
echo "#define HV_BUILD_TYPE "\""$$BUILD_TYPE"\""" >> $(VERSION);\
echo "#define HV_BUILD_TIME "\""$$TIME"\""" >> $(VERSION);\
echo "#define HV_BUILD_USER "\""$$USER"\""" >> $(VERSION);\
echo "#define HV_BUILD_SCENARIO "\"$(SCENARIO)\""" >> $(VERSION);\
echo "#define HV_BUILD_BOARD "\"$(BOARD)\""" >> $(VERSION);\
- if [ "$(CONFIG_XML_ENABLED)" = "true" ]; then \
- echo "#define HV_CONFIG_TOOL \" with acrn-config\"" >> $(VERSION);\
- else \
- echo "#define HV_CONFIG_TOOL \"\"" >> $(VERSION);\
- fi;\
echo "#endif" >> $(VERSION)

-include $(C_OBJS:.o=.d)
diff --git a/hypervisor/arch/x86/cpu.c b/hypervisor/arch/x86/cpu.c
index 84782d045..081c96dfa 100644
--- a/hypervisor/arch/x86/cpu.c
+++ b/hypervisor/arch/x86/cpu.c
@@ -248,13 +248,11 @@ void init_pcpu_post(uint16_t pcpu_id)
/* Calibrate TSC Frequency */
calibrate_tsc();

- pr_acrnlog("HV version %s-%s-%s %s (daily tag:%s) %s@%s build by %s%s, start time %luus",
- HV_FULL_VERSION,
- HV_BUILD_TIME, HV_BUILD_VERSION, HV_BUILD_TYPE,
- HV_DAILY_TAG, HV_BUILD_SCENARIO, HV_BUILD_BOARD,
- HV_BUILD_USER, HV_CONFIG_TOOL, ticks_to_us(start_tick));
-
- pr_acrnlog("API version %u.%u", HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ pr_acrnlog("HV version %s-%s-%s %s%s%s%s %s@%s build by %s, start time %luus",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME, HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "", HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "", HV_BUILD_SCENARIO,
+ HV_BUILD_BOARD, HV_BUILD_USER, ticks_to_us(start_tick));

pr_acrnlog("Detect processor: %s", (get_pcpu_info())->model_name);

diff --git a/hypervisor/debug/shell.c b/hypervisor/debug/shell.c
index 4a0451fd5..ac4d52944 100644
--- a/hypervisor/debug/shell.c
+++ b/hypervisor/debug/shell.c
@@ -738,9 +738,11 @@ static int32_t shell_version(__unused int32_t argc, __unused char **argv)
{
char temp_str[MAX_STR_SIZE];

- snprintf(temp_str, MAX_STR_SIZE, "HV %s-%s-%s %s (daily tag: %s) %s@%s build by %s%s\nAPI %u.%u\r\n",
- HV_FULL_VERSION, HV_BUILD_TIME, HV_BUILD_VERSION, HV_BUILD_TYPE, HV_DAILY_TAG, HV_BUILD_SCENARIO,
- HV_BUILD_BOARD, HV_BUILD_USER, HV_CONFIG_TOOL, HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ snprintf(temp_str, MAX_STR_SIZE, "%s-%s-%s %s%s%s%s %s@%s build by %s %s\r\n",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME, HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "", HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
+ HV_BUILD_SCENARIO, HV_BUILD_BOARD, HV_BUILD_USER, HV_BUILD_TIME);
shell_puts(temp_str);

return 0;
--
2.25.1


Li, Fei1
 

On 2022-11-16 at 15:34:08 +0800, wei6.zhang@... wrote:
From: Zhangwei6 <wei6.zhang@...>

The version info is used to tell the user when and where the binary is
compiled and built, this will change the hv and dm version format.

The hv follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-commit_id-dirty
DBG/REL(tag-current_commit_id) scenario@board build by author date.
The dm follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-commit_id-dirty
(tag-current_commit_id) build by author date.
Please explain tag-current_commit_id is optional.

The dm doesn't contain DBG/REL because it's given in configurator-tool
only for hv. also not contain scenario and board info.

e.g.
with tag:
ACRN:\>version
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty DBG(tag: v3.1)
scenario3.1@... build by zhangwei 2022-11-16 07:02:37
$acrn-dm -v
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty(tag: v3.1)
build by zhangwei@2022-11-16 07:02:35
without tag:
ACRN:\>version
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty DBG
scenario3.1@... build by zhangwei 2022-11-16 06:49:44
$acrn-dm -v
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty
build by zhangwei@2022-11-16 06:49:43

Tracked-On #8303
Signed-off-by: Zhangwei6 <wei6.zhang@...>
---
Makefile | 9 +++++++++
devicemodel/Makefile | 19 +++++++++----------
devicemodel/core/main.c | 8 +++++---
hypervisor/Makefile | 19 ++++++++-----------
hypervisor/arch/x86/cpu.c | 12 +++++-------
hypervisor/debug/shell.c | 8 +++++---
6 files changed, 41 insertions(+), 34 deletions(-)

diff --git a/Makefile b/Makefile
index 69e322b34..da6e15c35 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,15 @@ ifneq ($(SCM_VERSION),)
SCM_VERSION := "-"$(SCM_VERSION)
endif
export FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION)$(SCM_VERSION)
+STABLE_STR := -stable
+ifeq ($(EXTRA_VERSION), -unstable)
+ STABLE_STR := -unstable
+endif
+REMOTE_BRANCH := $(shell [ -d .git ] && git rev-parse --abbrev-ref HEAD)
+ifneq ($(REMOTE_BRANCH),)
+ REMOTE_BRANCH := "-"$(REMOTE_BRANCH)
+endif
+export BRANCH_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(STABLE_STR)$(REMOTE_BRANCH)

ifdef TARGET_DIR
$(warning TARGET_DIR is obsoleted because generated configuration files are now stored in the build directory)
diff --git a/devicemodel/Makefile b/devicemodel/Makefile
index 823265e27..4c333f886 100644
--- a/devicemodel/Makefile
+++ b/devicemodel/Makefile
@@ -229,27 +229,26 @@ distclean:
$(VERSION_H):
mkdir -p $(DM_OBJDIR)/include
touch $(VERSION_H)
- if [ "$(DM_BUILD_VERSION)"x = x -o "$(DM_BUILD_TAG)"x = x ];then\
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else\
- PATCH=$(DM_BUILD_VERSION);\
- DAILY_TAG=$(DM_BUILD_TAG);\
+ PATCH="$(BUILD_VERSION)";\
fi;\
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --format=%cd); \
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}" "+%Y-%m-%d %H:%M:%S"); \
USER="$${USER:-$$(id -u -n)}"; \
echo "/*" > $(VERSION_H); \
sed 's/^/ * /' ../LICENSE >> $(VERSION_H);\
echo " */" >> $(VERSION_H);\
echo "" >> $(VERSION_H);\
- echo "#define DM_MAJOR_VERSION $(MAJOR_VERSION)" >> $(VERSION_H);\
- echo "#define DM_MINOR_VERSION $(MINOR_VERSION)" >> $(VERSION_H);\
- echo "#define DM_EXTRA_VERSION "\"$(EXTRA_VERSION)\""" >> $(VERSION_H);\
- echo "#define DM_FULL_VERSION "\"$(FULL_VERSION)\""" >> $(VERSION_H);\
- echo "#define DM_DAILY_TAG "\""$$DAILY_TAG"\""" >> $(VERSION_H);\
- echo "#define DM_BUILD_VERSION "\""$$PATCH"\""" >> $(VERSION_H);\
+ echo "#define DM_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_DIRTY "\""$$PATCH"\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_TIME "\"$$COMMIT_TIME\""" >> $(VERSION_H);\
echo "#define DM_BUILD_TIME "\""$$TIME"\""" >> $(VERSION_H);\
echo "#define DM_BUILD_USER "\""$$USER"\""" >> $(VERSION_H)

diff --git a/devicemodel/core/main.c b/devicemodel/core/main.c
index 135a6435c..690e2042c 100644
--- a/devicemodel/core/main.c
+++ b/devicemodel/core/main.c
@@ -202,9 +202,11 @@ static void outdate(char *msg)
static void
print_version(void)
{
- fprintf(stdout, "DM version is: %s-%s (daily tag:%s), build by %s@%s\n",
- DM_FULL_VERSION,
- DM_BUILD_VERSION, DM_DAILY_TAG, DM_BUILD_USER, DM_BUILD_TIME);
+ fprintf(stdout, "%s-%s-%s%s%s%s build by %s@%s\n",
+ DM_BRANCH_VERSION, DM_COMMIT_TIME, DM_COMMIT_DIRTY,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? "(tag: " : "", DM_COMMIT_TAGS,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? ")" : "",
+ DM_BUILD_USER, DM_BUILD_TIME);
I think we should keep the "DM/HV" prefix. What do you think ?
The rest is LGTM.

exit(0);
}
diff --git a/hypervisor/Makefile b/hypervisor/Makefile
index cd49ae28c..4ba6a9772 100644
--- a/hypervisor/Makefile
+++ b/hypervisor/Makefile
@@ -517,15 +517,16 @@ distclean:
PHONY: (VERSION)
$(VERSION): $(HV_CONFIG_H)
touch $(VERSION)
- @if [ "$(BUILD_VERSION)"x = x -o "$(BUILD_TAG)"x = x ];then \
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else \
PATCH="$(BUILD_VERSION)"; \
- DAILY_TAG="$(BUILD_TAG)"; \
fi; \
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --format=%cd); \
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}" "+%F %T"); \
USER="$${USER:-$$(id -u -n)}"; \
if [ x$(CONFIG_RELEASE) = "xy" ];then BUILD_TYPE="REL";else BUILD_TYPE="DBG";fi;\
@@ -535,21 +536,17 @@ $(VERSION): $(HV_CONFIG_H)
echo "" >> $(VERSION); \
echo "#ifndef VERSION_H" >> $(VERSION); \
echo "#define VERSION_H" >> $(VERSION); \
- echo "#define HV_FULL_VERSION "\"$(FULL_VERSION)\""" >> $(VERSION);\
echo "#define HV_API_MAJOR_VERSION $(API_MAJOR_VERSION)U" >> $(VERSION);\
echo "#define HV_API_MINOR_VERSION $(API_MINOR_VERSION)U" >> $(VERSION);\
- echo "#define HV_DAILY_TAG "\""$$DAILY_TAG"\""" >> $(VERSION);\
- echo "#define HV_BUILD_VERSION "\""$$PATCH"\""" >> $(VERSION);\
+ echo "#define HV_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_DIRTY "\""$$PATCH"\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_TIME "\"$$COMMIT_TIME\""" >> $(VERSION);\
echo "#define HV_BUILD_TYPE "\""$$BUILD_TYPE"\""" >> $(VERSION);\
echo "#define HV_BUILD_TIME "\""$$TIME"\""" >> $(VERSION);\
echo "#define HV_BUILD_USER "\""$$USER"\""" >> $(VERSION);\
echo "#define HV_BUILD_SCENARIO "\"$(SCENARIO)\""" >> $(VERSION);\
echo "#define HV_BUILD_BOARD "\"$(BOARD)\""" >> $(VERSION);\
- if [ "$(CONFIG_XML_ENABLED)" = "true" ]; then \
- echo "#define HV_CONFIG_TOOL \" with acrn-config\"" >> $(VERSION);\
- else \
- echo "#define HV_CONFIG_TOOL \"\"" >> $(VERSION);\
- fi;\
echo "#endif" >> $(VERSION)

-include $(C_OBJS:.o=.d)
diff --git a/hypervisor/arch/x86/cpu.c b/hypervisor/arch/x86/cpu.c
index 84782d045..081c96dfa 100644
--- a/hypervisor/arch/x86/cpu.c
+++ b/hypervisor/arch/x86/cpu.c
@@ -248,13 +248,11 @@ void init_pcpu_post(uint16_t pcpu_id)
/* Calibrate TSC Frequency */
calibrate_tsc();

- pr_acrnlog("HV version %s-%s-%s %s (daily tag:%s) %s@%s build by %s%s, start time %luus",
- HV_FULL_VERSION,
- HV_BUILD_TIME, HV_BUILD_VERSION, HV_BUILD_TYPE,
- HV_DAILY_TAG, HV_BUILD_SCENARIO, HV_BUILD_BOARD,
- HV_BUILD_USER, HV_CONFIG_TOOL, ticks_to_us(start_tick));
-
- pr_acrnlog("API version %u.%u", HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ pr_acrnlog("HV version %s-%s-%s %s%s%s%s %s@%s build by %s, start time %luus",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME, HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "", HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "", HV_BUILD_SCENARIO,
+ HV_BUILD_BOARD, HV_BUILD_USER, ticks_to_us(start_tick));

pr_acrnlog("Detect processor: %s", (get_pcpu_info())->model_name);

diff --git a/hypervisor/debug/shell.c b/hypervisor/debug/shell.c
index 4a0451fd5..ac4d52944 100644
--- a/hypervisor/debug/shell.c
+++ b/hypervisor/debug/shell.c
@@ -738,9 +738,11 @@ static int32_t shell_version(__unused int32_t argc, __unused char **argv)
{
char temp_str[MAX_STR_SIZE];

- snprintf(temp_str, MAX_STR_SIZE, "HV %s-%s-%s %s (daily tag: %s) %s@%s build by %s%s\nAPI %u.%u\r\n",
- HV_FULL_VERSION, HV_BUILD_TIME, HV_BUILD_VERSION, HV_BUILD_TYPE, HV_DAILY_TAG, HV_BUILD_SCENARIO,
- HV_BUILD_BOARD, HV_BUILD_USER, HV_CONFIG_TOOL, HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ snprintf(temp_str, MAX_STR_SIZE, "%s-%s-%s %s%s%s%s %s@%s build by %s %s\r\n",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME, HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "", HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
+ HV_BUILD_SCENARIO, HV_BUILD_BOARD, HV_BUILD_USER, HV_BUILD_TIME);
shell_puts(temp_str);

return 0;
--
2.25.1


Zhang, Wei6
 

-----Original Message-----
From: Li, Fei1 <fei1.li@...>
Sent: Wednesday, November 16, 2022 3:59 PM
To: Zhang, Wei6 <wei6.zhang@...>
Cc: acrn-dev@...; Xie, Nanlin <nanlin.xie@...>; Mao,
Junjie <junjie.mao@...>
Subject: Re: [PATCH V2] hv dm: change the version format

On 2022-11-16 at 15:34:08 +0800, wei6.zhang@... wrote:
From: Zhangwei6 <wei6.zhang@...>

The version info is used to tell the user when and where the binary is
compiled and built, this will change the hv and dm version format.

The hv follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-
commit_id-d
irty
DBG/REL(tag-current_commit_id) scenario@board build by author date.
The dm follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-
commit_id-d
irty
(tag-current_commit_id) build by author date.
Please explain tag-current_commit_id is optional.
Ok, it is optional, I will explain this. It will only exist if current commit_id has tags.


The dm doesn't contain DBG/REL because it's given in configurator-tool
only for hv. also not contain scenario and board info.

e.g.
with tag:
ACRN:\>version
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty DBG(tag:
v3.1)
scenario3.1@... build by zhangwei 2022-11-16 07:02:37 $acrn-dm
-v
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty(tag: v3.1)
build by zhangwei@2022-11-16 07:02:35 without tag:
ACRN:\>version
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty DBG
scenario3.1@... build by zhangwei 2022-11-16 06:49:44 $acrn-dm
-v
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty build by
zhangwei@2022-11-16 06:49:43

Tracked-On #8303
Signed-off-by: Zhangwei6 <wei6.zhang@...>
---
Makefile | 9 +++++++++
devicemodel/Makefile | 19 +++++++++----------
devicemodel/core/main.c | 8 +++++---
hypervisor/Makefile | 19 ++++++++-----------
hypervisor/arch/x86/cpu.c | 12 +++++------- hypervisor/debug/shell.c
| 8 +++++---
6 files changed, 41 insertions(+), 34 deletions(-)

diff --git a/Makefile b/Makefile
index 69e322b34..da6e15c35 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,15 @@ ifneq ($(SCM_VERSION),)
SCM_VERSION := "-"$(SCM_VERSION)
endif
export
FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION
)$(SCM_VE
RSION)
+STABLE_STR := -stable
+ifeq ($(EXTRA_VERSION), -unstable)
+ STABLE_STR := -unstable
+endif
+REMOTE_BRANCH := $(shell [ -d .git ] && git rev-parse --abbrev-ref
+HEAD) ifneq ($(REMOTE_BRANCH),)
+ REMOTE_BRANCH := "-"$(REMOTE_BRANCH) endif export
+BRANCH_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(STABLE_ST
R)$(REMOTE
+_BRANCH)

ifdef TARGET_DIR
$(warning TARGET_DIR is obsoleted because generated configuration
files are now stored in the build directory) diff --git
a/devicemodel/Makefile b/devicemodel/Makefile index
823265e27..4c333f886 100644
--- a/devicemodel/Makefile
+++ b/devicemodel/Makefile
@@ -229,27 +229,26 @@ distclean:
$(VERSION_H):
mkdir -p $(DM_OBJDIR)/include
touch $(VERSION_H)
- if [ "$(DM_BUILD_VERSION)"x = x -o "$(DM_BUILD_TAG)"x =
x ];then\
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else
PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else\
- PATCH=$(DM_BUILD_VERSION);\
- DAILY_TAG=$(DM_BUILD_TAG);\
+ PATCH="$(BUILD_VERSION)";\
fi;\
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --
format=%cd);
+\
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}"
"+%Y-%m-%d %H:%M:%S"); \
USER="$${USER:-$$(id -u -n)}"; \
echo "/*" > $(VERSION_H); \
sed 's/^/ * /' ../LICENSE >> $(VERSION_H);\
echo " */" >> $(VERSION_H);\
echo "" >> $(VERSION_H);\
- echo "#define DM_MAJOR_VERSION $(MAJOR_VERSION)" >>
$(VERSION_H);\
- echo "#define DM_MINOR_VERSION $(MINOR_VERSION)" >>
$(VERSION_H);\
- echo "#define DM_EXTRA_VERSION "\"$(EXTRA_VERSION)\""" >>
$(VERSION_H);\
- echo "#define DM_FULL_VERSION "\"$(FULL_VERSION)\""" >>
$(VERSION_H);\
- echo "#define DM_DAILY_TAG "\""$$DAILY_TAG"\""" >>
$(VERSION_H);\
- echo "#define DM_BUILD_VERSION "\""$$PATCH"\""" >>
$(VERSION_H);\
+ echo "#define DM_BRANCH_VERSION
"\"$(BRANCH_VERSION)\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_DIRTY "\""$$PATCH"\""" >>
$(VERSION_H);\
+ echo "#define DM_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >>
$(VERSION_H);\
+ echo "#define DM_COMMIT_TIME "\"$$COMMIT_TIME\""" >>
$(VERSION_H);\
echo "#define DM_BUILD_TIME "\""$$TIME"\""" >> $(VERSION_H);\
echo "#define DM_BUILD_USER "\""$$USER"\""" >> $(VERSION_H)

diff --git a/devicemodel/core/main.c b/devicemodel/core/main.c index
135a6435c..690e2042c 100644
--- a/devicemodel/core/main.c
+++ b/devicemodel/core/main.c
@@ -202,9 +202,11 @@ static void outdate(char *msg) static void
print_version(void)
{
- fprintf(stdout, "DM version is: %s-%s (daily tag:%s), build
by %s@%s\n",
- DM_FULL_VERSION,
- DM_BUILD_VERSION, DM_DAILY_TAG,
DM_BUILD_USER, DM_BUILD_TIME);
+ fprintf(stdout, "%s-%s-%s%s%s%s build by %s@%s\n",
+ DM_BRANCH_VERSION, DM_COMMIT_TIME,
DM_COMMIT_DIRTY,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? "(tag: " : "",
DM_COMMIT_TAGS,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? ")" : "",
+ DM_BUILD_USER, DM_BUILD_TIME);
I think we should keep the "DM/HV" prefix. What do you think ?
The rest is LGTM.

exit(0);
}
diff --git a/hypervisor/Makefile b/hypervisor/Makefile index
cd49ae28c..4ba6a9772 100644
--- a/hypervisor/Makefile
+++ b/hypervisor/Makefile
@@ -517,15 +517,16 @@ distclean:
PHONY: (VERSION)
$(VERSION): $(HV_CONFIG_H)
touch $(VERSION)
- @if [ "$(BUILD_VERSION)"x = x -o "$(BUILD_TAG)"x = x ];then \
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else
PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else \
PATCH="$(BUILD_VERSION)"; \
- DAILY_TAG="$(BUILD_TAG)"; \
fi; \
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --
format=%cd);
+\
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}"
"+%F %T"); \
USER="$${USER:-$$(id -u -n)}"; \
if [ x$(CONFIG_RELEASE) = "xy" ];then BUILD_TYPE="REL";else
BUILD_TYPE="DBG";fi;\ @@ -535,21 +536,17 @@ $(VERSION):
$(HV_CONFIG_H)
echo "" >> $(VERSION); \
echo "#ifndef VERSION_H" >> $(VERSION); \
echo "#define VERSION_H" >> $(VERSION); \
- echo "#define HV_FULL_VERSION "\"$(FULL_VERSION)\""" >>
$(VERSION);\
echo "#define HV_API_MAJOR_VERSION
$(API_MAJOR_VERSION)U" >> $(VERSION);\
echo "#define HV_API_MINOR_VERSION
$(API_MINOR_VERSION)U" >> $(VERSION);\
- echo "#define HV_DAILY_TAG "\""$$DAILY_TAG"\""" >>
$(VERSION);\
- echo "#define HV_BUILD_VERSION "\""$$PATCH"\""" >>
$(VERSION);\
+ echo "#define HV_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_DIRTY "\""$$PATCH"\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_TIME "\"$$COMMIT_TIME\""" >>
$(VERSION);\
echo "#define HV_BUILD_TYPE "\""$$BUILD_TYPE"\""" >>
$(VERSION);\
echo "#define HV_BUILD_TIME "\""$$TIME"\""" >> $(VERSION);\
echo "#define HV_BUILD_USER "\""$$USER"\""" >> $(VERSION);\
echo "#define HV_BUILD_SCENARIO "\"$(SCENARIO)\""" >>
$(VERSION);\
echo "#define HV_BUILD_BOARD "\"$(BOARD)\""" >> $(VERSION);\
- if [ "$(CONFIG_XML_ENABLED)" = "true" ]; then \
- echo "#define HV_CONFIG_TOOL \" with acrn-config\"" >>
$(VERSION);\
- else \
- echo "#define HV_CONFIG_TOOL \"\"" >> $(VERSION);\
- fi;\
echo "#endif" >> $(VERSION)

-include $(C_OBJS:.o=.d)
diff --git a/hypervisor/arch/x86/cpu.c b/hypervisor/arch/x86/cpu.c
index 84782d045..081c96dfa 100644
--- a/hypervisor/arch/x86/cpu.c
+++ b/hypervisor/arch/x86/cpu.c
@@ -248,13 +248,11 @@ void init_pcpu_post(uint16_t pcpu_id)
/* Calibrate TSC Frequency */
calibrate_tsc();

- pr_acrnlog("HV version %s-%s-%s %s (daily tag:%s) %s@%s
build by %s%s, start time %luus",
- HV_FULL_VERSION,
- HV_BUILD_TIME, HV_BUILD_VERSION,
HV_BUILD_TYPE,
- HV_DAILY_TAG, HV_BUILD_SCENARIO,
HV_BUILD_BOARD,
- HV_BUILD_USER, HV_CONFIG_TOOL,
ticks_to_us(start_tick));
-
- pr_acrnlog("API version %u.%u",
HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ pr_acrnlog("HV version %s-%s-%s %s%s%s%s %s@%s build
by %s, start time %luus",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME,
HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "",
HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
HV_BUILD_SCENARIO,
+ HV_BUILD_BOARD, HV_BUILD_USER,
ticks_to_us(start_tick));

pr_acrnlog("Detect processor: %s", (get_pcpu_info())-
model_name);

diff --git a/hypervisor/debug/shell.c b/hypervisor/debug/shell.c index
4a0451fd5..ac4d52944 100644
--- a/hypervisor/debug/shell.c
+++ b/hypervisor/debug/shell.c
@@ -738,9 +738,11 @@ static int32_t shell_version(__unused int32_t
argc, __unused char **argv) {
char temp_str[MAX_STR_SIZE];

- snprintf(temp_str, MAX_STR_SIZE, "HV %s-%s-%s %s (daily
tag: %s) %s@%s build by %s%s\nAPI %u.%u\r\n",
- HV_FULL_VERSION, HV_BUILD_TIME, HV_BUILD_VERSION,
HV_BUILD_TYPE, HV_DAILY_TAG, HV_BUILD_SCENARIO,
- HV_BUILD_BOARD, HV_BUILD_USER, HV_CONFIG_TOOL,
HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ snprintf(temp_str, MAX_STR_SIZE, "%s-%s-%s %s%s%s%s %s@%s
build by %s %s\r\n",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME,
HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "",
HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
+ HV_BUILD_SCENARIO, HV_BUILD_BOARD, HV_BUILD_USER,
HV_BUILD_TIME);
shell_puts(temp_str);

return 0;
--
2.25.1


Zhang, Wei6
 

-----Original Message-----
From: Li, Fei1 <fei1.li@...>
Sent: Wednesday, November 16, 2022 3:59 PM
To: Zhang, Wei6 <wei6.zhang@...>
Cc: acrn-dev@...; Xie, Nanlin <nanlin.xie@...>; Mao,
Junjie <junjie.mao@...>
Subject: Re: [PATCH V2] hv dm: change the version format

On 2022-11-16 at 15:34:08 +0800, wei6.zhang@... wrote:
From: Zhangwei6 <wei6.zhang@...>

The version info is used to tell the user when and where the binary is
compiled and built, this will change the hv and dm version format.

The hv follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-
commit_id-d
irty
DBG/REL(tag-current_commit_id) scenario@board build by author date.
The dm follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-
commit_id-d
irty
(tag-current_commit_id) build by author date.
Please explain tag-current_commit_id is optional.
Ok, I will explain it.


The dm doesn't contain DBG/REL because it's given in configurator-tool
only for hv. also not contain scenario and board info.

e.g.
with tag:
ACRN:\>version
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty DBG(tag:
v3.1)
scenario3.1@... build by zhangwei 2022-11-16 07:02:37 $acrn-dm
-v
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty(tag: v3.1)
build by zhangwei@2022-11-16 07:02:35 without tag:
ACRN:\>version
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty DBG
scenario3.1@... build by zhangwei 2022-11-16 06:49:44 $acrn-dm
-v
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty build by
zhangwei@2022-11-16 06:49:43

Tracked-On #8303
Signed-off-by: Zhangwei6 <wei6.zhang@...>
---
Makefile | 9 +++++++++
devicemodel/Makefile | 19 +++++++++----------
devicemodel/core/main.c | 8 +++++---
hypervisor/Makefile | 19 ++++++++-----------
hypervisor/arch/x86/cpu.c | 12 +++++------- hypervisor/debug/shell.c
| 8 +++++---
6 files changed, 41 insertions(+), 34 deletions(-)

diff --git a/Makefile b/Makefile
index 69e322b34..da6e15c35 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,15 @@ ifneq ($(SCM_VERSION),)
SCM_VERSION := "-"$(SCM_VERSION)
endif
export
FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION
)$(SCM_VE
RSION)
+STABLE_STR := -stable
+ifeq ($(EXTRA_VERSION), -unstable)
+ STABLE_STR := -unstable
+endif
+REMOTE_BRANCH := $(shell [ -d .git ] && git rev-parse --abbrev-ref
+HEAD) ifneq ($(REMOTE_BRANCH),)
+ REMOTE_BRANCH := "-"$(REMOTE_BRANCH) endif export
+BRANCH_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(STABLE_ST
R)$(REMOTE
+_BRANCH)

ifdef TARGET_DIR
$(warning TARGET_DIR is obsoleted because generated configuration
files are now stored in the build directory) diff --git
a/devicemodel/Makefile b/devicemodel/Makefile index
823265e27..4c333f886 100644
--- a/devicemodel/Makefile
+++ b/devicemodel/Makefile
@@ -229,27 +229,26 @@ distclean:
$(VERSION_H):
mkdir -p $(DM_OBJDIR)/include
touch $(VERSION_H)
- if [ "$(DM_BUILD_VERSION)"x = x -o "$(DM_BUILD_TAG)"x =
x ];then\
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else
PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else\
- PATCH=$(DM_BUILD_VERSION);\
- DAILY_TAG=$(DM_BUILD_TAG);\
+ PATCH="$(BUILD_VERSION)";\
fi;\
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --
format=%cd);
+\
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}"
"+%Y-%m-%d %H:%M:%S"); \
USER="$${USER:-$$(id -u -n)}"; \
echo "/*" > $(VERSION_H); \
sed 's/^/ * /' ../LICENSE >> $(VERSION_H);\
echo " */" >> $(VERSION_H);\
echo "" >> $(VERSION_H);\
- echo "#define DM_MAJOR_VERSION $(MAJOR_VERSION)" >>
$(VERSION_H);\
- echo "#define DM_MINOR_VERSION $(MINOR_VERSION)" >>
$(VERSION_H);\
- echo "#define DM_EXTRA_VERSION "\"$(EXTRA_VERSION)\""" >>
$(VERSION_H);\
- echo "#define DM_FULL_VERSION "\"$(FULL_VERSION)\""" >>
$(VERSION_H);\
- echo "#define DM_DAILY_TAG "\""$$DAILY_TAG"\""" >>
$(VERSION_H);\
- echo "#define DM_BUILD_VERSION "\""$$PATCH"\""" >>
$(VERSION_H);\
+ echo "#define DM_BRANCH_VERSION
"\"$(BRANCH_VERSION)\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_DIRTY "\""$$PATCH"\""" >>
$(VERSION_H);\
+ echo "#define DM_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >>
$(VERSION_H);\
+ echo "#define DM_COMMIT_TIME "\"$$COMMIT_TIME\""" >>
$(VERSION_H);\
echo "#define DM_BUILD_TIME "\""$$TIME"\""" >> $(VERSION_H);\
echo "#define DM_BUILD_USER "\""$$USER"\""" >> $(VERSION_H)

diff --git a/devicemodel/core/main.c b/devicemodel/core/main.c index
135a6435c..690e2042c 100644
--- a/devicemodel/core/main.c
+++ b/devicemodel/core/main.c
@@ -202,9 +202,11 @@ static void outdate(char *msg) static void
print_version(void)
{
- fprintf(stdout, "DM version is: %s-%s (daily tag:%s), build
by %s@%s\n",
- DM_FULL_VERSION,
- DM_BUILD_VERSION, DM_DAILY_TAG,
DM_BUILD_USER, DM_BUILD_TIME);
+ fprintf(stdout, "%s-%s-%s%s%s%s build by %s@%s\n",
+ DM_BRANCH_VERSION, DM_COMMIT_TIME,
DM_COMMIT_DIRTY,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? "(tag: " : "",
DM_COMMIT_TAGS,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? ")" : "",
+ DM_BUILD_USER, DM_BUILD_TIME);
I think we should keep the "DM/HV" prefix. What do you think ?
The rest is LGTM.
Ok, I will keep it. This info can be useful.

Best Regards
Zhangwei


exit(0);
}
diff --git a/hypervisor/Makefile b/hypervisor/Makefile index
cd49ae28c..4ba6a9772 100644
--- a/hypervisor/Makefile
+++ b/hypervisor/Makefile
@@ -517,15 +517,16 @@ distclean:
PHONY: (VERSION)
$(VERSION): $(HV_CONFIG_H)
touch $(VERSION)
- @if [ "$(BUILD_VERSION)"x = x -o "$(BUILD_TAG)"x = x ];then \
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else
PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else \
PATCH="$(BUILD_VERSION)"; \
- DAILY_TAG="$(BUILD_TAG)"; \
fi; \
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --
format=%cd);
+\
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}"
"+%F %T"); \
USER="$${USER:-$$(id -u -n)}"; \
if [ x$(CONFIG_RELEASE) = "xy" ];then BUILD_TYPE="REL";else
BUILD_TYPE="DBG";fi;\ @@ -535,21 +536,17 @@ $(VERSION):
$(HV_CONFIG_H)
echo "" >> $(VERSION); \
echo "#ifndef VERSION_H" >> $(VERSION); \
echo "#define VERSION_H" >> $(VERSION); \
- echo "#define HV_FULL_VERSION "\"$(FULL_VERSION)\""" >>
$(VERSION);\
echo "#define HV_API_MAJOR_VERSION
$(API_MAJOR_VERSION)U" >> $(VERSION);\
echo "#define HV_API_MINOR_VERSION
$(API_MINOR_VERSION)U" >> $(VERSION);\
- echo "#define HV_DAILY_TAG "\""$$DAILY_TAG"\""" >>
$(VERSION);\
- echo "#define HV_BUILD_VERSION "\""$$PATCH"\""" >>
$(VERSION);\
+ echo "#define HV_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_DIRTY "\""$$PATCH"\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_TIME "\"$$COMMIT_TIME\""" >>
$(VERSION);\
echo "#define HV_BUILD_TYPE "\""$$BUILD_TYPE"\""" >>
$(VERSION);\
echo "#define HV_BUILD_TIME "\""$$TIME"\""" >> $(VERSION);\
echo "#define HV_BUILD_USER "\""$$USER"\""" >> $(VERSION);\
echo "#define HV_BUILD_SCENARIO "\"$(SCENARIO)\""" >>
$(VERSION);\
echo "#define HV_BUILD_BOARD "\"$(BOARD)\""" >> $(VERSION);\
- if [ "$(CONFIG_XML_ENABLED)" = "true" ]; then \
- echo "#define HV_CONFIG_TOOL \" with acrn-config\"" >>
$(VERSION);\
- else \
- echo "#define HV_CONFIG_TOOL \"\"" >> $(VERSION);\
- fi;\
echo "#endif" >> $(VERSION)

-include $(C_OBJS:.o=.d)
diff --git a/hypervisor/arch/x86/cpu.c b/hypervisor/arch/x86/cpu.c
index 84782d045..081c96dfa 100644
--- a/hypervisor/arch/x86/cpu.c
+++ b/hypervisor/arch/x86/cpu.c
@@ -248,13 +248,11 @@ void init_pcpu_post(uint16_t pcpu_id)
/* Calibrate TSC Frequency */
calibrate_tsc();

- pr_acrnlog("HV version %s-%s-%s %s (daily tag:%s) %s@%s
build by %s%s, start time %luus",
- HV_FULL_VERSION,
- HV_BUILD_TIME, HV_BUILD_VERSION,
HV_BUILD_TYPE,
- HV_DAILY_TAG, HV_BUILD_SCENARIO,
HV_BUILD_BOARD,
- HV_BUILD_USER, HV_CONFIG_TOOL,
ticks_to_us(start_tick));
-
- pr_acrnlog("API version %u.%u",
HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ pr_acrnlog("HV version %s-%s-%s %s%s%s%s %s@%s build
by %s, start time %luus",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME,
HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "",
HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
HV_BUILD_SCENARIO,
+ HV_BUILD_BOARD, HV_BUILD_USER,
ticks_to_us(start_tick));

pr_acrnlog("Detect processor: %s", (get_pcpu_info())-
model_name);

diff --git a/hypervisor/debug/shell.c b/hypervisor/debug/shell.c index
4a0451fd5..ac4d52944 100644
--- a/hypervisor/debug/shell.c
+++ b/hypervisor/debug/shell.c
@@ -738,9 +738,11 @@ static int32_t shell_version(__unused int32_t
argc, __unused char **argv) {
char temp_str[MAX_STR_SIZE];

- snprintf(temp_str, MAX_STR_SIZE, "HV %s-%s-%s %s (daily
tag: %s) %s@%s build by %s%s\nAPI %u.%u\r\n",
- HV_FULL_VERSION, HV_BUILD_TIME, HV_BUILD_VERSION,
HV_BUILD_TYPE, HV_DAILY_TAG, HV_BUILD_SCENARIO,
- HV_BUILD_BOARD, HV_BUILD_USER, HV_CONFIG_TOOL,
HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ snprintf(temp_str, MAX_STR_SIZE, "%s-%s-%s %s%s%s%s %s@%s
build by %s %s\r\n",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME,
HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "",
HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
+ HV_BUILD_SCENARIO, HV_BUILD_BOARD, HV_BUILD_USER,
HV_BUILD_TIME);
shell_puts(temp_str);

return 0;
--
2.25.1


Junjie Mao
 

-----Original Message-----
From: Li, Fei1 <fei1.li@...>
Sent: Wednesday, November 16, 2022 3:59 PM
To: Zhang, Wei6 <wei6.zhang@...>
Cc: acrn-dev@...; Xie, Nanlin <nanlin.xie@...>; Mao, Junjie
<junjie.mao@...>
Subject: Re: [PATCH V2] hv dm: change the version format

On 2022-11-16 at 15:34:08 +0800, wei6.zhang@... wrote:
From: Zhangwei6 <wei6.zhang@...>

The version info is used to tell the user when and where the binary is
compiled and built, this will change the hv and dm version format.

The hv follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-commit_id-dirty
DBG/REL(tag-current_commit_id) scenario@board build by author date.
The dm follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-commit_id-dirty
(tag-current_commit_id) build by author date.
Please explain tag-current_commit_id is optional.

The dm doesn't contain DBG/REL because it's given in configurator-tool
only for hv. also not contain scenario and board info.

e.g.
with tag:
ACRN:\>version
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty DBG(tag: v3.1)
scenario3.1@... build by zhangwei 2022-11-16 07:02:37
$acrn-dm -v
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty(tag: v3.1)
build by zhangwei@2022-11-16 07:02:35
without tag:
ACRN:\>version
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty DBG
scenario3.1@... build by zhangwei 2022-11-16 06:49:44
$acrn-dm -v
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty
build by zhangwei@2022-11-16 06:49:43

Tracked-On #8303
Signed-off-by: Zhangwei6 <wei6.zhang@...>
Reviewed-by: Junjie Mao <junjie.mao@...>

Two minor comments below.

---
Makefile | 9 +++++++++
devicemodel/Makefile | 19 +++++++++----------
devicemodel/core/main.c | 8 +++++---
hypervisor/Makefile | 19 ++++++++-----------
hypervisor/arch/x86/cpu.c | 12 +++++-------
hypervisor/debug/shell.c | 8 +++++---
6 files changed, 41 insertions(+), 34 deletions(-)

diff --git a/Makefile b/Makefile
index 69e322b34..da6e15c35 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,15 @@ ifneq ($(SCM_VERSION),)
SCM_VERSION := "-"$(SCM_VERSION)
endif
export FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION)$(SCM_VERSION)
+STABLE_STR := -stable
+ifeq ($(EXTRA_VERSION), -unstable)
+ STABLE_STR := -unstable
+endif
+REMOTE_BRANCH := $(shell [ -d .git ] && git rev-parse --abbrev-ref HEAD)
+ifneq ($(REMOTE_BRANCH),)
+ REMOTE_BRANCH := "-"$(REMOTE_BRANCH)
Please mind the indentation. Each level of ifdef/ifneq/etc. adds two whitespaces, not 8 whitespaces or a tab.

+endif
+export BRANCH_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(STABLE_STR)$(REMOTE_BRANCH)

ifdef TARGET_DIR
$(warning TARGET_DIR is obsoleted because generated configuration files are now
stored in the build directory)
diff --git a/devicemodel/Makefile b/devicemodel/Makefile
index 823265e27..4c333f886 100644
--- a/devicemodel/Makefile
+++ b/devicemodel/Makefile
@@ -229,27 +229,26 @@ distclean:
$(VERSION_H):
mkdir -p $(DM_OBJDIR)/include
touch $(VERSION_H)
- if [ "$(DM_BUILD_VERSION)"x = x -o "$(DM_BUILD_TAG)"x = x ];then\
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else\
- PATCH=$(DM_BUILD_VERSION);\
- DAILY_TAG=$(DM_BUILD_TAG);\
+ PATCH="$(BUILD_VERSION)";\
fi;\
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --format=%cd); \
Having a whitespace in the middle of the commit time may cause misinterpretation of the branch version. Add a hyphen between `%d` and `%T` at least.

TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}" "+%Y-%m-%d %H:%M:%S"); \
USER="$${USER:-$$(id -u -n)}"; \
echo "/*" > $(VERSION_H); \
sed 's/^/ * /' ../LICENSE >> $(VERSION_H);\
echo " */" >> $(VERSION_H);\
echo "" >> $(VERSION_H);\
- echo "#define DM_MAJOR_VERSION $(MAJOR_VERSION)" >> $(VERSION_H);\
- echo "#define DM_MINOR_VERSION $(MINOR_VERSION)" >> $(VERSION_H);\
- echo "#define DM_EXTRA_VERSION "\"$(EXTRA_VERSION)\""" >> $(VERSION_H);\
- echo "#define DM_FULL_VERSION "\"$(FULL_VERSION)\""" >> $(VERSION_H);\
- echo "#define DM_DAILY_TAG "\""$$DAILY_TAG"\""" >> $(VERSION_H);\
- echo "#define DM_BUILD_VERSION "\""$$PATCH"\""" >> $(VERSION_H);\
+ echo "#define DM_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_DIRTY "\""$$PATCH"\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_TIME "\"$$COMMIT_TIME\""" >> $(VERSION_H);\
echo "#define DM_BUILD_TIME "\""$$TIME"\""" >> $(VERSION_H);\
echo "#define DM_BUILD_USER "\""$$USER"\""" >> $(VERSION_H)

diff --git a/devicemodel/core/main.c b/devicemodel/core/main.c
index 135a6435c..690e2042c 100644
--- a/devicemodel/core/main.c
+++ b/devicemodel/core/main.c
@@ -202,9 +202,11 @@ static void outdate(char *msg)
static void
print_version(void)
{
- fprintf(stdout, "DM version is: %s-%s (daily tag:%s), build by %s@%s\n",
- DM_FULL_VERSION,
- DM_BUILD_VERSION, DM_DAILY_TAG, DM_BUILD_USER, DM_BUILD_TIME);
+ fprintf(stdout, "%s-%s-%s%s%s%s build by %s@%s\n",
+ DM_BRANCH_VERSION, DM_COMMIT_TIME, DM_COMMIT_DIRTY,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? "(tag: " : "", DM_COMMIT_TAGS,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? ")" : "",
+ DM_BUILD_USER, DM_BUILD_TIME);
I think we should keep the "DM/HV" prefix. What do you think ?
The rest is LGTM.

exit(0);
}
diff --git a/hypervisor/Makefile b/hypervisor/Makefile
index cd49ae28c..4ba6a9772 100644
--- a/hypervisor/Makefile
+++ b/hypervisor/Makefile
@@ -517,15 +517,16 @@ distclean:
PHONY: (VERSION)
$(VERSION): $(HV_CONFIG_H)
touch $(VERSION)
- @if [ "$(BUILD_VERSION)"x = x -o "$(BUILD_TAG)"x = x ];then \
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else \
PATCH="$(BUILD_VERSION)"; \
- DAILY_TAG="$(BUILD_TAG)"; \
fi; \
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T" --format=%cd); \
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}" "+%F %T"); \
USER="$${USER:-$$(id -u -n)}"; \
if [ x$(CONFIG_RELEASE) = "xy" ];then BUILD_TYPE="REL";else BUILD_TYPE="DBG";fi;\
@@ -535,21 +536,17 @@ $(VERSION): $(HV_CONFIG_H)
echo "" >> $(VERSION); \
echo "#ifndef VERSION_H" >> $(VERSION); \
echo "#define VERSION_H" >> $(VERSION); \
- echo "#define HV_FULL_VERSION "\"$(FULL_VERSION)\""" >> $(VERSION);\
echo "#define HV_API_MAJOR_VERSION $(API_MAJOR_VERSION)U" >> $(VERSION);\
echo "#define HV_API_MINOR_VERSION $(API_MINOR_VERSION)U" >> $(VERSION);\
- echo "#define HV_DAILY_TAG "\""$$DAILY_TAG"\""" >> $(VERSION);\
- echo "#define HV_BUILD_VERSION "\""$$PATCH"\""" >> $(VERSION);\
+ echo "#define HV_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_DIRTY "\""$$PATCH"\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >> $(VERSION);\
+ echo "#define HV_COMMIT_TIME "\"$$COMMIT_TIME\""" >> $(VERSION);\
echo "#define HV_BUILD_TYPE "\""$$BUILD_TYPE"\""" >> $(VERSION);\
echo "#define HV_BUILD_TIME "\""$$TIME"\""" >> $(VERSION);\
echo "#define HV_BUILD_USER "\""$$USER"\""" >> $(VERSION);\
echo "#define HV_BUILD_SCENARIO "\"$(SCENARIO)\""" >> $(VERSION);\
echo "#define HV_BUILD_BOARD "\"$(BOARD)\""" >> $(VERSION);\
- if [ "$(CONFIG_XML_ENABLED)" = "true" ]; then \
- echo "#define HV_CONFIG_TOOL \" with acrn-config\"" >> $(VERSION);\
- else \
- echo "#define HV_CONFIG_TOOL \"\"" >> $(VERSION);\
- fi;\
echo "#endif" >> $(VERSION)

-include $(C_OBJS:.o=.d)
diff --git a/hypervisor/arch/x86/cpu.c b/hypervisor/arch/x86/cpu.c
index 84782d045..081c96dfa 100644
--- a/hypervisor/arch/x86/cpu.c
+++ b/hypervisor/arch/x86/cpu.c
@@ -248,13 +248,11 @@ void init_pcpu_post(uint16_t pcpu_id)
/* Calibrate TSC Frequency */
calibrate_tsc();

- pr_acrnlog("HV version %s-%s-%s %s (daily tag:%s) %s@%s build by %s%s, start
time %luus",
- HV_FULL_VERSION,
- HV_BUILD_TIME, HV_BUILD_VERSION, HV_BUILD_TYPE,
- HV_DAILY_TAG, HV_BUILD_SCENARIO, HV_BUILD_BOARD,
- HV_BUILD_USER, HV_CONFIG_TOOL, ticks_to_us(start_tick));
-
- pr_acrnlog("API version %u.%u", HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ pr_acrnlog("HV version %s-%s-%s %s%s%s%s %s@%s build by %s, start time %luus",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME, HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "", HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "", HV_BUILD_SCENARIO,
+ HV_BUILD_BOARD, HV_BUILD_USER, ticks_to_us(start_tick));

pr_acrnlog("Detect processor: %s", (get_pcpu_info())->model_name);

diff --git a/hypervisor/debug/shell.c b/hypervisor/debug/shell.c
index 4a0451fd5..ac4d52944 100644
--- a/hypervisor/debug/shell.c
+++ b/hypervisor/debug/shell.c
@@ -738,9 +738,11 @@ static int32_t shell_version(__unused int32_t argc, __unused char
**argv)
{
char temp_str[MAX_STR_SIZE];

- snprintf(temp_str, MAX_STR_SIZE, "HV %s-%s-%s %s (daily tag: %s) %s@%s build
by %s%s\nAPI %u.%u\r\n",
- HV_FULL_VERSION, HV_BUILD_TIME, HV_BUILD_VERSION, HV_BUILD_TYPE, HV_DAILY_TAG,
HV_BUILD_SCENARIO,
- HV_BUILD_BOARD, HV_BUILD_USER, HV_CONFIG_TOOL, HV_API_MAJOR_VERSION,
HV_API_MINOR_VERSION);
+ snprintf(temp_str, MAX_STR_SIZE, "%s-%s-%s %s%s%s%s %s@%s build by %s %s\r\n",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME, HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "", HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
+ HV_BUILD_SCENARIO, HV_BUILD_BOARD, HV_BUILD_USER, HV_BUILD_TIME);
shell_puts(temp_str);

return 0;
--
2.25.1


Zhang, Wei6
 

-----Original Message-----
From: Mao, Junjie <junjie.mao@...>
Sent: Wednesday, November 16, 2022 4:10 PM
To: Li, Fei1 <fei1.li@...>; Zhang, Wei6 <wei6.zhang@...>
Cc: acrn-dev@...; Xie, Nanlin <nanlin.xie@...>
Subject: RE: [PATCH V2] hv dm: change the version format

-----Original Message-----
From: Li, Fei1 <fei1.li@...>
Sent: Wednesday, November 16, 2022 3:59 PM
To: Zhang, Wei6 <wei6.zhang@...>
Cc: acrn-dev@...; Xie, Nanlin
<nanlin.xie@...>; Mao, Junjie <junjie.mao@...>
Subject: Re: [PATCH V2] hv dm: change the version format

On 2022-11-16 at 15:34:08 +0800, wei6.zhang@... wrote:
From: Zhangwei6 <wei6.zhang@...>

The version info is used to tell the user when and where the binary
is compiled and built, this will change the hv and dm version format.

The hv follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-
commit_id
-dirty
DBG/REL(tag-current_commit_id) scenario@board build by author date.
The dm follows the format:
major.minor-stable/unstable-remote_branch-acrn-commit_date-
commit_id
-dirty
(tag-current_commit_id) build by author date.
Please explain tag-current_commit_id is optional.

The dm doesn't contain DBG/REL because it's given in
configurator-tool only for hv. also not contain scenario and board info.

e.g.
with tag:
ACRN:\>version
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty DBG(tag:
v3.1)
scenario3.1@... build by zhangwei 2022-11-16 07:02:37
$acrn-dm -v
3.1-stable-release_3.1-2022-09-27 11:15:42-7fad37e02-dirty(tag:
v3.1) build by zhangwei@2022-11-16 07:02:35 without tag:
ACRN:\>version
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty DBG
scenario3.1@... build by zhangwei 2022-11-16 06:49:44
$acrn-dm -v
3.2-unstable-master-2022-11-16 14:34:49-11f53d849-dirty build by
zhangwei@2022-11-16 06:49:43

Tracked-On #8303
Signed-off-by: Zhangwei6 <wei6.zhang@...>
Reviewed-by: Junjie Mao <junjie.mao@...>

Two minor comments below.

---
Makefile | 9 +++++++++
devicemodel/Makefile | 19 +++++++++----------
devicemodel/core/main.c | 8 +++++---
hypervisor/Makefile | 19 ++++++++-----------
hypervisor/arch/x86/cpu.c | 12 +++++-------
hypervisor/debug/shell.c | 8 +++++---
6 files changed, 41 insertions(+), 34 deletions(-)

diff --git a/Makefile b/Makefile
index 69e322b34..da6e15c35 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,15 @@ ifneq ($(SCM_VERSION),)
SCM_VERSION := "-"$(SCM_VERSION)
endif
export
FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION
)$(SCM_
VERSION)
+STABLE_STR := -stable
+ifeq ($(EXTRA_VERSION), -unstable)
+ STABLE_STR := -unstable
+endif
+REMOTE_BRANCH := $(shell [ -d .git ] && git rev-parse --abbrev-ref
+HEAD) ifneq ($(REMOTE_BRANCH),)
+ REMOTE_BRANCH := "-"$(REMOTE_BRANCH)
Please mind the indentation. Each level of ifdef/ifneq/etc. adds two
whitespaces, not 8 whitespaces or a tab.
Yes, I will pay attention to it and modify this ifneq.

+endif
+export
+BRANCH_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(STABLE_ST
R)$(REMO
+TE_BRANCH)

ifdef TARGET_DIR
$(warning TARGET_DIR is obsoleted because generated configuration
files are now
stored in the build directory)
diff --git a/devicemodel/Makefile b/devicemodel/Makefile index
823265e27..4c333f886 100644
--- a/devicemodel/Makefile
+++ b/devicemodel/Makefile
@@ -229,27 +229,26 @@ distclean:
$(VERSION_H):
mkdir -p $(DM_OBJDIR)/include
touch $(VERSION_H)
- if [ "$(DM_BUILD_VERSION)"x = x -o "$(DM_BUILD_TAG)"x =
x ];then\
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else
PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else\
- PATCH=$(DM_BUILD_VERSION);\
- DAILY_TAG=$(DM_BUILD_TAG);\
+ PATCH="$(BUILD_VERSION)";\
fi;\
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T"
+--format=%cd); \
Having a whitespace in the middle of the commit time may cause
misinterpretation of the branch version. Add a hyphen between `%d` and
`%T` at least.
Ok, I will add a a hyphen between `%d` and`%T`. The time looks like:
2022-11-16-14:53:36

Best Regards
Zhangwei

TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}"
"+%Y-%m-%d %H:%M:%S"); \
USER="$${USER:-$$(id -u -n)}"; \
echo "/*" > $(VERSION_H); \
sed 's/^/ * /' ../LICENSE >> $(VERSION_H);\
echo " */" >> $(VERSION_H);\
echo "" >> $(VERSION_H);\
- echo "#define DM_MAJOR_VERSION $(MAJOR_VERSION)" >>
$(VERSION_H);\
- echo "#define DM_MINOR_VERSION $(MINOR_VERSION)" >>
$(VERSION_H);\
- echo "#define DM_EXTRA_VERSION "\"$(EXTRA_VERSION)\""" >>
$(VERSION_H);\
- echo "#define DM_FULL_VERSION "\"$(FULL_VERSION)\""" >>
$(VERSION_H);\
- echo "#define DM_DAILY_TAG "\""$$DAILY_TAG"\""" >>
$(VERSION_H);\
- echo "#define DM_BUILD_VERSION "\""$$PATCH"\""" >>
$(VERSION_H);\
+ echo "#define DM_BRANCH_VERSION
"\"$(BRANCH_VERSION)\""" >> $(VERSION_H);\
+ echo "#define DM_COMMIT_DIRTY "\""$$PATCH"\""" >>
$(VERSION_H);\
+ echo "#define DM_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >>
$(VERSION_H);\
+ echo "#define DM_COMMIT_TIME "\"$$COMMIT_TIME\""" >>
+$(VERSION_H);\
echo "#define DM_BUILD_TIME "\""$$TIME"\""" >> $(VERSION_H);\
echo "#define DM_BUILD_USER "\""$$USER"\""" >> $(VERSION_H)

diff --git a/devicemodel/core/main.c b/devicemodel/core/main.c index
135a6435c..690e2042c 100644
--- a/devicemodel/core/main.c
+++ b/devicemodel/core/main.c
@@ -202,9 +202,11 @@ static void outdate(char *msg) static void
print_version(void)
{
- fprintf(stdout, "DM version is: %s-%s (daily tag:%s), build
by %s@%s\n",
- DM_FULL_VERSION,
- DM_BUILD_VERSION, DM_DAILY_TAG,
DM_BUILD_USER, DM_BUILD_TIME);
+ fprintf(stdout, "%s-%s-%s%s%s%s build by %s@%s\n",
+ DM_BRANCH_VERSION, DM_COMMIT_TIME,
DM_COMMIT_DIRTY,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? "(tag: " : "",
DM_COMMIT_TAGS,
+ (sizeof(DM_COMMIT_TAGS) > 1) ? ")" : "",
+ DM_BUILD_USER, DM_BUILD_TIME);
I think we should keep the "DM/HV" prefix. What do you think ?
The rest is LGTM.

exit(0);
}
diff --git a/hypervisor/Makefile b/hypervisor/Makefile index
cd49ae28c..4ba6a9772 100644
--- a/hypervisor/Makefile
+++ b/hypervisor/Makefile
@@ -517,15 +517,16 @@ distclean:
PHONY: (VERSION)
$(VERSION): $(HV_CONFIG_H)
touch $(VERSION)
- @if [ "$(BUILD_VERSION)"x = x -o "$(BUILD_TAG)"x = x ];then \
+ @if [ "$(BUILD_VERSION)"x = x ];then \
COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
DIRTY=`git diff-index --name-only HEAD`;\
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else
PATCH="$$COMMIT";fi;\
- DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
else \
PATCH="$(BUILD_VERSION)"; \
- DAILY_TAG="$(BUILD_TAG)"; \
fi; \
+ COMMIT_TAGS=$$(git tag --points-at HEAD|tr -s "\n" " "); \
+ COMMIT_TAGS=$$(eval echo $$COMMIT_TAGS);\
+ COMMIT_TIME=$$(git log -1 --date=format:"%Y-%m-%d %T"
+--format=%cd); \
TIME=$$(date -u -d "@$${SOURCE_DATE_EPOCH:-$$(date +%s)}"
"+%F %T"); \
USER="$${USER:-$$(id -u -n)}"; \
if [ x$(CONFIG_RELEASE) = "xy" ];then BUILD_TYPE="REL";else
BUILD_TYPE="DBG";fi;\ @@ -535,21 +536,17 @@ $(VERSION):
$(HV_CONFIG_H)
echo "" >> $(VERSION); \
echo "#ifndef VERSION_H" >> $(VERSION); \
echo "#define VERSION_H" >> $(VERSION); \
- echo "#define HV_FULL_VERSION "\"$(FULL_VERSION)\""" >>
$(VERSION);\
echo "#define HV_API_MAJOR_VERSION
$(API_MAJOR_VERSION)U" >> $(VERSION);\
echo "#define HV_API_MINOR_VERSION
$(API_MINOR_VERSION)U" >> $(VERSION);\
- echo "#define HV_DAILY_TAG "\""$$DAILY_TAG"\""" >>
$(VERSION);\
- echo "#define HV_BUILD_VERSION "\""$$PATCH"\""" >>
$(VERSION);\
+ echo "#define HV_BRANCH_VERSION "\"$(BRANCH_VERSION)\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_DIRTY "\""$$PATCH"\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_TAGS "\"$$COMMIT_TAGS\""" >>
$(VERSION);\
+ echo "#define HV_COMMIT_TIME "\"$$COMMIT_TIME\""" >>
$(VERSION);\
echo "#define HV_BUILD_TYPE "\""$$BUILD_TYPE"\""" >>
$(VERSION);\
echo "#define HV_BUILD_TIME "\""$$TIME"\""" >> $(VERSION);\
echo "#define HV_BUILD_USER "\""$$USER"\""" >> $(VERSION);\
echo "#define HV_BUILD_SCENARIO "\"$(SCENARIO)\""" >>
$(VERSION);\
echo "#define HV_BUILD_BOARD "\"$(BOARD)\""" >> $(VERSION);\
- if [ "$(CONFIG_XML_ENABLED)" = "true" ]; then \
- echo "#define HV_CONFIG_TOOL \" with acrn-config\"" >>
$(VERSION);\
- else \
- echo "#define HV_CONFIG_TOOL \"\"" >> $(VERSION);\
- fi;\
echo "#endif" >> $(VERSION)

-include $(C_OBJS:.o=.d)
diff --git a/hypervisor/arch/x86/cpu.c b/hypervisor/arch/x86/cpu.c
index 84782d045..081c96dfa 100644
--- a/hypervisor/arch/x86/cpu.c
+++ b/hypervisor/arch/x86/cpu.c
@@ -248,13 +248,11 @@ void init_pcpu_post(uint16_t pcpu_id)
/* Calibrate TSC Frequency */
calibrate_tsc();

- pr_acrnlog("HV version %s-%s-%s %s (daily tag:%s) %s@%s
build by %s%s, start
time %luus",
- HV_FULL_VERSION,
- HV_BUILD_TIME, HV_BUILD_VERSION,
HV_BUILD_TYPE,
- HV_DAILY_TAG, HV_BUILD_SCENARIO,
HV_BUILD_BOARD,
- HV_BUILD_USER, HV_CONFIG_TOOL,
ticks_to_us(start_tick));
-
- pr_acrnlog("API version %u.%u",
HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION);
+ pr_acrnlog("HV version %s-%s-%s %s%s%s%s %s@%s build
by %s, start time %luus",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME,
HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "",
HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
HV_BUILD_SCENARIO,
+ HV_BUILD_BOARD, HV_BUILD_USER,
ticks_to_us(start_tick));

pr_acrnlog("Detect processor: %s",
(get_pcpu_info())->model_name);

diff --git a/hypervisor/debug/shell.c b/hypervisor/debug/shell.c
index 4a0451fd5..ac4d52944 100644
--- a/hypervisor/debug/shell.c
+++ b/hypervisor/debug/shell.c
@@ -738,9 +738,11 @@ static int32_t shell_version(__unused int32_t
argc, __unused char
**argv)
{
char temp_str[MAX_STR_SIZE];

- snprintf(temp_str, MAX_STR_SIZE, "HV %s-%s-%s %s (daily
tag: %s) %s@%s build
by %s%s\nAPI %u.%u\r\n",
- HV_FULL_VERSION, HV_BUILD_TIME, HV_BUILD_VERSION,
HV_BUILD_TYPE, HV_DAILY_TAG,
HV_BUILD_SCENARIO,
- HV_BUILD_BOARD, HV_BUILD_USER, HV_CONFIG_TOOL,
HV_API_MAJOR_VERSION,
HV_API_MINOR_VERSION);
+ snprintf(temp_str, MAX_STR_SIZE, "%s-%s-%s %s%s%s%s %s@%s
build by %s %s\r\n",
+ HV_BRANCH_VERSION, HV_COMMIT_TIME,
HV_COMMIT_DIRTY, HV_BUILD_TYPE,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? "(tag: " : "",
HV_COMMIT_TAGS,
+ (sizeof(HV_COMMIT_TAGS) > 1) ? ")" : "",
+ HV_BUILD_SCENARIO, HV_BUILD_BOARD, HV_BUILD_USER,
HV_BUILD_TIME);
shell_puts(temp_str);

return 0;
--
2.25.1