Fix luprex Makefile so it emits full paths, and replace add-compile-commands.py with a better way to build compile_commands.json for luprex

This commit is contained in:
2026-02-27 15:29:44 -05:00
parent 1fa99bac3e
commit 0aea1e0798
3 changed files with 76 additions and 48 deletions

View File

@@ -1,3 +1,14 @@
#######################################################################
##
## This Makefile must be run from the top-level integration directory:
## make -f luprex/Makefile all
##
#######################################################################
ifeq (,$(wildcard luprex/Makefile))
$(error This Makefile must be run from the top-level integration directory: make -f luprex/Makefile all)
endif
#######################################################################
##
## Auto detect Operating System
@@ -33,12 +44,11 @@ ifeq "$(OS)" "Linux"
LINKDLL:=g++ -Wall $(OPT) -std=c++20 -export-dynamic -Wl,--no-allow-shlib-undefined -Wl,-z,defs -shared -o
LINKEXE:=g++ -Wall $(OPT) -std=c++20 -export-dynamic -o
MAKEDEPS:=true
LIBS:=-L./ext/openssl-3.0.1/lib/linux -lssl -lcrypto -ldl
CCJSON:=build/$(OS)/compile_commands.json
LIBS:=-Lluprex/ext/openssl-3.0.1/lib/linux -lssl -lcrypto -ldl
FLAGS_ERIS:=-DLUA_USE_APICHECK -DLUA_USE_POSIX
FLAGS_CORE:=-I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -I./ext
FLAGS_DRV:=-I./ext/openssl-3.1.0/inc -I./src/drv -I./ext
FLAGS_ERIS:=-DLUA_USE_APICHECK -DLUA_USE_POSIX
FLAGS_CORE:=-Iluprex/ext/eris-master/src -Iluprex/cpp/wrap -Iluprex/cpp/core -Iluprex/ext
FLAGS_DRV:=-Iluprex/ext/openssl-3.1.0/inc -Iluprex/cpp/drv -Iluprex/ext
endif
#######################################################################
@@ -59,12 +69,11 @@ ifeq "$(OS)" "Windows"
LINKDLL:=CL $(OPT) /std:c++20 /EHsc /nologo /LDd /Fe:
LINKEXE:=CL $(OPT) /std:c++20 /EHsc /nologo /Fe:
MAKEDEPS:=g++ -Wall -std=c++20 -MMD -E -o
LIBS:=ext/openssl-3.1.0/lib/visual/libcrypto.lib ext/openssl-3.1.0/lib/visual/libssl.lib ws2_32.lib crypt32.lib cryptui.lib user32.lib advapi32.lib
CCJSON:=build/$(OS)/compile_commands.json
LIBS:=luprex/ext/openssl-3.1.0/lib/visual/libcrypto.lib luprex/ext/openssl-3.1.0/lib/visual/libssl.lib ws2_32.lib crypt32.lib cryptui.lib user32.lib advapi32.lib
FLAGS_ERIS:=-DLUA_USE_APICHECK -DLUA_COMPAT_ALL
FLAGS_CORE:=-I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -I./ext
FLAGS_DRV:=-I./ext/openssl-3.1.0/inc -I./src/drv -I./ext
FLAGS_CORE:=-Iluprex/ext/eris-master/src -Iluprex/cpp/wrap -Iluprex/cpp/core -Iluprex/ext
FLAGS_DRV:=-Iluprex/ext/openssl-3.1.0/inc -Iluprex/cpp/drv -Iluprex/ext
endif
#######################################################################
@@ -94,9 +103,9 @@ BASE_DRV := driver drvutil sslutil readline
##
#######################################################################
OBJ_ERIS := $(patsubst %,build/$(OS)/eris/%.obj,$(BASE_ERIS))
OBJ_CORE := $(patsubst %,build/$(OS)/core/%.obj,$(BASE_CORE))
OBJ_DRV := $(patsubst %,build/$(OS)/drv/%.obj,$(BASE_DRV))
OBJ_ERIS := $(patsubst %,luprex/build/$(OS)/eris/%.obj,$(BASE_ERIS))
OBJ_CORE := $(patsubst %,luprex/build/$(OS)/core/%.obj,$(BASE_CORE))
OBJ_DRV := $(patsubst %,luprex/build/$(OS)/drv/%.obj,$(BASE_DRV))
#######################################################################
##
@@ -104,45 +113,40 @@ OBJ_DRV := $(patsubst %,build/$(OS)/drv/%.obj,$(BASE_DRV))
##
#######################################################################
all: build/$(OS)/$(LUPREX_EXE) build/$(OS)/$(LUPREXSTATIC_EXE) build/$(OS)/$(LUPREXLIB_DLL) $(CCJSON)
all: luprex/build/$(OS)/$(LUPREX_EXE) luprex/build/$(OS)/$(LUPREXSTATIC_EXE) luprex/build/$(OS)/$(LUPREXLIB_DLL)
build/$(OS)/DIRECTORY:
mkdir -p build/$(OS)/core build/$(OS)/eris build/$(OS)/drv
touch build/$(OS)/DIRECTORY
luprex/build/$(OS)/DIRECTORY:
mkdir -p luprex/build/$(OS)/core luprex/build/$(OS)/eris luprex/build/$(OS)/drv
touch luprex/build/$(OS)/DIRECTORY
build/$(OS)/$(LUPREX_EXE): build/$(OS)/$(LUPREXLIB_DLL) $(OBJ_DRV)
luprex/build/$(OS)/$(LUPREX_EXE): luprex/build/$(OS)/$(LUPREXLIB_DLL) $(OBJ_DRV)
$(LINKEXE) $@ $(OBJ_DRV) $(LIBS)
build/$(OS)/$(LUPREXSTATIC_EXE): $(OBJ_DRV) $(OBJ_ERIS) $(OBJ_CORE)
luprex/build/$(OS)/$(LUPREXSTATIC_EXE): $(OBJ_DRV) $(OBJ_ERIS) $(OBJ_CORE)
$(LINKEXE) $@ $^ $(LIBS)
build/$(OS)/$(LUPREXLIB_DLL): $(OBJ_ERIS) $(OBJ_CORE)
luprex/build/$(OS)/$(LUPREXLIB_DLL): $(OBJ_ERIS) $(OBJ_CORE)
$(LINKDLL) $@ $^
build/$(OS)/eris/%.obj: ext/eris-master/src/%.c build/$(OS)/DIRECTORY
luprex/build/$(OS)/eris/%.obj: luprex/ext/eris-master/src/%.c luprex/build/$(OS)/DIRECTORY
$(MAKEDEPS) $@d $(FLAGS_ERIS) $<
$(COMPILE) $@ $(FLAGS_ERIS) $<
build/$(OS)/core/%.obj: cpp/core/%.cpp build/$(OS)/DIRECTORY
luprex/build/$(OS)/core/%.obj: luprex/cpp/core/%.cpp luprex/build/$(OS)/DIRECTORY
$(MAKEDEPS) $@d $(FLAGS_CORE) $<
$(COMPILE) $@ $(FLAGS_CORE) $<
build/$(OS)/drv/%.obj: cpp/drv/%.cpp build/$(OS)/DIRECTORY
luprex/build/$(OS)/drv/%.obj: luprex/cpp/drv/%.cpp luprex/build/$(OS)/DIRECTORY
$(MAKEDEPS) $@d $(FLAGS_DRV) $<
$(COMPILE) $@ $(FLAGS_DRV) $<
$(CCJSON): Makefile add-compile-commands.py
echo "[]" > $(CCJSON)
python3 ./add-compile-commands.py "$(CCJSON)" "$(COMPILE)" "$(FLAGS_ERIS)" "build/$(OS)/eris/FILE.obj" "ext/eris-master/src/FILE.c" $(BASE_ERIS)
python3 ./add-compile-commands.py "$(CCJSON)" "$(COMPILE)" "$(FLAGS_CORE)" "build/$(OS)/cpp/FILE.obj" "cpp/core/FILE.cpp" $(BASE_CORE)
python3 ./add-compile-commands.py "$(CCJSON)" "$(COMPILE)" "$(FLAGS_DRV)" "build/$(OS)/drv/FILE.obj" "cpp/drv/FILE.cpp" $(BASE_DRV)
clean:
rm -f *.pdb
rm -rf build
rm -f luprex/*.pdb
rm -rf luprex/build
clean-os:
rm -f *.pdb build/$(OS)/* build/$(OS)/*/*
rm -f luprex/*.pdb luprex/build/$(OS)/* luprex/build/$(OS)/*/*
#######################################################################
##
@@ -153,4 +157,3 @@ clean-os:
-include $(OBJ_ERIS:%.obj=%.d)
-include $(OBJ_CORE:%.obj=%.d)
-include $(OBJ_DRV:%.obj=%.d)

View File

@@ -3,7 +3,7 @@
import sys, os, json
from pathlib import Path
LUPREXDIR=os.path.dirname(os.path.abspath(sys.argv[0]))
BASEDIR=os.getcwd()
JSONFILE=sys.argv[1]
COMPILE=sys.argv[2]
@@ -16,11 +16,11 @@ OBJECTS=sys.argv[6:]
JSON = json.loads(Path(JSONFILE).read_text())
for base in OBJECTS:
obj = LUPREXDIR + "/" + OBJPAT.replace("FILE", base)
file = LUPREXDIR + "/" + CPAT.replace("FILE", base)
flags = FLAGS.replace("-I./", f"-I{LUPREXDIR}/")
obj = BASEDIR + "/" + OBJPAT.replace("FILE", base)
file = BASEDIR + "/" + CPAT.replace("FILE", base)
flags = FLAGS.replace("-I./", f"-I{BASEDIR}/")
command = f"{COMPILE} {obj} {flags} {file}"
JSON.append({"file": file, "command": command, "directory": LUPREXDIR })
JSON.append({"file": file, "command": command, "directory": BASEDIR })
Path(JSONFILE).write_text(json.dumps(JSON, indent=4))