Message ID | 20211020094406.1393760-1-anup.patel@wdc.com |
---|---|
State | Accepted |
Headers | show |
Series | [v6] Makefile: Add build time and compiler info string | expand |
>>>>> "Anup" == Anup Patel <anup.patel@wdc.com> writes: > From: Wei Fu <wefu@redhat.com> > When we are doing opensbi development, we want to know the build time > and compiler info for debug purpose. > To enable this message, please add "BUILD_INFO=y", like: > ``` > make BUILD_INFO=y > ``` > NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will > violate "reproducible builds". So it's ONLY for development and debug > purpose, and should NOT be used in a product which follows "reproducible > builds". > Signed-off-by: Wei Fu <wefu@redhat.com> > Reviewed-by: Anup Patel <anup.patel@wdc.com> > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > --- > Changes since v5: > - BUILD_DATE_EPOCH is non-standard name so rename it back to > SOURCE_DATE_EPOCH > - Updated README.md and commit description to clearly state when > BUILD_INFO=y violates reprodcible builds .. > +# Build Info: > +# OPENSBI_BUILD_TIME_STAMP -- the compilation time stamp > +# OPENSBI_BUILD_COMPILER_VERSION -- the compiler version info > +BUILD_INFO ?= n > +ifeq ($(BUILD_INFO),y) > +OPENSBI_BUILD_DATE_FMT = +%Y-%m-%d %H:%M:%S %z > +ifdef SOURCE_DATE_EPOCH > + OPENSBI_BUILD_TIME_STAMP ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" \ > + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ > + date -u -r "$(SOURCE_DATE_EPOCH)" \ > + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ > + date -u "$(OPENSBI_BUILD_DATE_FMT)") What is this date -r fallback about? According to the spec, SOURCE_DATE_EPOCH is always a unix timestamp, never a filename: https://reproducible-builds.org/specs/source-date-epoch/ With that dropped we could get rid of some of the repeated code, E.G.: OPENSBI_BUILD_TIME_STAMP ?= \ $(shell date $(if $(SOURCE_DATE_EPOCH),-u -d "@$(SOURCE_DATE_EPOCH)") "$(OPENSBI_BUILD_DATE_FMT)")
On 20 Oct 2021, at 12:13, Peter Korsgaard <peter@korsgaard.com> wrote: > >>>>>> "Anup" == Anup Patel <anup.patel@wdc.com> writes: > >> From: Wei Fu <wefu@redhat.com> >> When we are doing opensbi development, we want to know the build time >> and compiler info for debug purpose. > >> To enable this message, please add "BUILD_INFO=y", like: > >> ``` >> make BUILD_INFO=y >> ``` > >> NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will >> violate "reproducible builds". So it's ONLY for development and debug >> purpose, and should NOT be used in a product which follows "reproducible >> builds". > >> Signed-off-by: Wei Fu <wefu@redhat.com> >> Reviewed-by: Anup Patel <anup.patel@wdc.com> >> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> >> --- >> Changes since v5: >> - BUILD_DATE_EPOCH is non-standard name so rename it back to >> SOURCE_DATE_EPOCH >> - Updated README.md and commit description to clearly state when >> BUILD_INFO=y violates reprodcible builds > > .. > >> +# Build Info: >> +# OPENSBI_BUILD_TIME_STAMP -- the compilation time stamp >> +# OPENSBI_BUILD_COMPILER_VERSION -- the compiler version info >> +BUILD_INFO ?= n >> +ifeq ($(BUILD_INFO),y) >> +OPENSBI_BUILD_DATE_FMT = +%Y-%m-%d %H:%M:%S %z >> +ifdef SOURCE_DATE_EPOCH >> + OPENSBI_BUILD_TIME_STAMP ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" \ >> + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ >> + date -u -r "$(SOURCE_DATE_EPOCH)" \ >> + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ >> + date -u "$(OPENSBI_BUILD_DATE_FMT)") > > What is this date -r fallback about? According to the spec, > SOURCE_DATE_EPOCH is always a unix timestamp, never a filename: GNU date and BSD date have a different but similar interface. This is the sequence recommended by the Reproducible Builds project[1]. Jess [1] https://reproducible-builds.org/docs/source-date-epoch/#makefile
>>>>> "Jessica" == Jessica Clarke <jrtc27@jrtc27.com> writes: Hi, >> What is this date -r fallback about? According to the spec, >> SOURCE_DATE_EPOCH is always a unix timestamp, never a filename: > GNU date and BSD date have a different but similar interface. > This is the sequence recommended by the Reproducible Builds project[1]. > Jess > [1] https://reproducible-builds.org/docs/source-date-epoch/#makefile Ahh, good to know - Thanks.
On Wed, Oct 20, 2021 at 3:14 PM Anup Patel <anup.patel@wdc.com> wrote: > > From: Wei Fu <wefu@redhat.com> > > When we are doing opensbi development, we want to know the build time > and compiler info for debug purpose. > > To enable this message, please add "BUILD_INFO=y", like: > > ``` > make BUILD_INFO=y > ``` > > NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will > violate "reproducible builds". So it's ONLY for development and debug > purpose, and should NOT be used in a product which follows "reproducible > builds". > > Signed-off-by: Wei Fu <wefu@redhat.com> > Reviewed-by: Anup Patel <anup.patel@wdc.com> > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Applied this patch to the riscv/opensbi repo Regards, Anup > --- > Changes since v5: > - BUILD_DATE_EPOCH is non-standard name so rename it back to > SOURCE_DATE_EPOCH > - Updated README.md and commit description to clearly state when > BUILD_INFO=y violates reprodcible builds > Changes since v4: > - Updated build date format to +%Y-%m-%d %H:%M:%S %z > - Rename SOURCE_DATE_EPOCH to BUILD_DATE_EPOCH > --- > Makefile | 31 +++++++++++++++++++++++++++++++ > README.md | 24 ++++++++++++++++++++++++ > lib/sbi/sbi_init.c | 8 ++++++++ > 3 files changed, 63 insertions(+) > > diff --git a/Makefile b/Makefile > index 16d9dca..8623c1c 100644 > --- a/Makefile > +++ b/Makefile > @@ -150,6 +150,25 @@ endif > # Check whether the linker supports creating PIEs > OPENSBI_LD_PIE := $(shell $(CC) $(CLANG_TARGET) $(RELAX_FLAG) $(USE_LD_FLAG) -fPIE -nostdlib -Wl,-pie -x c /dev/null -o /dev/null >/dev/null 2>&1 && echo y || echo n) > > +# Build Info: > +# OPENSBI_BUILD_TIME_STAMP -- the compilation time stamp > +# OPENSBI_BUILD_COMPILER_VERSION -- the compiler version info > +BUILD_INFO ?= n > +ifeq ($(BUILD_INFO),y) > +OPENSBI_BUILD_DATE_FMT = +%Y-%m-%d %H:%M:%S %z > +ifdef SOURCE_DATE_EPOCH > + OPENSBI_BUILD_TIME_STAMP ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" \ > + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ > + date -u -r "$(SOURCE_DATE_EPOCH)" \ > + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ > + date -u "$(OPENSBI_BUILD_DATE_FMT)") > +else > + OPENSBI_BUILD_TIME_STAMP ?= $(shell date "$(OPENSBI_BUILD_DATE_FMT)") > +endif > +OPENSBI_BUILD_COMPILER_VERSION=$(shell $(CC) -v 2>&1 | grep ' version ' | \ > + sed 's/[[:space:]]*$$//') > +endif > + > # Setup list of objects.mk files > ifdef PLATFORM > platform-object-mks=$(shell if [ -d $(platform_src_dir)/ ]; then find $(platform_src_dir) -iname "objects.mk" | sort -r; fi) > @@ -247,6 +266,10 @@ GENFLAGS += -I$(include_dir) > ifneq ($(OPENSBI_VERSION_GIT),) > GENFLAGS += -DOPENSBI_VERSION_GIT="\"$(OPENSBI_VERSION_GIT)\"" > endif > +ifeq ($(BUILD_INFO),y) > +GENFLAGS += -DOPENSBI_BUILD_TIME_STAMP="\"$(OPENSBI_BUILD_TIME_STAMP)\"" > +GENFLAGS += -DOPENSBI_BUILD_COMPILER_VERSION="\"$(OPENSBI_BUILD_COMPILER_VERSION)\"" > +endif > GENFLAGS += $(libsbiutils-genflags-y) > GENFLAGS += $(platform-genflags-y) > GENFLAGS += $(firmware-genflags-y) > @@ -398,6 +421,11 @@ $(build_dir)/%.dep: $(src_dir)/%.c > $(build_dir)/%.o: $(src_dir)/%.c > $(call compile_cc,$@,$<) > > +ifeq ($(BUILD_INFO),y) > +$(build_dir)/lib/sbi/sbi_init.o: $(libsbi_dir)/sbi_init.c FORCE > + $(call compile_cc,$@,$<) > +endif > + > $(build_dir)/%.dep: $(src_dir)/%.S > $(call compile_as_dep,$@,$<) > > @@ -551,3 +579,6 @@ ifeq ($(install_root_dir),$(install_root_dir_default)/usr) > $(if $(V), @echo " RM $(install_root_dir_default)") > $(CMD_PREFIX)rm -rf $(install_root_dir_default) > endif > + > +.PHONY: FORCE > +FORCE: > diff --git a/README.md b/README.md > index 9fdf097..54fabe4 100644 > --- a/README.md > +++ b/README.md > @@ -254,6 +254,29 @@ to produce broken binaries with missing relocations; it is therefore currently > recommended that this combination be avoided or *FW_PIC=n* be used to disable > building OpenSBI as a position-independent binary. > > +Building with timestamp and compiler info > +----------------------------------------- > + > +When doing development, we may want to know the build time and compiler info > +for debug purpose. OpenSBI can also be built with timestamp and compiler info. > +To build with those info and print it out at boot time, we can just simply add > +`BUILD_INFO=y`, like: > +``` > +make BUILD_INFO=y > +``` > + > +But if you have used `BUILD_INFO=y`, and want to switch back to `BUILD_INFO=n`, > +you must do > +``` > +make clean > +``` > +before the next build. > + > +NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will violate > +[reproducible builds]. This definition is ONLY for development and debug > +purpose, and should NOT be used in a product which follows "reproducible > +builds". > + > Contributing to OpenSBI > ----------------------- > > @@ -336,3 +359,4 @@ make I=<install_directory> install_docs > [Doxygen manual]: http://www.doxygen.nl/manual/index.html > [Kendryte standalone SDK]: https://github.com/kendryte/kendryte-standalone-sdk > [third party notices]: ThirdPartyNotices.md > +[reproducible builds]: https://reproducible-builds.org > diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c > index 843659e..b1c7cf0 100644 > --- a/lib/sbi/sbi_init.c > +++ b/lib/sbi/sbi_init.c > @@ -48,6 +48,14 @@ static void sbi_boot_print_banner(struct sbi_scratch *scratch) > OPENSBI_VERSION_MINOR); > #endif > > +#ifdef OPENSBI_BUILD_TIME_STAMP > + sbi_printf("Build time: %s\n", OPENSBI_BUILD_TIME_STAMP); > +#endif > + > +#ifdef OPENSBI_BUILD_COMPILER_VERSION > + sbi_printf("Build compiler: %s\n", OPENSBI_BUILD_COMPILER_VERSION); > +#endif > + > sbi_printf(BANNER); > } > > -- > 2.25.1 >
Hi Anup, Great thanks for all your help! I was busy on some RISCV koji project, and was distracted for some days. I do apologize. Great thanks for all your great efforts to post two more version for it ! Great thanks ! :-) Anup Patel <anup@brainfault.org> 于2021年10月21日周四 下午12:07写道: > > On Wed, Oct 20, 2021 at 3:14 PM Anup Patel <anup.patel@wdc.com> wrote: > > > > From: Wei Fu <wefu@redhat.com> > > > > When we are doing opensbi development, we want to know the build time > > and compiler info for debug purpose. > > > > To enable this message, please add "BUILD_INFO=y", like: > > > > ``` > > make BUILD_INFO=y > > ``` > > > > NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will > > violate "reproducible builds". So it's ONLY for development and debug > > purpose, and should NOT be used in a product which follows "reproducible > > builds". > > > > Signed-off-by: Wei Fu <wefu@redhat.com> > > Reviewed-by: Anup Patel <anup.patel@wdc.com> > > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > > Applied this patch to the riscv/opensbi repo > > Regards, > Anup > > > --- > > Changes since v5: > > - BUILD_DATE_EPOCH is non-standard name so rename it back to > > SOURCE_DATE_EPOCH > > - Updated README.md and commit description to clearly state when > > BUILD_INFO=y violates reprodcible builds > > Changes since v4: > > - Updated build date format to +%Y-%m-%d %H:%M:%S %z > > - Rename SOURCE_DATE_EPOCH to BUILD_DATE_EPOCH > > --- > > Makefile | 31 +++++++++++++++++++++++++++++++ > > README.md | 24 ++++++++++++++++++++++++ > > lib/sbi/sbi_init.c | 8 ++++++++ > > 3 files changed, 63 insertions(+) > > > > diff --git a/Makefile b/Makefile > > index 16d9dca..8623c1c 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -150,6 +150,25 @@ endif > > # Check whether the linker supports creating PIEs > > OPENSBI_LD_PIE := $(shell $(CC) $(CLANG_TARGET) $(RELAX_FLAG) $(USE_LD_FLAG) -fPIE -nostdlib -Wl,-pie -x c /dev/null -o /dev/null >/dev/null 2>&1 && echo y || echo n) > > > > +# Build Info: > > +# OPENSBI_BUILD_TIME_STAMP -- the compilation time stamp > > +# OPENSBI_BUILD_COMPILER_VERSION -- the compiler version info > > +BUILD_INFO ?= n > > +ifeq ($(BUILD_INFO),y) > > +OPENSBI_BUILD_DATE_FMT = +%Y-%m-%d %H:%M:%S %z > > +ifdef SOURCE_DATE_EPOCH > > + OPENSBI_BUILD_TIME_STAMP ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" \ > > + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ > > + date -u -r "$(SOURCE_DATE_EPOCH)" \ > > + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ > > + date -u "$(OPENSBI_BUILD_DATE_FMT)") > > +else > > + OPENSBI_BUILD_TIME_STAMP ?= $(shell date "$(OPENSBI_BUILD_DATE_FMT)") > > +endif > > +OPENSBI_BUILD_COMPILER_VERSION=$(shell $(CC) -v 2>&1 | grep ' version ' | \ > > + sed 's/[[:space:]]*$$//') > > +endif > > + > > # Setup list of objects.mk files > > ifdef PLATFORM > > platform-object-mks=$(shell if [ -d $(platform_src_dir)/ ]; then find $(platform_src_dir) -iname "objects.mk" | sort -r; fi) > > @@ -247,6 +266,10 @@ GENFLAGS += -I$(include_dir) > > ifneq ($(OPENSBI_VERSION_GIT),) > > GENFLAGS += -DOPENSBI_VERSION_GIT="\"$(OPENSBI_VERSION_GIT)\"" > > endif > > +ifeq ($(BUILD_INFO),y) > > +GENFLAGS += -DOPENSBI_BUILD_TIME_STAMP="\"$(OPENSBI_BUILD_TIME_STAMP)\"" > > +GENFLAGS += -DOPENSBI_BUILD_COMPILER_VERSION="\"$(OPENSBI_BUILD_COMPILER_VERSION)\"" > > +endif > > GENFLAGS += $(libsbiutils-genflags-y) > > GENFLAGS += $(platform-genflags-y) > > GENFLAGS += $(firmware-genflags-y) > > @@ -398,6 +421,11 @@ $(build_dir)/%.dep: $(src_dir)/%.c > > $(build_dir)/%.o: $(src_dir)/%.c > > $(call compile_cc,$@,$<) > > > > +ifeq ($(BUILD_INFO),y) > > +$(build_dir)/lib/sbi/sbi_init.o: $(libsbi_dir)/sbi_init.c FORCE > > + $(call compile_cc,$@,$<) > > +endif > > + > > $(build_dir)/%.dep: $(src_dir)/%.S > > $(call compile_as_dep,$@,$<) > > > > @@ -551,3 +579,6 @@ ifeq ($(install_root_dir),$(install_root_dir_default)/usr) > > $(if $(V), @echo " RM $(install_root_dir_default)") > > $(CMD_PREFIX)rm -rf $(install_root_dir_default) > > endif > > + > > +.PHONY: FORCE > > +FORCE: > > diff --git a/README.md b/README.md > > index 9fdf097..54fabe4 100644 > > --- a/README.md > > +++ b/README.md > > @@ -254,6 +254,29 @@ to produce broken binaries with missing relocations; it is therefore currently > > recommended that this combination be avoided or *FW_PIC=n* be used to disable > > building OpenSBI as a position-independent binary. > > > > +Building with timestamp and compiler info > > +----------------------------------------- > > + > > +When doing development, we may want to know the build time and compiler info > > +for debug purpose. OpenSBI can also be built with timestamp and compiler info. > > +To build with those info and print it out at boot time, we can just simply add > > +`BUILD_INFO=y`, like: > > +``` > > +make BUILD_INFO=y > > +``` > > + > > +But if you have used `BUILD_INFO=y`, and want to switch back to `BUILD_INFO=n`, > > +you must do > > +``` > > +make clean > > +``` > > +before the next build. > > + > > +NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will violate > > +[reproducible builds]. This definition is ONLY for development and debug > > +purpose, and should NOT be used in a product which follows "reproducible > > +builds". > > + > > Contributing to OpenSBI > > ----------------------- > > > > @@ -336,3 +359,4 @@ make I=<install_directory> install_docs > > [Doxygen manual]: http://www.doxygen.nl/manual/index.html > > [Kendryte standalone SDK]: https://github.com/kendryte/kendryte-standalone-sdk > > [third party notices]: ThirdPartyNotices.md > > +[reproducible builds]: https://reproducible-builds.org > > diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c > > index 843659e..b1c7cf0 100644 > > --- a/lib/sbi/sbi_init.c > > +++ b/lib/sbi/sbi_init.c > > @@ -48,6 +48,14 @@ static void sbi_boot_print_banner(struct sbi_scratch *scratch) > > OPENSBI_VERSION_MINOR); > > #endif > > > > +#ifdef OPENSBI_BUILD_TIME_STAMP > > + sbi_printf("Build time: %s\n", OPENSBI_BUILD_TIME_STAMP); > > +#endif > > + > > +#ifdef OPENSBI_BUILD_COMPILER_VERSION > > + sbi_printf("Build compiler: %s\n", OPENSBI_BUILD_COMPILER_VERSION); > > +#endif > > + > > sbi_printf(BANNER); > > } > > > > -- > > 2.25.1 > > > > -- > opensbi mailing list > opensbi@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/opensbi
On Thu, Oct 21, 2021 at 1:10 PM Fu Wei <tekkamanninja@gmail.com> wrote: > > Hi Anup, > > Great thanks for all your help! > > I was busy on some RISCV koji project, and was distracted for some > days. I do apologize. > > Great thanks for all your great efforts to post two more version for it ! > > Great thanks ! :-) No need to thank. This was a useful change so I had to take it. Regards, Anup > > Anup Patel <anup@brainfault.org> 于2021年10月21日周四 下午12:07写道: > > > > On Wed, Oct 20, 2021 at 3:14 PM Anup Patel <anup.patel@wdc.com> wrote: > > > > > > From: Wei Fu <wefu@redhat.com> > > > > > > When we are doing opensbi development, we want to know the build time > > > and compiler info for debug purpose. > > > > > > To enable this message, please add "BUILD_INFO=y", like: > > > > > > ``` > > > make BUILD_INFO=y > > > ``` > > > > > > NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will > > > violate "reproducible builds". So it's ONLY for development and debug > > > purpose, and should NOT be used in a product which follows "reproducible > > > builds". > > > > > > Signed-off-by: Wei Fu <wefu@redhat.com> > > > Reviewed-by: Anup Patel <anup.patel@wdc.com> > > > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > > > > Applied this patch to the riscv/opensbi repo > > > > Regards, > > Anup > > > > > --- > > > Changes since v5: > > > - BUILD_DATE_EPOCH is non-standard name so rename it back to > > > SOURCE_DATE_EPOCH > > > - Updated README.md and commit description to clearly state when > > > BUILD_INFO=y violates reprodcible builds > > > Changes since v4: > > > - Updated build date format to +%Y-%m-%d %H:%M:%S %z > > > - Rename SOURCE_DATE_EPOCH to BUILD_DATE_EPOCH > > > --- > > > Makefile | 31 +++++++++++++++++++++++++++++++ > > > README.md | 24 ++++++++++++++++++++++++ > > > lib/sbi/sbi_init.c | 8 ++++++++ > > > 3 files changed, 63 insertions(+) > > > > > > diff --git a/Makefile b/Makefile > > > index 16d9dca..8623c1c 100644 > > > --- a/Makefile > > > +++ b/Makefile > > > @@ -150,6 +150,25 @@ endif > > > # Check whether the linker supports creating PIEs > > > OPENSBI_LD_PIE := $(shell $(CC) $(CLANG_TARGET) $(RELAX_FLAG) $(USE_LD_FLAG) -fPIE -nostdlib -Wl,-pie -x c /dev/null -o /dev/null >/dev/null 2>&1 && echo y || echo n) > > > > > > +# Build Info: > > > +# OPENSBI_BUILD_TIME_STAMP -- the compilation time stamp > > > +# OPENSBI_BUILD_COMPILER_VERSION -- the compiler version info > > > +BUILD_INFO ?= n > > > +ifeq ($(BUILD_INFO),y) > > > +OPENSBI_BUILD_DATE_FMT = +%Y-%m-%d %H:%M:%S %z > > > +ifdef SOURCE_DATE_EPOCH > > > + OPENSBI_BUILD_TIME_STAMP ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" \ > > > + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ > > > + date -u -r "$(SOURCE_DATE_EPOCH)" \ > > > + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ > > > + date -u "$(OPENSBI_BUILD_DATE_FMT)") > > > +else > > > + OPENSBI_BUILD_TIME_STAMP ?= $(shell date "$(OPENSBI_BUILD_DATE_FMT)") > > > +endif > > > +OPENSBI_BUILD_COMPILER_VERSION=$(shell $(CC) -v 2>&1 | grep ' version ' | \ > > > + sed 's/[[:space:]]*$$//') > > > +endif > > > + > > > # Setup list of objects.mk files > > > ifdef PLATFORM > > > platform-object-mks=$(shell if [ -d $(platform_src_dir)/ ]; then find $(platform_src_dir) -iname "objects.mk" | sort -r; fi) > > > @@ -247,6 +266,10 @@ GENFLAGS += -I$(include_dir) > > > ifneq ($(OPENSBI_VERSION_GIT),) > > > GENFLAGS += -DOPENSBI_VERSION_GIT="\"$(OPENSBI_VERSION_GIT)\"" > > > endif > > > +ifeq ($(BUILD_INFO),y) > > > +GENFLAGS += -DOPENSBI_BUILD_TIME_STAMP="\"$(OPENSBI_BUILD_TIME_STAMP)\"" > > > +GENFLAGS += -DOPENSBI_BUILD_COMPILER_VERSION="\"$(OPENSBI_BUILD_COMPILER_VERSION)\"" > > > +endif > > > GENFLAGS += $(libsbiutils-genflags-y) > > > GENFLAGS += $(platform-genflags-y) > > > GENFLAGS += $(firmware-genflags-y) > > > @@ -398,6 +421,11 @@ $(build_dir)/%.dep: $(src_dir)/%.c > > > $(build_dir)/%.o: $(src_dir)/%.c > > > $(call compile_cc,$@,$<) > > > > > > +ifeq ($(BUILD_INFO),y) > > > +$(build_dir)/lib/sbi/sbi_init.o: $(libsbi_dir)/sbi_init.c FORCE > > > + $(call compile_cc,$@,$<) > > > +endif > > > + > > > $(build_dir)/%.dep: $(src_dir)/%.S > > > $(call compile_as_dep,$@,$<) > > > > > > @@ -551,3 +579,6 @@ ifeq ($(install_root_dir),$(install_root_dir_default)/usr) > > > $(if $(V), @echo " RM $(install_root_dir_default)") > > > $(CMD_PREFIX)rm -rf $(install_root_dir_default) > > > endif > > > + > > > +.PHONY: FORCE > > > +FORCE: > > > diff --git a/README.md b/README.md > > > index 9fdf097..54fabe4 100644 > > > --- a/README.md > > > +++ b/README.md > > > @@ -254,6 +254,29 @@ to produce broken binaries with missing relocations; it is therefore currently > > > recommended that this combination be avoided or *FW_PIC=n* be used to disable > > > building OpenSBI as a position-independent binary. > > > > > > +Building with timestamp and compiler info > > > +----------------------------------------- > > > + > > > +When doing development, we may want to know the build time and compiler info > > > +for debug purpose. OpenSBI can also be built with timestamp and compiler info. > > > +To build with those info and print it out at boot time, we can just simply add > > > +`BUILD_INFO=y`, like: > > > +``` > > > +make BUILD_INFO=y > > > +``` > > > + > > > +But if you have used `BUILD_INFO=y`, and want to switch back to `BUILD_INFO=n`, > > > +you must do > > > +``` > > > +make clean > > > +``` > > > +before the next build. > > > + > > > +NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will violate > > > +[reproducible builds]. This definition is ONLY for development and debug > > > +purpose, and should NOT be used in a product which follows "reproducible > > > +builds". > > > + > > > Contributing to OpenSBI > > > ----------------------- > > > > > > @@ -336,3 +359,4 @@ make I=<install_directory> install_docs > > > [Doxygen manual]: http://www.doxygen.nl/manual/index.html > > > [Kendryte standalone SDK]: https://github.com/kendryte/kendryte-standalone-sdk > > > [third party notices]: ThirdPartyNotices.md > > > +[reproducible builds]: https://reproducible-builds.org > > > diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c > > > index 843659e..b1c7cf0 100644 > > > --- a/lib/sbi/sbi_init.c > > > +++ b/lib/sbi/sbi_init.c > > > @@ -48,6 +48,14 @@ static void sbi_boot_print_banner(struct sbi_scratch *scratch) > > > OPENSBI_VERSION_MINOR); > > > #endif > > > > > > +#ifdef OPENSBI_BUILD_TIME_STAMP > > > + sbi_printf("Build time: %s\n", OPENSBI_BUILD_TIME_STAMP); > > > +#endif > > > + > > > +#ifdef OPENSBI_BUILD_COMPILER_VERSION > > > + sbi_printf("Build compiler: %s\n", OPENSBI_BUILD_COMPILER_VERSION); > > > +#endif > > > + > > > sbi_printf(BANNER); > > > } > > > > > > -- > > > 2.25.1 > > > > > > > -- > > opensbi mailing list > > opensbi@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/opensbi
On Thu, Oct 21, 2021 at 12:07 PM Anup Patel <anup@brainfault.org> wrote: > > On Wed, Oct 20, 2021 at 3:14 PM Anup Patel <anup.patel@wdc.com> wrote: > > > > From: Wei Fu <wefu@redhat.com> > > > > When we are doing opensbi development, we want to know the build time > > and compiler info for debug purpose. > > > > To enable this message, please add "BUILD_INFO=y", like: > > > > ``` > > make BUILD_INFO=y > > ``` > > > > NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will > > violate "reproducible builds". So it's ONLY for development and debug > > purpose, and should NOT be used in a product which follows "reproducible > > builds". > > > > Signed-off-by: Wei Fu <wefu@redhat.com> > > Reviewed-by: Anup Patel <anup.patel@wdc.com> > > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > > Applied this patch to the riscv/opensbi repo > Please cc people who gave comments to previous versions, and wait for a day or two before the applying. Regards, Bin
diff --git a/Makefile b/Makefile index 16d9dca..8623c1c 100644 --- a/Makefile +++ b/Makefile @@ -150,6 +150,25 @@ endif # Check whether the linker supports creating PIEs OPENSBI_LD_PIE := $(shell $(CC) $(CLANG_TARGET) $(RELAX_FLAG) $(USE_LD_FLAG) -fPIE -nostdlib -Wl,-pie -x c /dev/null -o /dev/null >/dev/null 2>&1 && echo y || echo n) +# Build Info: +# OPENSBI_BUILD_TIME_STAMP -- the compilation time stamp +# OPENSBI_BUILD_COMPILER_VERSION -- the compiler version info +BUILD_INFO ?= n +ifeq ($(BUILD_INFO),y) +OPENSBI_BUILD_DATE_FMT = +%Y-%m-%d %H:%M:%S %z +ifdef SOURCE_DATE_EPOCH + OPENSBI_BUILD_TIME_STAMP ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" \ + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ + date -u -r "$(SOURCE_DATE_EPOCH)" \ + "$(OPENSBI_BUILD_DATE_FMT)" 2>/dev/null || \ + date -u "$(OPENSBI_BUILD_DATE_FMT)") +else + OPENSBI_BUILD_TIME_STAMP ?= $(shell date "$(OPENSBI_BUILD_DATE_FMT)") +endif +OPENSBI_BUILD_COMPILER_VERSION=$(shell $(CC) -v 2>&1 | grep ' version ' | \ + sed 's/[[:space:]]*$$//') +endif + # Setup list of objects.mk files ifdef PLATFORM platform-object-mks=$(shell if [ -d $(platform_src_dir)/ ]; then find $(platform_src_dir) -iname "objects.mk" | sort -r; fi) @@ -247,6 +266,10 @@ GENFLAGS += -I$(include_dir) ifneq ($(OPENSBI_VERSION_GIT),) GENFLAGS += -DOPENSBI_VERSION_GIT="\"$(OPENSBI_VERSION_GIT)\"" endif +ifeq ($(BUILD_INFO),y) +GENFLAGS += -DOPENSBI_BUILD_TIME_STAMP="\"$(OPENSBI_BUILD_TIME_STAMP)\"" +GENFLAGS += -DOPENSBI_BUILD_COMPILER_VERSION="\"$(OPENSBI_BUILD_COMPILER_VERSION)\"" +endif GENFLAGS += $(libsbiutils-genflags-y) GENFLAGS += $(platform-genflags-y) GENFLAGS += $(firmware-genflags-y) @@ -398,6 +421,11 @@ $(build_dir)/%.dep: $(src_dir)/%.c $(build_dir)/%.o: $(src_dir)/%.c $(call compile_cc,$@,$<) +ifeq ($(BUILD_INFO),y) +$(build_dir)/lib/sbi/sbi_init.o: $(libsbi_dir)/sbi_init.c FORCE + $(call compile_cc,$@,$<) +endif + $(build_dir)/%.dep: $(src_dir)/%.S $(call compile_as_dep,$@,$<) @@ -551,3 +579,6 @@ ifeq ($(install_root_dir),$(install_root_dir_default)/usr) $(if $(V), @echo " RM $(install_root_dir_default)") $(CMD_PREFIX)rm -rf $(install_root_dir_default) endif + +.PHONY: FORCE +FORCE: diff --git a/README.md b/README.md index 9fdf097..54fabe4 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,29 @@ to produce broken binaries with missing relocations; it is therefore currently recommended that this combination be avoided or *FW_PIC=n* be used to disable building OpenSBI as a position-independent binary. +Building with timestamp and compiler info +----------------------------------------- + +When doing development, we may want to know the build time and compiler info +for debug purpose. OpenSBI can also be built with timestamp and compiler info. +To build with those info and print it out at boot time, we can just simply add +`BUILD_INFO=y`, like: +``` +make BUILD_INFO=y +``` + +But if you have used `BUILD_INFO=y`, and want to switch back to `BUILD_INFO=n`, +you must do +``` +make clean +``` +before the next build. + +NOTE: Using `BUILD_INFO=y` without specifying SOURCE_DATE_EPOCH will violate +[reproducible builds]. This definition is ONLY for development and debug +purpose, and should NOT be used in a product which follows "reproducible +builds". + Contributing to OpenSBI ----------------------- @@ -336,3 +359,4 @@ make I=<install_directory> install_docs [Doxygen manual]: http://www.doxygen.nl/manual/index.html [Kendryte standalone SDK]: https://github.com/kendryte/kendryte-standalone-sdk [third party notices]: ThirdPartyNotices.md +[reproducible builds]: https://reproducible-builds.org diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c index 843659e..b1c7cf0 100644 --- a/lib/sbi/sbi_init.c +++ b/lib/sbi/sbi_init.c @@ -48,6 +48,14 @@ static void sbi_boot_print_banner(struct sbi_scratch *scratch) OPENSBI_VERSION_MINOR); #endif +#ifdef OPENSBI_BUILD_TIME_STAMP + sbi_printf("Build time: %s\n", OPENSBI_BUILD_TIME_STAMP); +#endif + +#ifdef OPENSBI_BUILD_COMPILER_VERSION + sbi_printf("Build compiler: %s\n", OPENSBI_BUILD_COMPILER_VERSION); +#endif + sbi_printf(BANNER); }