####################################################################### ## ## Auto detect Operating System ## ####################################################################### ifneq "" "$(findstring -linux-,$(MAKE_HOST))" OS=linux else ifneq "" "$(VSINSTALLDIR)" OS=visual else ifneq "" "$(findstring cmd.exe,$(COMSPEC))" OS=mingw endif ifeq "$(OS)" "" $(error Cannot figure out which OS to build for." endif $(info Building for $(OS)...) ####################################################################### ## ## List of all OBJ files ## ####################################################################### OBJ_ERIS=\ obj/eris/lapi.obj \ obj/eris/lcode.obj \ obj/eris/lctype.obj \ obj/eris/ldebug.obj \ obj/eris/ldo.obj \ obj/eris/ldump.obj \ obj/eris/lfunc.obj \ obj/eris/lgc.obj \ obj/eris/llex.obj \ obj/eris/lmem.obj \ obj/eris/lobject.obj \ obj/eris/lopcodes.obj \ obj/eris/lparser.obj \ obj/eris/lstate.obj \ obj/eris/lstring.obj \ obj/eris/ltable.obj \ obj/eris/ltm.obj \ obj/eris/lundump.obj \ obj/eris/lvm.obj \ obj/eris/lzio.obj \ obj/eris/lauxlib.obj \ obj/eris/lbaselib.obj \ obj/eris/lbitlib.obj \ obj/eris/lcorolib.obj \ obj/eris/ldblib.obj \ obj/eris/liolib.obj \ obj/eris/lmathlib.obj \ obj/eris/loslib.obj \ obj/eris/lstrlib.obj \ obj/eris/ltablib.obj \ obj/eris/loadlib.obj \ obj/eris/linit.obj \ obj/eris/eris.obj \ OBJ_CORE=\ obj/core/invocation.obj\ obj/core/spookyv2.obj\ obj/core/eng-malloc.obj\ obj/core/debugcollector.obj\ obj/core/drivenengine.obj\ obj/core/util.obj\ obj/core/luastack.obj\ obj/core/traceback.obj\ obj/core/planemap.obj\ obj/core/pprint.obj\ obj/core/luaconsole.obj\ obj/core/idalloc.obj\ obj/core/globaldb.obj\ obj/core/sched.obj\ obj/core/http.obj\ obj/core/json.obj\ obj/core/table.obj\ obj/core/gui.obj\ obj/core/luasnap.obj\ obj/core/animqueue.obj\ obj/core/streambuffer.obj\ obj/core/source.obj\ obj/core/world-core.obj\ obj/core/world-accessor.obj\ obj/core/world-difftab.obj\ obj/core/world-diffxmit.obj\ obj/core/world-pairtab.obj\ obj/core/world-testing.obj\ obj/core/textgame.obj\ obj/core/lpxserver.obj\ obj/core/lpxclient.obj\ obj/core/eng-tests.obj\ obj/core/printbuffer.obj\ obj/core/serializelua.obj\ OBJ_DRV=\ obj/drv/drvutil.obj\ obj/drv/sslutil.obj\ ####################################################################### ## ## Make rules for linux ## ####################################################################### ifeq "$(OS)" "linux" OPT=-g -O0 GPP=g++ -Wall -fvisibility=hidden $(OPT) -std=c++17 -MMD luprex: $(OBJ_DRV) driver-linux.o luprexlib.so $(GPP) -o $@ $(OBJ_DRV) driver-linux.o -L./ext/openssl-linux -lssl -lcrypto -ldl luprexlib.so: $(OBJ_ERIS) $(OBJ_CORE) $(GPP) -export-dynamic -Wl,--no-allow-shlib-undefined -Wl,-z,defs -shared-o $@ $^ obj/eris/%.obj: ext/eris-master/src/%.c $(GPP) -fPIC -DLUA_USE_APICHECK -DLUA_USE_POSIX -o $@ -c $< obj/core/%.obj: cpp/core/%.cpp $(GPP) -fPIC -I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -o $@ -c $< obj/drv/%.obj: cpp/drv/%.cpp $(GPP) -I./ext -I./src/drv -o $@ -c $< endif ####################################################################### ## ## Make rules for mingw ## ####################################################################### ifeq "$(OS)" "mingw" OPT=-g -O0 GPP=g++ -Wall -fvisibility=hidden $(OPT) -std=c++17 -MMD luprex.exe: $(OBJ_DRV) driver-windows.o luprexlib.dll $(GPP) -o $@ $(OBJ_DRV) driver-windows.o -L./ext/openssl-mingw -lssl -lcrypto -lws2_32 -lcrypt32 -lcryptui ext/cv2pdb.exe luprex.exe luprexlib.dll: $(OBJ_ERIS) $(OBJ_CORE) $(GPP) -Wl,--no-allow-shlib-undefined -shared -o $@ $^ ext/cv2pdb.exe luprexlib.dll obj/eris/%.obj: ext/eris-master/src/%.c $(GPP) -fPIC -DLUA_USE_APICHECK -DLUA_COMPAT_ALL -o $@ -c $< obj/core/%.obj: cpp/core/%.cpp $(GPP) -fPIC -I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -o $@ -c $< obj/drv/%.obj: cpp/drv/%.cpp $(GPP) -I./ext -I./src/drv -o $@ -c $< endif ####################################################################### ## ## Make rules for visual ## ####################################################################### ifeq "$(OS)" "visual" ifeq "" "$(VSINSTALLDIR)" $(error You must use vcvars64.bat to set up the visual studio environment variables) endif OPT=/Od /Zi MMD=g++ -Wall -std=c++17 -MMD -E CL=CL $(OPT) /std:c++17 /EHsc /nologo /MD /TP /c LINK=CL $(OPT) /std:c++17 /EHsc /nologo OBJ_OS=obj/drv/driver-windows.obj LIB_SSL=ext/openssl-3.1.0/lib/visual/libcrypto.lib ext/openssl-3.1.0/lib/visual/libssl.lib LIB_WIN=ws2_32.lib crypt32.lib cryptui.lib user32.lib advapi32.lib all: luprex.exe luprexlib.dll luprexstatic.exe luprex.exe: luprexlib.dll $(OBJ_DRV) $(OBJ_OS) $(LINK) /Fe: $@ $(OBJ_DRV) $(OBJ_OS) $(LIB_SSL) $(LIB_WIN) luprexlib.dll: $(OBJ_ERIS) $(OBJ_CORE) $(LINK) /LDd /Fe: $@ $^ luprexstatic.exe: $(OBJ_DRV) $(OBJ_OS) $(OBJ_ERIS) $(OBJ_CORE) $(LINK) /Fe: $@ $(OBJ_DRV) $(OBJ_OS) $(OBJ_ERIS) $(OBJ_CORE) $(LIB_SSL) $(LIB_WIN) obj/eris/%.obj: ext/eris-master/src/%.c $(MMD) -DLUA_USE_APICHECK -DLUA_COMPAT_ALL -o $@d $< $(CL) /DLUA_USE_APICHECK /DLUA_COMPAT_ALL /Fo: $@ $< obj/core/%.obj: cpp/core/%.cpp $(MMD) -I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -o $@d $< $(CL) /I./ext/eris-master/src /I./cpp\wrap /I./cpp/core /Fo: $@ $< obj/drv/%.obj: cpp/drv/%.cpp $(MMD) -I./ext/openssl-3.1.0/inc -I./src/drv -o $@d $< $(CL) /I./ext/openssl-3.1.0/inc -I./src/drv /Fo: $@ $< endif ####################################################################### ## ## Make Clean, deliberately OS independent ## ####################################################################### clean: rm -f luprex luprex.exe luprexlib.so luprexlib.dll luprexstatic luprexstatic.exe *.ilk *.exp *.pdb obj/core/*.* obj/drv/*.* obj/eris/*.* ####################################################################### ## ## Automatically generated Make Dependencies ## ####################################################################### -include $(OBJ_ERIS:%.obj=%.d) -include $(OBJ_CORE:%.obj=%.d) -include $(OBJ_DRV:%.obj=%.d)