####################################################################### ## ## Auto detect Operating System ## ####################################################################### ifneq "" "$(findstring -linux-,$(MAKE_HOST))" OS:=Linux else ifneq "" "$(VSINSTALLDIR)" OS:=Windows else OS:="" endif ifeq "$(OS)" "" $(error Cannot figure out which OS to build for." endif $(info Building for $(OS)...) ####################################################################### ## ## Make rules for linux ## ####################################################################### ifeq "$(OS)" "Linux" OPT:=-g -O0 LUPREX_EXE:=luprex LUPREXLIB_DLL:=luprexlib.so LUPREXSTATIC_EXE:=luprexstatic COMPILE:=g++ -Wall $(OPT) -std=c++20 -fvisibility=hidden -c -MMD -fPIC -o 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 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 endif ####################################################################### ## ## Make rules for visual ## ####################################################################### ifeq "$(OS)" "Windows" ifeq "" "$(VSINSTALLDIR)" $(error You must use vcvars64.bat to set up the visual studio environment variables) endif OPT:=/Od /Zi LUPREX_EXE:=luprex.exe LUPREXLIB_DLL:=luprexlib.dll LUPREXSTATIC_EXE:=luprexstatic.exe COMPILE:=CL $(OPT) /std:c++20 /EHsc /nologo /MD /TP /c /Fo: 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 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 endif ####################################################################### ## ## List of all source files ## ####################################################################### BASE_ERIS := \ lapi lcode lctype ldebug ldo ldump lfunc lgc llex lmem lobject lopcodes \ lparser lstate lstring ltable ltm lundump lvm lzio \ lauxlib lbaselib lbitlib lcorolib ldblib liolib lmathlib loslib \ lstrlib ltablib loadlib linit eris BASE_CORE := \ invocation spookyv2 eng-malloc debugcollector drivenengine util luastack \ traceback planemap pprint luavector idalloc globaldb sched http \ json table luasnap animqueue streambuffer source world-core world-accessor \ world-difftab world-diffxmit world-pairtab world-testing lpxserver lpxclient \ eng-tests printbuffer serializelua BASE_DRV := driver drvutil osdrvutil sslutil readline ####################################################################### ## ## Generate lists of OBJ files. ## ####################################################################### 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)) ####################################################################### ## ## Make Rules ## ####################################################################### all: build/$(OS)/$(LUPREX_EXE) build/$(OS)/$(LUPREXSTATIC_EXE) build/$(OS)/$(LUPREXLIB_DLL) $(CCJSON) build/$(OS)/DIRECTORY: mkdir -p build/$(OS)/core build/$(OS)/eris build/$(OS)/drv touch build/$(OS)/DIRECTORY build/$(OS)/$(LUPREX_EXE): build/$(OS)/$(LUPREXLIB_DLL) $(OBJ_DRV) $(LINKEXE) $@ $(OBJ_DRV) $(LIBS) build/$(OS)/$(LUPREXSTATIC_EXE): $(OBJ_DRV) $(OBJ_ERIS) $(OBJ_CORE) $(LINKEXE) $@ $^ $(LIBS) build/$(OS)/$(LUPREXLIB_DLL): $(OBJ_ERIS) $(OBJ_CORE) $(LINKDLL) $@ $^ build/$(OS)/eris/%.obj: ext/eris-master/src/%.c build/$(OS)/DIRECTORY $(MAKEDEPS) $@d $(FLAGS_ERIS) $< $(COMPILE) $@ $(FLAGS_ERIS) $< build/$(OS)/core/%.obj: cpp/core/%.cpp build/$(OS)/DIRECTORY $(MAKEDEPS) $@d $(FLAGS_CORE) $< $(COMPILE) $@ $(FLAGS_CORE) $< build/$(OS)/drv/%.obj: cpp/drv/%.cpp 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 clean-os: rm -f *.pdb build/$(OS)/* build/$(OS)/*/* ####################################################################### ## ## Automatically generated Make Dependencies ## ####################################################################### -include $(OBJ_ERIS:%.obj=%.d) -include $(OBJ_CORE:%.obj=%.d) -include $(OBJ_DRV:%.obj=%.d)