diff --git a/luprex/.gitignore b/luprex/.gitignore index 28562f3b..306cfed6 100644 --- a/luprex/.gitignore +++ b/luprex/.gitignore @@ -13,6 +13,10 @@ luprex *.pdb *.so *.a +*.lib +*.ilk +*.exp +*.pdb obj/** .vscode/** diff --git a/luprex/Makefile b/luprex/Makefile index 70e0cdf7..55809680 100644 --- a/luprex/Makefile +++ b/luprex/Makefile @@ -6,6 +6,8 @@ ifneq "" "$(findstring -linux-,$(MAKE_HOST))" OS=linux +else ifneq "" "$(VSINSTALLDIR)" + OS=visual else ifneq "" "$(findstring cmd.exe,$(COMSPEC))" OS=mingw endif @@ -23,81 +25,80 @@ $(info Building for $(OS)...) ####################################################################### OBJ_ERIS=\ - obj/eris/lapi.o \ - obj/eris/lcode.o \ - obj/eris/lctype.o \ - obj/eris/ldebug.o \ - obj/eris/ldo.o \ - obj/eris/ldump.o \ - obj/eris/lfunc.o \ - obj/eris/lgc.o \ - obj/eris/llex.o \ - obj/eris/lmem.o \ - obj/eris/lobject.o \ - obj/eris/lopcodes.o \ - obj/eris/lparser.o \ - obj/eris/lstate.o \ - obj/eris/lstring.o \ - obj/eris/ltable.o \ - obj/eris/ltm.o \ - obj/eris/lundump.o \ - obj/eris/lvm.o \ - obj/eris/lzio.o \ - obj/eris/lauxlib.o \ - obj/eris/lbaselib.o \ - obj/eris/lbitlib.o \ - obj/eris/lcorolib.o \ - obj/eris/ldblib.o \ - obj/eris/liolib.o \ - obj/eris/lmathlib.o \ - obj/eris/loslib.o \ - obj/eris/lstrlib.o \ - obj/eris/ltablib.o \ - obj/eris/loadlib.o \ - obj/eris/linit.o \ - obj/eris/eris.o \ + 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.o\ - obj/core/spookyv2.o\ - obj/core/eng-malloc.o\ - obj/core/debugcollector.o\ - obj/core/drivenengine.o\ - obj/core/util.o\ - obj/core/luastack.o\ - obj/core/traceback.o\ - obj/core/planemap.o\ - obj/core/pprint.o\ - obj/core/luaconsole.o\ - obj/core/idalloc.o\ - obj/core/globaldb.o\ - obj/core/sched.o\ - obj/core/http.o\ - obj/core/json.o\ - obj/core/table.o\ - obj/core/gui.o\ - obj/core/luasnap.o\ - obj/core/animqueue.o\ - obj/core/streambuffer.o\ - obj/core/source.o\ - obj/core/world-core.o\ - obj/core/world-accessor.o\ - obj/core/world-difftab.o\ - obj/core/world-diffxmit.o\ - obj/core/world-pairtab.o\ - obj/core/world-testing.o\ - obj/core/textgame.o\ - obj/core/lpxserver.o\ - obj/core/lpxclient.o\ - obj/core/eng-tests.o\ - obj/core/printbuffer.o\ - obj/core/serializelua.o\ + 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.o\ - obj/drv/sslutil.o\ - obj/drv/driver-$(OS).o\ + obj/drv/drvutil.obj\ + obj/drv/sslutil.obj\ ####################################################################### @@ -112,19 +113,19 @@ ifeq "$(OS)" "linux" OPT=-g -O0 GPP=g++ -Wall -fvisibility=hidden $(OPT) -std=c++17 -MMD -luprex: $(OBJ_DRV) luprexlib.so - $(GPP) -o $@ $(OBJ_DRV) -L./ext/openssl-linux -lssl -lcrypto -ldl +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/%.o: ext/eris-master/src/%.c +obj/eris/%.obj: ext/eris-master/src/%.c $(GPP) -fPIC -DLUA_USE_APICHECK -DLUA_USE_POSIX -o $@ -c $< -obj/core/%.o: cpp/core/%.cpp +obj/core/%.obj: cpp/core/%.cpp $(GPP) -fPIC -I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -o $@ -c $< -obj/drv/%.o: cpp/drv/%.cpp +obj/drv/%.obj: cpp/drv/%.cpp $(GPP) -I./ext -I./src/drv -o $@ -c $< endif @@ -141,26 +142,67 @@ ifeq "$(OS)" "mingw" OPT=-g -O0 GPP=g++ -Wall -fvisibility=hidden $(OPT) -std=c++17 -MMD -luprex.exe: $(OBJ_DRV) luprexlib.dll - $(GPP) -o $@ $(OBJ_DRV) -L./ext/openssl-mingw -lssl -lcrypto -lws2_32 -lcrypt32 -lcryptui +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/%.o: ext/eris-master/src/%.c +obj/eris/%.obj: ext/eris-master/src/%.c $(GPP) -fPIC -DLUA_USE_APICHECK -DLUA_COMPAT_ALL -o $@ -c $< -obj/core/%.o: cpp/core/%.cpp +obj/core/%.obj: cpp/core/%.cpp $(GPP) -fPIC -I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -o $@ -c $< -obj/drv/%.o: cpp/drv/%.cpp +obj/drv/%.obj: cpp/drv/%.cpp $(GPP) -I./ext -I./src/drv -o $@ -c $< endif +####################################################################### +## +## Make rules for visual +## +####################################################################### + +ifeq "$(OS)" "visual" + +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 + ####################################################################### ## @@ -169,7 +211,7 @@ endif ####################################################################### clean: - rm -f luprex luprex.exe luprex.so luprexlib.dll *.pdb obj/core/*.* obj/drv/*.* obj/eris/*.* + rm -f luprex luprex.exe luprexlib.so luprexlib.dll luprexstatic luprexstatic.exe *.pdb obj/core/*.* obj/drv/*.* obj/eris/*.* ####################################################################### @@ -178,7 +220,7 @@ clean: ## ####################################################################### --include $(OBJ_ERIS:%.o=%.d) --include $(OBJ_CORE:%.o=%.d) --include $(OBJ_DRV:%.o=%.d) +-include $(OBJ_ERIS:%.obj=%.d) +-include $(OBJ_CORE:%.obj=%.d) +-include $(OBJ_DRV:%.obj=%.d) diff --git a/luprex/cpp/core/util.cpp b/luprex/cpp/core/util.cpp index e2ef05f0..1c15795e 100644 --- a/luprex/cpp/core/util.cpp +++ b/luprex/cpp/core/util.cpp @@ -14,14 +14,6 @@ #include -#ifdef WIN32 -#endif - -#ifndef WIN32 -#include -#include -#endif - namespace sv { bool case_insensitive_eq(string_view s1, string_view s2) { diff --git a/luprex/cpp/drv/driver-mingw.cpp b/luprex/cpp/drv/driver-windows.cpp similarity index 96% rename from luprex/cpp/drv/driver-mingw.cpp rename to luprex/cpp/drv/driver-windows.cpp index 39911c07..4267167a 100644 --- a/luprex/cpp/drv/driver-mingw.cpp +++ b/luprex/cpp/drv/driver-windows.cpp @@ -279,10 +279,14 @@ static void ssl_load_certificate_authorities(SSL_CTX *ctx) { } static void call_init_engine_wrapper(EngineWrapper *w) { - HMODULE dll = LoadLibraryA(".\\luprex.dll"); - assert(dll != nullptr); + HMODULE exe = GetModuleHandleA(NULL); using InitFn = void (*)(EngineWrapper *); - InitFn initfn = (InitFn)GetProcAddress(dll, "init_engine_wrapper"); + InitFn initfn = (InitFn)GetProcAddress(exe, "init_engine_wrapper"); + if (initfn == nullptr) { + HMODULE dll = LoadLibraryA(".\\luprexlib.dll"); + assert(dll != nullptr); + initfn = (InitFn)GetProcAddress(dll, "init_engine_wrapper"); + } assert(initfn != nullptr); initfn(w); } diff --git a/luprex/cpp/drv/drvutil.cpp b/luprex/cpp/drv/drvutil.cpp index 9b642328..ece2406a 100644 --- a/luprex/cpp/drv/drvutil.cpp +++ b/luprex/cpp/drv/drvutil.cpp @@ -10,6 +10,7 @@ #include #if defined(_WIN32) +#include #include #elif defined(__linux__) #include