Update makefile

This commit is contained in:
2026-08-31 17:12:21 +02:00
parent 72b5585321
commit 5a76752c12

View File

@@ -3,14 +3,13 @@
all: help all: help
help: help:
@echo "Please use: 'make init', 'make debug', 'make build', 'make release', or 'make clean'" @echo "Please use: 'make init', 'make debug', 'make build', or 'make clean'"
@echo "Note: parallel builds (via 'make -jN' where N is some number of how many jobs to generate)" @echo "Note: parallel builds (via 'make -jN' where N is some number of how many jobs to generate)"
@echo "This is supported via recursive build shell calls. Not actually passing -j to make so should work even on a pure POSIX system." @echo "This is supported via recursive build shell calls. Not actually passing -j to make so should work even on a pure POSIX system."
init: init:
@mkdir -p output source_code includes config @mkdir -p output source_code includes config
@touch config/version source_code/main.c @touch source_code/main.c
@echo "_00.000.00.0000" > config/version
@printf '%s\n' \ @printf '%s\n' \
'# POSIX Virtual Environment for C Build System.' \ '# POSIX Virtual Environment for C Build System.' \
'# Usage: . config/activate' \ '# Usage: . config/activate' \
@@ -24,7 +23,8 @@ init:
'_OLD_VIRTUAL_LIBS="$$LIBS"' \ '_OLD_VIRTUAL_LIBS="$$LIBS"' \
'_OLD_VIRTUAL_CFLAGS="$$CFLAGS"' \ '_OLD_VIRTUAL_CFLAGS="$$CFLAGS"' \
'_OLD_VIRTUAL_DEBUG_FLAGS="$$DEBUG_FLAGS"' \ '_OLD_VIRTUAL_DEBUG_FLAGS="$$DEBUG_FLAGS"' \
'_OLD_VIRTUAL_RELEASE_FLAGS="$$RELEASE_FLAGS"' \ '_OLD_VIRTUAL_BUILD_FLAGS="$$BUILD_FLAGS"' \
'_OLD_VIRTUAL_VERSION="$$VERSION"' \
'_OLD_VIRTUAL_PS1="$$PS1"' \ '_OLD_VIRTUAL_PS1="$$PS1"' \
'' \ '' \
'# Base configuration variables (Updated by "env_set VARIABLE value")' \ '# Base configuration variables (Updated by "env_set VARIABLE value")' \
@@ -32,7 +32,8 @@ init:
'export LIBS=""' \ 'export LIBS=""' \
'export CFLAGS=""' \ 'export CFLAGS=""' \
'export DEBUG_FLAGS=""' \ 'export DEBUG_FLAGS=""' \
'export RELEASE_FLAGS=""' \ 'export BUILD_FLAGS=""' \
'export VERSION=""' \
'export C_VENV_ACTIVE="true"' \ 'export C_VENV_ACTIVE="true"' \
'' \ '' \
'# Prepend (directory_name_env) to the shell prompt' \ '# Prepend (directory_name_env) to the shell prompt' \
@@ -43,7 +44,7 @@ init:
'# Function to dynamically set variables in the terminal AND save them to this file.' \ '# Function to dynamically set variables in the terminal AND save them to this file.' \
'env_set() {' \ 'env_set() {' \
' if [ -z "$$1" ]; then' \ ' if [ -z "$$1" ]; then' \
' echo "Usage: env_set <CC|LIBS|CFLAGS|DEBUG_FLAGS|RELEASE_FLAGS> [value]"' \ ' echo "Usage: env_set <CC|LIBS|CFLAGS|DEBUG_FLAGS|BUILD_FLAGS|VERSION> [value]"' \
' return 1' \ ' return 1' \
' fi' \ ' fi' \
' ' \ ' ' \
@@ -87,10 +88,16 @@ init:
' unset DEBUG_FLAGS' \ ' unset DEBUG_FLAGS' \
' fi' \ ' fi' \
'' \ '' \
' if [ -n "$$_OLD_VIRTUAL_RELEASE_FLAGS" ]; then' \ ' if [ -n "$$_OLD_VIRTUAL_BUILD_FLAGS" ]; then' \
' export RELEASE_FLAGS="$$_OLD_VIRTUAL_RELEASE_FLAGS"' \ ' export BUILD_FLAGS="$$_OLD_VIRTUAL_BUILD_FLAGS"' \
' else' \ ' else' \
' unset RELEASE_FLAGS' \ ' unset BUILD_FLAGS' \
' fi' \
'' \
' if [ -n "$$_OLD_VIRTUAL_VERSION" ]; then' \
' export VERSION="$$_OLD_VIRTUAL_VERSION"' \
' else' \
' unset VERSION' \
' fi' \ ' fi' \
'' \ '' \
' if [ -n "$$_OLD_VIRTUAL_PS1" ]; then' \ ' if [ -n "$$_OLD_VIRTUAL_PS1" ]; then' \
@@ -101,7 +108,8 @@ init:
' unset _OLD_VIRTUAL_LIBS' \ ' unset _OLD_VIRTUAL_LIBS' \
' unset _OLD_VIRTUAL_CFLAGS' \ ' unset _OLD_VIRTUAL_CFLAGS' \
' unset _OLD_VIRTUAL_DEBUG_FLAGS' \ ' unset _OLD_VIRTUAL_DEBUG_FLAGS' \
' unset _OLD_VIRTUAL_RELEASE_FLAGS' \ ' unset _OLD_VIRTUAL_BUILD_FLAGS' \
' unset _OLD_VIRTUAL_VERSION' \
' unset _OLD_VIRTUAL_PS1' \ ' unset _OLD_VIRTUAL_PS1' \
' unset C_VENV_ACTIVE' \ ' unset C_VENV_ACTIVE' \
' unset ENV_NAME' \ ' unset ENV_NAME' \
@@ -124,8 +132,7 @@ debug:
fi fi
@mkdir -p config output/obj_debug @mkdir -p config output/obj_debug
@PROJ_NAME=$$(basename "$$(pwd)"); \ @PROJ_NAME=$$(basename "$$(pwd)"); \
VERS=$$(cat config/version 2>/dev/null || echo "_00.000.00.0000"); \ OUT="output/$${PROJ_NAME}$${VERSION}"; \
OUT="output/$${PROJ_NAME}$${VERS}"; \
MK="config/debug.mk"; \ MK="config/debug.mk"; \
ACTIVE_CC=$${CC:-c99}; \ ACTIVE_CC=$${CC:-c99}; \
ACTIVE_LIBS=$${LIBS:-}; \ ACTIVE_LIBS=$${LIBS:-}; \
@@ -153,13 +160,12 @@ build:
fi fi
@mkdir -p config output/obj_release @mkdir -p config output/obj_release
@PROJ_NAME=$$(basename "$$(pwd)"); \ @PROJ_NAME=$$(basename "$$(pwd)"); \
VERS=$$(cat config/version 2>/dev/null || echo "_00.000.00.0000"); \ OUT="output/$${PROJ_NAME}$${VERSION}"; \
OUT="output/$${PROJ_NAME}$${VERS}"; \
MK="config/build.mk"; \ MK="config/build.mk"; \
ACTIVE_CC=$${CC:-c99}; \ ACTIVE_CC=$${CC:-c99}; \
ACTIVE_LIBS=$${LIBS:-}; \ ACTIVE_LIBS=$${LIBS:-}; \
ACTIVE_CFLAGS=$${CFLAGS:-}; \ ACTIVE_CFLAGS=$${CFLAGS:-}; \
ACTIVE_RELEASE_FLAGS=$${RELEASE_FLAGS:-}; \ ACTIVE_BUILD_FLAGS=$${BUILD_FLAGS:-}; \
echo ".POSIX:" > $$MK; \ echo ".POSIX:" > $$MK; \
OBJS=""; \ OBJS=""; \
SRCS=$$(find source_code -type f -name '*.c' 2>/dev/null); \ SRCS=$$(find source_code -type f -name '*.c' 2>/dev/null); \
@@ -168,40 +174,8 @@ build:
OBJS="$$OBJS $$OBJ"; \ OBJS="$$OBJS $$OBJ"; \
echo "$$OBJ: $$SRC" >> $$MK; \ echo "$$OBJ: $$SRC" >> $$MK; \
echo " @mkdir -p $$(dirname $$OBJ)" >> $$MK; \ echo " @mkdir -p $$(dirname $$OBJ)" >> $$MK; \
echo " $$ACTIVE_CC $$ACTIVE_CFLAGS $$ACTIVE_RELEASE_FLAGS -I includes -c $$SRC -o $$OBJ $$ACTIVE_LIBS" >> $$MK; \ echo " $$ACTIVE_CC $$ACTIVE_CFLAGS $$ACTIVE_BUILD_FLAGS -I includes -c $$SRC -o $$OBJ $$ACTIVE_LIBS" >> $$MK; \
done; \ done; \
echo "$$OUT: $$OBJS" >> $$MK; \ echo "$$OUT: $$OBJS" >> $$MK; \
echo " $$ACTIVE_CC $$ACTIVE_CFLAGS $$ACTIVE_RELEASE_FLAGS -o $$OUT $$OBJS $$ACTIVE_LIBS" >> $$MK; \ echo " $$ACTIVE_CC $$ACTIVE_CFLAGS $$ACTIVE_BUILD_FLAGS -o $$OUT $$OBJS $$ACTIVE_LIBS" >> $$MK; \
$(MAKE) -f $$MK "$$OUT"
release:
@if [ -z "$$C_VENV_ACTIVE" ]; then \
echo "Error: Virtual environment not active."; \
echo "Please run: '. config/activate' (or 'source config/activate') before building."; \
exit 1; \
fi
@mkdir -p config output/obj_release
@DATE_STR=$$(date +_%y.%j.%H.%M%S); \
echo "$$DATE_STR" > config/version; \
echo "Project version updated to: $$DATE_STR"
@PROJ_NAME=$$(basename "$$(pwd)"); \
VERS=$$(cat config/version 2>/dev/null); \
OUT="output/$${PROJ_NAME}$${VERS}"; \
MK="config/release.mk"; \
ACTIVE_CC=$${CC:-c99}; \
ACTIVE_LIBS=$${LIBS:-}; \
ACTIVE_CFLAGS=$${CFLAGS:-}; \
ACTIVE_RELEASE_FLAGS=$${RELEASE_FLAGS:-}; \
echo ".POSIX:" > $$MK; \
OBJS=""; \
SRCS=$$(find source_code -type f -name '*.c' 2>/dev/null); \
for SRC in $$SRCS; do \
OBJ="output/obj_release/$${SRC}.o"; \
OBJS="$$OBJS $$OBJ"; \
echo "$$OBJ: $$SRC" >> $$MK; \
echo " @mkdir -p $$(dirname $$OBJ)" >> $$MK; \
echo " $$ACTIVE_CC $$ACTIVE_CFLAGS $$ACTIVE_RELEASE_FLAGS -I includes -c $$SRC -o $$OBJ $$ACTIVE_LIBS" >> $$MK; \
done; \
echo "$$OUT: $$OBJS" >> $$MK; \
echo " $$ACTIVE_CC $$ACTIVE_CFLAGS $$ACTIVE_RELEASE_FLAGS -o $$OUT $$OBJS $$ACTIVE_LIBS" >> $$MK; \
$(MAKE) -f $$MK "$$OUT" $(MAKE) -f $$MK "$$OUT"