.
authorThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Wed, 22 Oct 2025 13:51:10 +0000 (13:51 +0000)
committerThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Wed, 22 Oct 2025 13:51:10 +0000 (13:51 +0000)
developer/make/environment_RT_1.mk
developer/make/target_kmod.mk
developer/make/target_library_CLI.mk [new file with mode: 0644]
developer/make/target_library_cli.mk [deleted file]
developer/make/temp.sh [new file with mode: 0644]

index af850d4..151eeff 100644 (file)
@@ -1,3 +1,4 @@
+# enviroment_RT_1.mk
 # makefile environment variable defaults.
 # cc is the name of the C compiler, a file called <name>.c is C source code.
 # RT uses header integrated C source files, i.e. the source and the header are the same file
@@ -18,13 +19,13 @@ CFLAGS           += -I $(C_SOURCE_DIR)
 
 KMOD_CCFLAGS    := -I $(KMOD_SOURCE_DIR)
 
-LIBNAME         := $(PROJECT)
-LIBNAME         := $(subst -,_,$(LIBNAME))
+LIBRARY_NAME    := $(PROJECT)
+LIBRARY_NAME    := $(subst -,_,$(LIBRARY_NAME))
 
-LIBDIR          := scratchpad
-LIBFILE         := $(LIBDIR)/lib$(LIBNAME).a
+LIBRARY_DIR     := scratchpad
+LIBRARY_FILE    := $(LIBRARY_DIR)/lib$(LIBRARY_NAME).a
 
-LINKFLAGS       := -L$(LIBDIR) -L/lib64 -L/lib
+LN_FLAGS        := -L$(LIBRARY_DIR) -L/lib64 -L/lib
 
-EXECDIR         := scratchpad
+MACHINE_DIR     := scratchpad
 
index 6fc30e3..7ca2fc8 100644 (file)
@@ -62,9 +62,11 @@ endif
 $(OUTPUT_DIR):
        @mkdir -p "$(OUTPUT_DIR)"
 
