From 28bdca6e315665210fd1363291faa743034639f5 Mon Sep 17 00:00:00 2001 From: zefie Date: Sun, 31 Oct 2021 07:36:44 -0400 Subject: [PATCH] add auto versioning system --- minibae/Makefile | 7 +- minibae/Makefile.clang | 6 +- minibae/Makefile.emcc | 6 +- minibae/Makefile.mingw | 6 +- minibae/Makefile.versioning | 14 ++++ minibae/src/BAE_Source/Common/MiniBAE.c | 88 +++++++++++++++++++++++++ minibae/src/BAE_Source/Common/MiniBAE.h | 5 ++ minibae/src/playbae/playbae.c | 22 ++++--- 8 files changed, 142 insertions(+), 12 deletions(-) create mode 100644 minibae/Makefile.versioning mode change 100755 => 100644 minibae/src/playbae/playbae.c diff --git a/minibae/Makefile b/minibae/Makefile index 553f9404..4f40793b 100644 --- a/minibae/Makefile +++ b/minibae/Makefile @@ -81,7 +81,7 @@ OBJ_BIN := $(addprefix $(OBJ_DIR),$(addsuffix .o,$(basename ${SRC_BIN}))) ARCH := -m32 -static CC := gcc CXX := g++ -LD := gcc +LD := $(CC) AR := ar STRIP := strip @@ -89,9 +89,14 @@ OPTI := -O2 -fPIC CFLAGS := $(ARCH) $(OPTI) -g $(INC_PATH) -D_THREAD_SAFE -Wno-unused-value CFLAGS += -DX_PLATFORM=X_ANSI #CFLAGS += -D_DEBUG=1 + +include Makefile.versioning +CFLAGS += -D_VERSION=\""$(VERSION)"\" + CXXFLAGS := $(CFLAGS) LDFLAGS := $(ARCH) $(OPTI) -s + LIBS = -lpthread all: $(TARGET_LIB).a ${TARGET_LIB}.so $(TARGET_BIN) diff --git a/minibae/Makefile.clang b/minibae/Makefile.clang index 37279334..febc5e33 100644 --- a/minibae/Makefile.clang +++ b/minibae/Makefile.clang @@ -81,7 +81,7 @@ OBJ_BIN := $(addprefix $(OBJ_DIR),$(addsuffix .o,$(basename ${SRC_BIN}))) ARCH := -m32 -static CC := clang CXX := clang++ -LD := clang +LD := $(CC) AR := ar STRIP := strip @@ -90,6 +90,10 @@ CLANG_SANI := -fsanitize=integer CFLAGS := $(ARCH) $(OPTI) -g $(INC_PATH) -D_THREAD_SAFE -Wno-pragma-pack -Wno-unused-value CFLAGS += -DX_PLATFORM=X_ANSI #CFLAGS += -D_DEBUG=1 + +include Makefile.versioning +CFLAGS += -D_VERSION=\""$(VERSION)"\" + CXXFLAGS := $(CFLAGS) LDFLAGS := $(ARCH) $(OPTI) diff --git a/minibae/Makefile.emcc b/minibae/Makefile.emcc index 98e8141e..8a10e9f0 100644 --- a/minibae/Makefile.emcc +++ b/minibae/Makefile.emcc @@ -84,7 +84,7 @@ OBJ_BIN := $(addprefix $(OBJ_DIR),$(addsuffix .o,$(basename ${SRC_BIN})) ARCH := -m32 -static CC := emcc CXX := emcc -LD := emcc +LD := $(CC) AR := emar STRIP := strip @@ -93,6 +93,10 @@ OPTI := -O2 CFLAGS := $(ARCH) $(OPTI) -fPIC -g $(INC_PATH) -D_THREAD_SAFE -Wno-pragma-pack -Wno-unused-value CFLAGS += -DX_PLATFORM=X_ANSI #CFLAGS += -D_DEBUG=1 + +include Makefile.versioning +CFLAGS += -D_VERSION=\""$(VERSION)"\" + CXXFLAGS := $(CFLAGS) LDFLAGS := $(ARCH) $(OPTI) -s 'DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=[$$Browser]' -s EXPORT_ES6=1 -s EXPORTED_RUNTIME_METHODS=[FS] -s SINGLE_FILE=1 diff --git a/minibae/Makefile.mingw b/minibae/Makefile.mingw index 97dfd468..0de64a9e 100644 --- a/minibae/Makefile.mingw +++ b/minibae/Makefile.mingw @@ -83,7 +83,7 @@ OBJ_BIN := $(addprefix $(OBJ_DIR),$(addsuffix .o,$(basename ${SRC_BIN}))) ARCH := -m32 -static CC := i686-w64-mingw32-gcc-win32 CXX := i686-w64-mingw32-g++-win32 -LD := i686-w64-mingw32-g++-win32 +LD := $(CC) AR := i686-w64-mingw32-gcc-ar-win32 STRIP := i686-w64-mingw32-strip @@ -91,6 +91,10 @@ OPTI := -O2 CFLAGS := $(ARCH) $(OPTI) -g $(INC_PATH) -D_THREAD_SAFE -Wno-unused-value CFLAGS += -DX_PLATFORM=X_WIN95 #CFLAGS += -D_DEBUG=1 + +include Makefile.versioning +CFLAGS += -D_VERSION=\""$(VERSION)"\" + CXXFLAGS := $(CFLAGS) LDFLAGS := $(ARCH) $(OPTI) -s diff --git a/minibae/Makefile.versioning b/minibae/Makefile.versioning new file mode 100644 index 00000000..0c8db61e --- /dev/null +++ b/minibae/Makefile.versioning @@ -0,0 +1,14 @@ +TAG_COMMIT := $(shell git rev-list --abbrev-commit --tags --max-count=1) +TAG := $(shell git describe --abbrev=0 --tags ${TAG_COMMIT} 2>/dev/null || true) +COMMIT := $(shell git rev-parse --short HEAD) +DATE := $(shell git log -1 --format=%cd --date=format:"%Y%m%d") +VERSION := $(TAG:v%=%) +ifneq ($(COMMIT), $(TAG_COMMIT)) + VERSION := git-$(COMMIT)-$(DATE) +endif +ifeq ($(VERSION),) + VERSION := git-$(COMMIT)-$(DATE) +endif +ifneq ($(shell git status --porcelain),) + VERSION := $(VERSION)-dirty +endif diff --git a/minibae/src/BAE_Source/Common/MiniBAE.c b/minibae/src/BAE_Source/Common/MiniBAE.c index fdb1d902..0696c6c0 100755 --- a/minibae/src/BAE_Source/Common/MiniBAE.c +++ b/minibae/src/BAE_Source/Common/MiniBAE.c @@ -159,6 +159,94 @@ #define TRACKING 0 + + +const char* BAE_GetVersion() +{ + size_t maxStrSize = 64; + char *versionString = (char *)malloc(sizeof (char) * maxStrSize); + #ifdef _VERSION + snprintf(versionString, maxStrSize, "version %s", _VERSION); + #else + snprintf(versionString, maxStrSize, "unknown version built %s", __DATE__); + #endif + return versionString; +} + +const char* BAE_GetCompileInfo() { + size_t maxStrSize = 128; + char *versionString = (char *)malloc(sizeof (char) * maxStrSize); + #ifdef __clang_major_ + #ifdef __cplusplus + snprintf(versionString, maxStrSize, "clang++ v%d.%d", __clang_major__, __clang_minor__); + #else + snprintf(versionString, maxStrSize, "clang v%d.%d", __clang_major__, __clang_minor__); + #endif + #elif __MINGW32__ + #ifdef __cplusplus + snprintf(versionString, maxStrSize, "mingw32 v%d.%d (g++ v%d.%d)", __MINGW32_MAJOR_VERSION, __MINGW32_MINOR_VERSION, __GNUC__, __GNUC_MINOR__); + #else + snprintf(versionString, maxStrSize, "mingw32 v%d.%d (gcc v%d.%d)", __MINGW32_MAJOR_VERSION, __MINGW32_MINOR_VERSION, __GNUC__, __GNUC_MINOR__); + #endif + #elif __GNUC__ + #ifdef __cplusplus + snprintf(versionString, maxStrSize, "g++ v%d.%d", __GNUC__, __GNUC_MINOR__); + #else + snprintf(versionString, maxStrSize, "gcc v%d.%d", __GNUC__, __GNUC_MINOR__); + #endif + #else + snprintf(versionString, maxStrSize, "UNKNOWN"); + #endif + return versionString; +} + +const char *BAE_GetCurrentCPUArchitecture() { //Get current architecture, detectx nearly every architecture. Coded by Freak + #if defined(__x86_64__) || defined(_M_X64) + return "x86_64"; + #elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86) + return "x86_32"; + #elif defined(__ARM_ARCH_2__) + return "ARM2"; + #elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) + return "ARM3"; + #elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T) + return "ARM4T"; + #elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_) + return "ARM5" + #elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_) + return "ARM6T2"; + #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) + return "ARM6"; + #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return "ARM7"; + #elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return "ARM7A"; + #elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return "ARM7R"; + #elif defined(__ARM_ARCH_7M__) + return "ARM7M"; + #elif defined(__ARM_ARCH_7S__) + return "ARM7S"; + #elif defined(__aarch64__) || defined(_M_ARM64) + return "ARM64"; + #elif defined(mips) || defined(__mips__) || defined(__mips) + return "MIPS"; + #elif defined(__sh__) + return "SUPERH"; + #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC) + return "POWERPC"; + #elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64) + return "POWERPC64"; + #elif defined(__sparc__) || defined(__sparc) + return "SPARC"; + #elif defined(__m68k__) + return "M68K"; + #else + return "UNKNOWN"; + #endif +} + + // Private types/structs // ---------------------------------------------------------------------------- diff --git a/minibae/src/BAE_Source/Common/MiniBAE.h b/minibae/src/BAE_Source/Common/MiniBAE.h index f1d1af31..d257c02c 100755 --- a/minibae/src/BAE_Source/Common/MiniBAE.h +++ b/minibae/src/BAE_Source/Common/MiniBAE.h @@ -96,6 +96,11 @@ extern "C" { #endif + +const char * BAE_GetCurrentCPUArchitecture(); +const char * BAE_GetVersion(); +const char * BAE_GetCompileInfo(); + // types typedef enum { diff --git a/minibae/src/playbae/playbae.c b/minibae/src/playbae/playbae.c old mode 100755 new mode 100644 index 2ba4fd56..564104cb --- a/minibae/src/playbae/playbae.c +++ b/minibae/src/playbae/playbae.c @@ -208,7 +208,7 @@ BAE_UNSIGNED_FIXED calculateVolume(BAE_UNSIGNED_FIXED volume, BAE_BOOL multiply) static BAEResult MuteCommaSeperatedChannels(BAESong theSong, char* channelsToMute) { - BAEResult err = 0; + BAEResult err = BAE_NO_ERROR; char *token = strtok(channelsToMute, ","); int tokenInt = 0; while (token != NULL && err == 0) @@ -227,7 +227,7 @@ static BAEResult MuteCommaSeperatedChannels(BAESong theSong, char* channelsToMut } -static void * displayCurrentPosition(unsigned long currentPosition) { +static void displayCurrentPosition(unsigned long currentPosition) { int m, s, ms = 0; positionDisplayMultiplierCounter = positionDisplayMultiplierCounter + 1; if (positionDisplayMultiplierCounter == positionDisplayMultiplier) { @@ -555,8 +555,8 @@ static BAEResult PlayRMF(BAEMixer theMixer, char *fileName, BAE_UNSIGNED_FIXED v return(err); } -int playFile(BAEMixer theMixer, char *parmFile, BAE_UNSIGNED_FIXED volume, unsigned int timeLimit, unsigned int loopCount, BAEReverbType reverbType, char *midiMuteChannels) { - int err = 0; +BAEResult playFile(BAEMixer theMixer, char *parmFile, BAE_UNSIGNED_FIXED volume, unsigned int timeLimit, unsigned int loopCount, BAEReverbType reverbType, char *midiMuteChannels) { + BAEResult err = BAE_NO_ERROR; char fileHeader[5]; // 4 char + 1 null byte long filePtr; filePtr = BAE_FileOpenForRead(parmFile); @@ -576,10 +576,10 @@ int playFile(BAEMixer theMixer, char *parmFile, BAE_UNSIGNED_FIXED volume, unsig playbae_printf("Playing WAVE %s\n", parmFile); err = PlayPCM(theMixer, parmFile, BAE_AIFF_TYPE, volume, timeLimit); } else { - err = 10069; + err = (BAEResult)10069; } } else { - err = filePtr; + err = (BAEResult)filePtr; } return err; } @@ -599,11 +599,13 @@ int main(int argc, char *argv[]) int maxVoices = BAE_MAX_VOICES; BAEBankToken bank; int doneCommand = 0; - short reverbType = 8; // early reflections + BAEReverbType reverbType = BAE_REVERB_TYPE_8; // early reflections char parmFile[1024]; char midiMuteChannels[512]; + const char *libMiniBAECPUArch; + const char *libMiniBAEVersion; + const char *libMiniBAECompInfo; BAERate rate = BAE_RATE_44K; - memset(parmFile, '\0', 1024); memset(midiMuteChannels, '\0', 512); @@ -621,6 +623,10 @@ int main(int argc, char *argv[]) } if (!silentMode) { + libMiniBAEVersion = BAE_GetVersion(); + libMiniBAECompInfo = BAE_GetCompileInfo(); + libMiniBAECPUArch = BAE_GetCurrentCPUArchitecture(); + playbae_printf("playbae %s built with %s, libminiBAE %s\n", libMiniBAECPUArch, libMiniBAECompInfo, libMiniBAEVersion); playbae_printf(copyrightInfo); }