From 5a4da8bac457f0e70e690a572eba9cf754e69a37 Mon Sep 17 00:00:00 2001
From: Kimplul <kimi.h.kuparinen@gmail.com>
Date: Sun, 23 Jun 2024 23:31:46 +0300
Subject: initial interpeter testing

---
 scripts/gen-deps          | 37 ++++++++++++++++++++++++
 scripts/license           | 16 +++++++++++
 scripts/makefile          | 71 +++++++++++++++++++++++++++++++++++++++++++++++
 scripts/warn-undocumented |  7 +++++
 4 files changed, 131 insertions(+)
 create mode 100755 scripts/gen-deps
 create mode 100755 scripts/license
 create mode 100644 scripts/makefile
 create mode 100755 scripts/warn-undocumented

(limited to 'scripts')

diff --git a/scripts/gen-deps b/scripts/gen-deps
new file mode 100755
index 0000000..f45707c
--- /dev/null
+++ b/scripts/gen-deps
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+PREFIX=
+COMPILE=COMPILE
+LINT=LINT
+BUILD=build/
+
+while getopts "p:c:b:l:" opt; do
+	case "$opt" in
+		p) PREFIX="$OPTARG"_;;
+		c) COMPILE="$OPTARG";;
+		l) LINT="$OPTARG";;
+		b) BUILD=build/"$OPTARG";;
+		*) echo "unrecognised option -$OPTARG" >&2; exit 1;;
+	esac
+done
+
+shift $((OPTIND - 1))
+
+# create all subdirectories
+mkdir -p $(echo "${@}" | tr ' ' '\n' | sed "s|[^/]*$||;s|^|${BUILD}/|" | uniq)
+
+for s in ${@}
+do
+	obj="${BUILD}/${s%.*}.o"
+	lint="${obj}.l"
+	dep="${obj}.d"
+
+	echo "${PREFIX}OBJS += ${obj}"			>> deps.mk
+	echo "${PREFIX}LINTS += ${lint}"		>> deps.mk
+	echo "${dep}:"					>> deps.mk
+	echo "-include ${dep}"				>> deps.mk
+	echo "${obj}: ${s}"				>> deps.mk
+	echo "	\$(${COMPILE}) -c ${s} -o ${obj}"	>> deps.mk
+	echo "${lint}: ${s}"				>> deps.mk
+	echo "	\$(${LINT}) -c ${s} -o /dev/null"	>> deps.mk
+done
diff --git a/scripts/license b/scripts/license
new file mode 100755
index 0000000..53bd5da
--- /dev/null
+++ b/scripts/license
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+SPDX="/* SPDX-License-Identifier: copyleft-next-0.3.1 */"
+
+for f in "$@"
+do
+	if [ "$(head -1 "$f")" != "${SPDX}" ]
+	then
+		sed -i "1i${SPDX}\n" "$f"
+	fi
+
+	if ! grep 'Copyright' "$f" > /dev/null
+	then
+		echo "Missing copyright info in $f"
+	fi
+done
diff --git a/scripts/makefile b/scripts/makefile
new file mode 100644
index 0000000..484d04f
--- /dev/null
+++ b/scripts/makefile
@@ -0,0 +1,71 @@
+# this could be done better
+RELEASE		?= 0
+OPTFLAGS	!= [ "$(RELEASE)" != "0" ] \
+			&& echo "-O2" \
+			|| echo "-O0"
+
+DEBUG		?= 1
+DEBUGFLAGS	!= [ "$(DEBUG)" != "0" ] \
+			&& echo "-DDEBUG=1" \
+			|| echo "-DNDEBUG=1"
+
+ASSERT		?= 1
+ASSERTFLAGS	!= [ "$(ASSERT)" != "0" ] \
+			&& echo "-DASSERT=1" \
+			|| echo
+
+DEPFLAGS	= -MT $@ -MMD -MP -MF $@.d
+LINTFLAGS	:= -fsyntax-only
+PREPROCESS	:= -E
+
+LLVM		?= 0
+BUILD		:= build
+
+all: ejit.o
+
+# default values, overwrite if/when needed
+CROSS_COMPILE	:=
+
+OBJCOPY		!= [ "$(LLVM)" != "0" ] \
+			&& echo llvm-objcopy \
+			|| echo $(CROSS_COMPILE)objcopy
+
+COMPILER	!= [ "$(LLVM)" != "0" ] \
+			&& echo clang --target="$(CROSS_COMPILE)" \
+			|| echo $(CROSS_COMPILE)gcc
+
+
+OBFLAGS		:= -g
+# interpreter is allowed to have uninitialized values
+WARNFLAGS	:= -Wall -Wextra -Wno-maybe-uninitialized
+
+COMPILE_FLAGS	:= $(CFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(OBFLAGS) $(ASSERTFLAGS) \
+		   $(DEBUGFLAGS)
+
+INCLUDE_FLAGS	:= -I include
+
+COMPILE		= $(COMPILER) \
+		  $(COMPILE_FLAGS) $(DEPFLAGS) $(INCLUDE_FLAGS)
+
+LINT		= $(COMPILER) \
+		  $(COMPILE_FLAGS) $(LINTFLAGS) $(INCLUDE_FLAGS)
+
+UBSAN		?= 0
+UBSAN_FLAGS	!= [ "$(UBSAN)" != "0" ] \
+			&& echo -fsanitize=undefined \
+			|| echo
+
+COMPILE_EJIT	= $(COMPILE) $(EJIT_FLAGS)
+
+-include deps.mk
+
+ejit.o: $(EJIT_OBJS)
+	ld -relocatable $(EJIT_OBJS) -o $@
+
+examples: examples/exec
+examples/exec: examples/main.c ejit.o
+	$(COMPILE_EJIT) examples/main.c ejit.o -o $@
+
+# might lint some common things twice
+.PHONY:
+lint: $(TRISCV_LINTS)
diff --git a/scripts/warn-undocumented b/scripts/warn-undocumented
new file mode 100755
index 0000000..db22249
--- /dev/null
+++ b/scripts/warn-undocumented
@@ -0,0 +1,7 @@
+#!/bin/sh
+# look through all files for either @file or \file
+for file in $@
+do
+	grep -c '[@\]file' "$file" |\
+	awk -F':' "\$1 == 0 {print \"Undocumented file: $file\"}"
+done
-- 
cgit v1.2.3