+# generate the Kbuild control Makefile
 # generate the Kbuild control Makefile
 $(OUTPUT_DIR)/Makefile: | $(OUTPUT_DIR)
        @{ \
+         printf "ccflags-y += %s\n" "$(KMOD_CCFLAGS)"; \
          printf "obj-m := %s\n" "$(foreach m,$(BASE_LIST),$(m).o)"; \
          for m in $(BASE_LIST); do \
            printf "%s-objs := %s.kmod.o" "$$m" "$$m"; \
diff --git a/developer/make/target_library_CLI.mk b/developer/make/target_library_CLI.mk
new file mode 100644 (file)
index 0000000..0b52842
--- /dev/null
@@ -0,0 +1,109 @@
+# make/target_lib_CLI.mk — build *.lib.c and *.CLI.c
+# written for the Harmony skeleton, always invoked from cwd  $REPO_HOME/<role>
+# files have two suffixes by convention, e.g.: X.lib.c or Y.CLI.c 
+
+.SUFFIXES:
+.EXPORT_ALL_VARIABLES:
+.DELETE_ON_ERROR:
+
+#--------------------------------------------------------------------------------
+# defaults for environment variables
+
+C              ?= gcc
+CFLAGS         ?=
+C_SOURCE_DIR   ?= cc
+LIBRARY_FILE   ?=
+MACHINE_DIR    ?= scratchpad
+LN_FLAGS       ?=
+
+ifeq ($(strip $(C)),)
+  $(error target_lib_CLI.mk: no C compiler specified)
+endif
+
+#--------------------------------------------------------------------------------
+# derived variables
+
+# source discovery (single dir)
+C_SOURCE_LIB  := $(wildcard $(C_SOURCE_DIR)/*.lib.c)
+C_SOURCE_EXEC := $(wildcard $(C_SOURCE_DIR)/*.CLI.c)
+
+# remove suffix to get base name
+C_BASE_LIB  := $(sort $(patsubst %.lib.c,%, $(notdir $(C_SOURCE_LIB))))
+C_BASE_EXEC := $(sort $(patsubst %.CLI.c,%, $(notdir $(C_SOURCE_EXEC))))
+
+# two sets of object files, one for the lib, and one for the CLI programs
+OBJECT_LIB  := $(patsubst %, scratchpad/%.lib.o, $(C_BASE_LIB))
+OBJECT_EXEC := $(patsubst %, scratchpad/%.CLI.o, $(C_BASE_EXEC))
+
+# executables are made from EXEC sources
+EXEC := $(patsubst %, $(MACHINE_DIR)/%, $(C_BASE_EXEC))
+
+#--------------------------------------------------------------------------------
+# pull in dependencies
+
+-include $(OBJECT_LIB:.o=.d) $(OBJECT_EXEC:.o=.d)
+
+
+#--------------------------------------------------------------------------------
+# targets
+
+# when no target is given make uses the first target, this one
+.PHONY: usage
+usage:
+       @echo example usage: make clean
+       @echo example usage: make library
+       @echo example usage: make CLI
+       @echo example usage: make library CLI
+
+.PHONY: version
+version:
+       @echo makefile version 7.1
+       if [ ! -z "$(C)" ]; then $(C) -v; fi
+       /bin/make -v
+
+.PHONY: information
+information:
+       @printf "· → Unicode middle dot — visible: [%b]\n" "·"
+       @echo "C_SOURCE_DIR: " $(C_SOURCE_DIR)
+       @echo "C_SOURCE_LIB: " $(C_SOURCE_LIB)
+       @echo "C_SOURCE_EXEC: " $(C_SOURCE_EXEC)
+       @echo "C_BASE_LIB: " $(C_BASE_LIB)
+       @echo "C_BASE_EXEC: " $(C_BASE_EXEC)
+       @echo "OBJECT_LIB: " $(OBJECT_LIB)
+       @echo "OBJECT_EXEC: " $(OBJECT_EXEC)
+       @echo "EXEC: " $(EXEC)
+
+.PHONY: library
+library: $(LIBRARY_FILE)
+
+$(LIBRARY_FILE): $(OBJECT_LIB)
+       @if [ -s "$@" ] || [ -n "$(OBJECT_LIB)" ]; then \
+               echo "ar rcs $@ $^"; \
+               ar rcs $@ $^; \
+       else \
+               rm -f "$@"; \
+       fi   
+
+#.PHONY: CLI
+#CLI: $(LIBRARY_FILE) $(EXEC)
+
+.PHONY: CLI
+CLI: library $(EXEC)
+
+
+# generally better to use the project local clean scripts, but this will make it so that the make targets can be run again
+
+.PHONY: clean
+clean:
+       rm -f $(LIBRARY_FILE)
+       for obj in $(OBJECT_LIB) $(OBJECT_EXEC); do rm -f $$obj $${obj%.o}.d || true; done
+       for i in $(EXEC); do [ -e $$i ] && rm $$i || true; done
+
+
+# recipes
+scratchpad/%.o: $(C_SOURCE_DIR)/%.c
+       $(C) $(CFLAGS) -o $@ -c $<
+
+$(MACHINE_DIR)/%: scratchpad/%.CLI.o
+       $(C) -o $@ $< $(LN_FLAGS)
+
diff --git a/developer/make/target_library_cli.mk b/developer/make/target_library_cli.mk
deleted file mode 100644 (file)
index 5ef8770..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# make/target_lib_cli.mk — build *.lib.c and *.cli.c
-# written for the Harmony skeleton, always invoked from cwd  $REPO_HOME/<role>
-
-.SUFFIXES:
-.EXPORT_ALL_VARIABLES:
-.DELETE_ON_ERROR:
-
-#--------------------------------------------------------------------------------
-# files have two suffixes by convention, e.g.: X.lib.c or Y.cli.c 
-#
-
-ifeq ($(strip $(C)),)
-  $(error target_lib_cli.mk: no C compiler specified)
-endif
-
-# single source directory
-C_SOURCE_DIR ?= cc
-C_SOURCE_DIR_OK := $(wildcard $(C_SOURCE_DIR))
-
-ifeq ($(strip $(C_SOURCE_DIR_OK)),)
-  $(warning target_lib_cli.mk: C_SOURCE_DIR '$(C_SOURCE_DIR)' not found or empty)
-endif
-
-# RT uses header integrated C source files
-CFLAGS ?= -I $(C_SOURCE_DIR)
-
-# source discovery (single dir)
-C_SOURCE_LIB  := $(wildcard $(C_SOURCE_DIR)/*.lib.c)
-C_SOURCE_EXEC := $(wildcard $(C_SOURCE_DIR)/*.cli.c)
-
-# remove suffix to get base name
-C_BASE_LIB  := $(sort $(patsubst %.lib.c,%, $(notdir $(C_SOURCE_LIB))))
-C_BASE_EXEC := $(sort $(patsubst %.cli.c,%, $(notdir $(C_SOURCE_EXEC))))
-
-
-# two sets of object files, one for the lib, and one for the CLI programs
-OBJECT_LIB  := $(patsubst %, scratchpad/%.lib.o, $(C_BASE_LIB))
-OBJECT_EXEC := $(patsubst %, scratchpad/%.cli.o, $(C_BASE_EXEC))
-
--include $(OBJECT_LIB:.o=.d) $(OBJECT_EXEC:.o=.d)
-
-# executables are made from EXEC sources
-EXEC := $(patsubst %, $(EXECDIR)/%, $(C_BASE_EXEC))
-
-
-#--------------------------------------------------------------------------------
-# targets
-
-# when no target is given make uses the first target, this one
-.PHONY: usage
-usage:
-       @echo example usage: make clean
-       @echo example usage: make library
-       @echo example usage: make cli
-       @echo example usage: make library cli
-
-.PHONY: version
-version:
-       @echo makefile version 7.1
-       if [ ! -z "$(C)" ]; then $(C) -v; fi
-       /bin/make -v
-
-.PHONY: information
-information:
-       @printf "· → Unicode middle dot — visible: [%b]\n" "·"
-       @echo "C_SOURCE_DIR: " $(C_SOURCE_DIR)
-       @echo "C_SOURCE_LIB: " $(C_SOURCE_LIB)
-       @echo "C_SOURCE_EXEC: " $(C_SOURCE_EXEC)
-       @echo "C_BASE_LIB: " $(C_BASE_LIB)
-       @echo "C_BASE_EXEC: " $(C_BASE_EXEC)
-       @echo "OBJECT_LIB: " $(OBJECT_LIB)
-       @echo "OBJECT_EXEC: " $(OBJECT_EXEC)
-       @echo "EXEC: " $(EXEC)
-       @echo "INCFLAG_List: " $(INCFLAG_List)
-
-.PHONY: library
-library: $(LIBFILE)
-
-$(LIBFILE): $(OBJECT_LIB)
-       @if [ -s "$@" ] || [ -n "$(OBJECT_LIB)" ]; then \
-               echo "ar rcs $@ $^"; \
-               ar rcs $@ $^; \
-       else \
-               rm -f "$@"; \
-       fi   
-
-#.PHONY: cli
-#cli: $(LIBFILE) $(EXEC)
-
-.PHONY: cli
-cli: library $(EXEC)
-
-
-# generally better to use the project local clean scripts, but this will make it so that the make targets can be run again
-
-.PHONY: clean
-clean:
-       rm -f $(LIBFILE)
-       for obj in $(OBJECT_LIB) $(OBJECT_EXEC); do rm -f $$obj $${obj%.o}.d || true; done
-       for i in $(EXEC); do [ -e $$i ] && rm $$i || true; done
-
-
-# recipes
-scratchpad/%.o: $(C_SOURCE_DIR)/%.c
-       $(C) $(CFLAGS) -o $@ -c $<
-
-$(EXECDIR)/%: scratchpad/%.cli.o
-       $(C) -o $@ $< $(LIB_ARG) $(LINKFLAGS)
-
diff --git a/developer/make/temp.sh b/developer/make/temp.sh
new file mode 100644 (file)
index 0000000..4e0e27b
--- /dev/null
@@ -0,0 +1,10 @@
+sed -E '
+s/\bC_SOURCE_DIR_OK\b/c_source_dir_ok/g;
+s/\bC_SOURCE_LIB\b/c_source_lib/g;
+s/\bC_SOURCE_EXEC\b/c_source_exec/g;
+s/\bC_BASE_LIB\b/c_base_lib/g;
+s/\bC_BASE_EXEC\b/c_base_exec/g;
+s/\bOBJECT_LIB\b/object_lib/g;
+s/\bOBJECT_EXEC\b/object_exec/g;
+s/\bEXEC\b/exec_/g
+' target_library_CLI.mk > target_library_CLI.new.mk