diff --git a/benchmarks/latmus.c b/benchmarks/latmus.c index 402f3a3..58d84f2 100644 --- a/benchmarks/latmus.c +++ b/benchmarks/latmus.c @@ -469,7 +469,7 @@ static void dump_gnuplot(time_t duration) paste_file_in("/proc/version", NULL); paste_file_in("/proc/cmdline", NULL); - fprintf(plot_fp, "# libevl version: %s\n", libevl_version_string); + fprintf(plot_fp, "# libevl version: %s\n", evl_get_version().version_string); fprintf(plot_fp, "# sampling period: %u microseconds\n", period); paste_file_in("/sys/devices/virtual/clock/monotonic/gravity", "clock gravity: "); diff --git a/eshi/Makefile b/eshi/Makefile index 019db3a..d3711c3 100644 --- a/eshi/Makefile +++ b/eshi/Makefile @@ -14,10 +14,11 @@ PIC_OBJFILES = $(SRCFILES:%.c=$(O_DIR)/%-pic.o) OBJFILES = $(SRCFILES:%.c=$(O_DIR)/%.o) DEPFILES = $(SRCFILES:%.c=$(O_DIR)/%.d) -LIB_CPPFLAGS := $(BASE_CPPFLAGS) \ - -I. \ - -I../include/eshi \ - -I../include +LIB_CPPFLAGS := $(BASE_CPPFLAGS) \ + -I. \ + -I../include/eshi \ + -I../include \ + -I$(O_DIR) LIB_CFLAGS := $(LIB_CPPFLAGS) $(BASE_CFLAGS) @@ -34,7 +35,8 @@ install: all $(call inst-cmd,$(ARLIBNAME),$(INSTALL) -D $(O_DIR)/$(ARLIBNAME) $(DESTDIR)/$(libdir)/$(ARLIBNAME)) clean clobber mrproper: output-Makefile - $(Q)$(RM) -f $(PIC_OBJFILES) $(OBJFILES) $(TARGETS) $(O_DIR)/$(DTSONAME) $(DEPFILES) + $(Q)$(RM) -f $(O_DIR)/git-stamp.h $(PIC_OBJFILES) $(OBJFILES) \ + $(TARGETS) $(O_DIR)/$(DTSONAME) $(DEPFILES) $(O_DIR)/$(SOLIBNAME): $(PIC_OBJFILES) $(call ld-cmd,$@,$(CC) -shared -Wl$(comma)-soname$(comma)$(DTSONAME) -o $(@) \ @@ -44,6 +46,9 @@ $(O_DIR)/$(SOLIBNAME): $(PIC_OBJFILES) $(O_DIR)/$(ARLIBNAME): $(OBJFILES) $(call ar-cmd,$@,$(AR) ru $@ $(OBJFILES)) +$(O_DIR)/version-pic.o $(O_DIR)/version.o: override CFLAGS := $(CFLAGS) -DLIBSERIAL=\"$(EVL_SERIAL)\" +version.c: $(O_DIR)/git-stamp.h + $(O_DIR)/%-pic.o: %.c $(call cc-pic-cmd,$@,$(CC) $(CFLAGS) -fPIC -c -o $@ $<) diff --git a/eshi/init.c b/eshi/init.c index ff00e52..87a42e8 100644 --- a/eshi/init.c +++ b/eshi/init.c @@ -43,11 +43,3 @@ bool eshi_is_initialized(void) { return init_status == 0; } - -struct evl_version evl_get_version(void) -{ - return (struct evl_version){ - .api_level = __EVL__, - .abi_level = -1, - }; -} diff --git a/eshi/version.c b/eshi/version.c new file mode 100644 index 0000000..a62c0c8 --- /dev/null +++ b/eshi/version.c @@ -0,0 +1,23 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) 2018 Philippe Gerum + */ + +#include +#include "git-stamp.h" + +#ifndef GIT_STAMP +#define git_hash "" +#else +#define git_hash " -- " GIT_STAMP +#endif + +struct evl_version evl_get_version(void) +{ + return (struct evl_version){ + .api_level = __EVL__, + .abi_level = -1, + .version_string = "eshi." LIBSERIAL git_hash, + }; +} diff --git a/include/eshi/evl/evl.h b/include/eshi/evl/evl.h index 972911b..e11ef05 100644 --- a/include/eshi/evl/evl.h +++ b/include/eshi/evl/evl.h @@ -14,6 +14,7 @@ struct evl_version { int api_level; /* libevl.so: __EVL__ */ int abi_level; /* core: EVL_ABI_LEVEL, -1 for ESHI */ + const char *version_string; }; #ifdef __cplusplus diff --git a/include/evl/evl.h b/include/evl/evl.h index 2d84168..b0ed98c 100644 --- a/include/evl/evl.h +++ b/include/evl/evl.h @@ -25,6 +25,7 @@ struct evl_version { int api_level; /* libevl.so: __EVL__ */ int abi_level; /* core: EVL_ABI_LEVEL, -1 for ESHI */ + const char *version_string; }; #ifdef __cplusplus @@ -39,8 +40,6 @@ void evl_sigdebug_handler(int sig, siginfo_t *si, void *ctxt); unsigned int evl_detect_fpu(void); -extern const char *libevl_version_string; - struct evl_version evl_get_version(void); #ifdef __cplusplus diff --git a/lib/Makefile b/lib/Makefile index a4dffa0..8dbb21a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -52,19 +52,6 @@ $(O_DIR)/syscall-pic.o $(O_DIR)/syscall.o: override CFLAGS := $(CFLAGS) -fomit-f $(O_DIR)/version-pic.o $(O_DIR)/version.o: override CFLAGS := $(CFLAGS) -DLIBSERIAL=\"$(EVL_SERIAL)\" version.c: $(O_DIR)/git-stamp.h -$(O_DIR)/git-stamp.h: git-stamp - @if test -r ../.git; then \ - stamp=`git --git-dir=../.git rev-list --abbrev-commit -1 HEAD`; \ - if test \! -s $@ || grep -wvq $$stamp $@; then \ - date=`git --git-dir=../.git log -1 $$stamp --pretty=format:%ci`; \ - echo "#define GIT_STAMP \"#$$stamp ($$date)\"" > $@; \ - fi; \ - elif test \! -r $@ -o -s $@; then \ - $(RM) -f $@ && touch $@; \ - fi; true - -.PHONY: git-stamp - $(O_DIR)/%-pic.o: %.c $(call cc-pic-cmd,$@,$(CC) $(CFLAGS) -fPIC -c -o $@ $<) diff --git a/lib/init.c b/lib/init.c index fa6944a..041c1e2 100644 --- a/lib/init.c +++ b/lib/init.c @@ -251,11 +251,3 @@ unsigned int evl_detect_fpu(void) return core_info.fpu_features; } - -struct evl_version evl_get_version(void) -{ - return (struct evl_version){ - .api_level = __EVL__, - .abi_level = EVL_ABI_LEVEL, - }; -} diff --git a/lib/version.c b/lib/version.c index bc1657f..c3a5812 100644 --- a/lib/version.c +++ b/lib/version.c @@ -4,6 +4,8 @@ * Copyright (C) 2018 Philippe Gerum */ +#include +#include #include "git-stamp.h" #ifndef GIT_STAMP @@ -12,4 +14,11 @@ #define git_hash " -- " GIT_STAMP #endif -const char *libevl_version_string = "evl." LIBSERIAL git_hash; +struct evl_version evl_get_version(void) +{ + return (struct evl_version){ + .api_level = __EVL__, + .abi_level = EVL_ABI_LEVEL, + .version_string = "evl." LIBSERIAL git_hash, + }; +} diff --git a/libversion.mk b/libversion.mk index 73272b0..3d5c1b7 100644 --- a/libversion.mk +++ b/libversion.mk @@ -2,3 +2,16 @@ EVL_SERIAL := 0 EVL_IVERSION := 0 + +$(O_DIR)/git-stamp.h: git-stamp + @if test -r ../.git; then \ + stamp=`git --git-dir=../.git rev-list --abbrev-commit -1 HEAD`; \ + if test \! -s $@ || grep -wvq $$stamp $@; then \ + date=`git --git-dir=../.git log -1 $$stamp --pretty=format:%ci`; \ + echo "#define GIT_STAMP \"#$$stamp ($$date)\"" > $@; \ + fi; \ + elif test \! -r $@ -o -s $@; then \ + $(RM) -f $@ && touch $@; \ + fi; true + +.PHONY: git-stamp diff --git a/utils/evl.c b/utils/evl.c index d635a78..15f1af9 100644 --- a/utils/evl.c +++ b/utils/evl.c @@ -77,7 +77,8 @@ int main(int argc, char *const argv[]) cmddir = optarg; break; case 'V': - printf("%s [ABI %d]\n", libevl_version_string, + printf("%s [ABI %d]\n", + evl_get_version().version_string, EVL_ABI_LEVEL); exit(0); case '?':