####################################################################### ## ## 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 ## ####################################################################### 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 -MP -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:=-Lluprex/ext/openssl-3.0.1/lib/linux -lssl -lcrypto -ldl 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 ####################################################################### ## ## 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:=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:=-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 ####################################################################### ## ## 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 sched http \ json table luasnap animqueue streambuffer source keywords world-core world-accessor \ world-difftab world-diffxmit world-pairtab world-testing lpxserver lpxclient \ unit-testing printbuffer serializelua BASE_DRV := driver drvutil sslutil readline ####################################################################### ## ## Generate lists of OBJ files. ## ####################################################################### 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)) ####################################################################### ## ## Make Rules ## ####################################################################### all: luprex/build/$(OS)/$(LUPREX_EXE) luprex/build/$(OS)/$(LUPREXSTATIC_EXE) luprex/build/$(OS)/$(LUPREXLIB_DLL) luprex/build/$(OS)/DIRECTORY: mkdir -p luprex/build/$(OS)/core luprex/build/$(OS)/eris luprex/build/$(OS)/drv touch luprex/build/$(OS)/DIRECTORY luprex/build/$(OS)/$(LUPREX_EXE): luprex/build/$(OS)/$(LUPREXLIB_DLL) $(OBJ_DRV) $(LINKEXE) $@ $(OBJ_DRV) $(LIBS) luprex/build/$(OS)/$(LUPREXSTATIC_EXE): $(OBJ_DRV) $(OBJ_ERIS) $(OBJ_CORE) $(LINKEXE) $@ $^ $(LIBS) luprex/build/$(OS)/$(LUPREXLIB_DLL): $(OBJ_ERIS) $(OBJ_CORE) $(LINKDLL) $@ $^ luprex/build/$(OS)/eris/%.obj: luprex/ext/eris-master/src/%.c luprex/build/$(OS)/DIRECTORY $(MAKEDEPS) $@d $(FLAGS_ERIS) $< $(COMPILE) $@ $(FLAGS_ERIS) $< luprex/build/$(OS)/core/%.obj: luprex/cpp/core/%.cpp luprex/build/$(OS)/DIRECTORY $(MAKEDEPS) $@d $(FLAGS_CORE) $< $(COMPILE) $@ $(FLAGS_CORE) $< luprex/build/$(OS)/drv/%.obj: luprex/cpp/drv/%.cpp luprex/build/$(OS)/DIRECTORY $(MAKEDEPS) $@d $(FLAGS_DRV) $< $(COMPILE) $@ $(FLAGS_DRV) $< clean: rm -f luprex/*.pdb rm -rf luprex/build clean-os: rm -f luprex/*.pdb luprex/build/$(OS)/* luprex/build/$(OS)/*/* ####################################################################### ## ## Automatically generated Make Dependencies ## ####################################################################### -include $(OBJ_ERIS:%.obj=%.d) -include $(OBJ_CORE:%.obj=%.d) -include $(OBJ_DRV:%.obj=%.d)