Convert to a true DLL engine
This commit is contained in:
6
luprex/.gitignore
vendored
6
luprex/.gitignore
vendored
@@ -1,5 +1,8 @@
|
|||||||
|
a.out
|
||||||
gprof.out
|
gprof.out
|
||||||
gmon.out
|
gmon.out
|
||||||
|
luprex
|
||||||
|
|
||||||
*~
|
*~
|
||||||
\#*#
|
\#*#
|
||||||
.#*
|
.#*
|
||||||
@@ -7,8 +10,9 @@ gmon.out
|
|||||||
*.o
|
*.o
|
||||||
*.dll
|
*.dll
|
||||||
*.exe
|
*.exe
|
||||||
|
*.so
|
||||||
*.a
|
*.a
|
||||||
main
|
|
||||||
obj/**
|
obj/**
|
||||||
.vscode/**
|
.vscode/**
|
||||||
ext/eris-master/src/lua
|
ext/eris-master/src/lua
|
||||||
|
|||||||
@@ -1,23 +1,42 @@
|
|||||||
|
#######################################################################
|
||||||
|
##
|
||||||
|
## Auto detect Operating System
|
||||||
|
##
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
ifneq "" "$(findstring -linux-,$(MAKE_HOST))"
|
ifneq "" "$(findstring -linux-,$(MAKE_HOST))"
|
||||||
|
|
||||||
OS=linux
|
OS=linux
|
||||||
EXE=main
|
EXE=luprex
|
||||||
LIBS=-L./ext/openssl-linux -lssl -lcrypto -ldl
|
DLL=luprex.so
|
||||||
|
LIBS=-L./ext/openssl-mingw -lssl -lcrypto -ldl
|
||||||
LUAFLAGS=-DLUA_USE_APICHECK -DLUA_USE_POSIX
|
LUAFLAGS=-DLUA_USE_APICHECK -DLUA_USE_POSIX
|
||||||
OPT=-g -O0
|
OPT=-g -O0
|
||||||
|
|
||||||
else ifneq "" "$(findstring cmd.exe,$(COMSPEC))"
|
else ifneq "" "$(findstring cmd.exe,$(COMSPEC))"
|
||||||
|
|
||||||
OS=mingw
|
OS=mingw
|
||||||
EXE=main.exe
|
EXE=luprex.exe
|
||||||
|
DLL=luprex.dll
|
||||||
LIBS=-L./ext/openssl-mingw -lssl -lcrypto -lws2_32 -lcrypt32 -lcryptui
|
LIBS=-L./ext/openssl-mingw -lssl -lcrypto -lws2_32 -lcrypt32 -lcryptui
|
||||||
LUAFLAGS=-DLUA_USE_APICHECK -DLUA_COMPAT_ALL
|
LUAFLAGS=-DLUA_USE_APICHECK -DLUA_COMPAT_ALL
|
||||||
OPT=-g -O0
|
OPT=-g -O0
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
$(error Cannot figure out whether to build the linux or mingw version)
|
$(error Cannot figure out whether to build the linux or mingw version)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
$(info Building for $(OS)...)
|
$(info Building for $(OS)...)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
##
|
||||||
|
## List of all OBJ files
|
||||||
|
##
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
OBJ_ERIS=\
|
OBJ_ERIS=\
|
||||||
obj/eris/lapi.o \
|
obj/eris/lapi.o \
|
||||||
obj/eris/lcode.o \
|
obj/eris/lcode.o \
|
||||||
@@ -91,25 +110,47 @@ OBJ_CORE=\
|
|||||||
OBJ_DRV=\
|
OBJ_DRV=\
|
||||||
obj/drv/drvutil.o\
|
obj/drv/drvutil.o\
|
||||||
obj/drv/sslutil.o\
|
obj/drv/sslutil.o\
|
||||||
obj/drv/driver-$(OS).o
|
obj/drv/driver-$(OS).o\
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$(EXE): $(OBJ_ERIS) $(OBJ_CORE) $(OBJ_DRV)
|
#######################################################################
|
||||||
g++ $(OPT) -std=c++17 -export-dynamic -Wall -o $@ $(OBJ_ERIS) $(OBJ_CORE) $(OBJ_DRV) $(LIBS)
|
##
|
||||||
|
## Make rules
|
||||||
|
##
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
GPP=g++ -Wall -fvisibility=hidden $(OPT) -std=c++17 -MMD
|
||||||
|
|
||||||
|
all: $(EXE) $(DLL)
|
||||||
|
|
||||||
|
$(EXE): $(OBJ_DRV)
|
||||||
|
$(GPP) -o $@ $(OBJ_DRV) -L./ext/openssl-linux -lssl -lcrypto -ldl
|
||||||
|
|
||||||
|
$(DLL): $(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/%.o: ext/eris-master/src/%.c
|
||||||
gcc $(OPT) -Wall -fvisibility=hidden $(LUAFLAGS) -c -MMD $< -o $@
|
$(GPP) -fPIC $(LUAFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
obj/core/%.o: cpp/core/%.cpp
|
obj/core/%.o: cpp/core/%.cpp
|
||||||
g++ $(OPT) -Wall -fvisibility=hidden -std=c++17 -I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -c -MMD $< -o $@
|
$(GPP) -fPIC -I./ext/eris-master/src -I./cpp/wrap -I./cpp/core -o $@ -c $<
|
||||||
|
|
||||||
obj/drv/%.o: cpp/drv/%.cpp
|
obj/drv/%.o: cpp/drv/%.cpp
|
||||||
g++ $(OPT) -Wall -fvisibility=hidden -std=c++17 -I./ext -I./src/drv -c -MMD $< -o $@
|
$(GPP) -I./ext -I./src/drv -o $@ -c $<
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f main.exe main obj/core/*.* obj/drv/*.* obj/eris/*.*
|
rm -f luprex luprex.exe luprex.so luprex.dll obj/core/*.* obj/drv/*.* obj/eris/*.*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
##
|
||||||
|
## Automatically generated Make Dependencies
|
||||||
|
##
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
-include $(OBJ_ERIS:%.o=%.d)
|
-include $(OBJ_ERIS:%.o=%.d)
|
||||||
-include $(OBJ_ERIS:%.o=%.d)
|
-include $(OBJ_CORE:%.o=%.d)
|
||||||
|
-include $(OBJ_DRV:%.o=%.d)
|
||||||
|
|
||||||
|
|||||||
@@ -158,12 +158,10 @@
|
|||||||
#include "wrap-set.hpp"
|
#include "wrap-set.hpp"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
#include "lauxlib.h"
|
#include "lauxlib.h"
|
||||||
#include "lualib.h"
|
#include "lualib.h"
|
||||||
#include "eris.h"
|
#include "eris.h"
|
||||||
}
|
|
||||||
|
|
||||||
class LuaSlot : public eng::nevernew {
|
class LuaSlot : public eng::nevernew {
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -217,17 +217,11 @@ static int console_read(char *bytes, int nbytes) {
|
|||||||
return read(0, bytes, nbytes);
|
return read(0, bytes, nbytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the DLL if it's not already loaded. Stores
|
|
||||||
// the handle in a global variable.
|
|
||||||
static void load_engine_dll() {
|
|
||||||
// Not actually implemented yet. Currently, the engine
|
|
||||||
// is linked right into the executable.
|
|
||||||
}
|
|
||||||
|
|
||||||
static void call_init_engine_wrapper(EngineWrapper *w) {
|
static void call_init_engine_wrapper(EngineWrapper *w) {
|
||||||
load_engine_dll();
|
|
||||||
using InitFn = void (*)(EngineWrapper *);
|
using InitFn = void (*)(EngineWrapper *);
|
||||||
InitFn initfn = (InitFn)dlsym(RTLD_DEFAULT, "init_engine_wrapper");
|
void *dll_handle = dlopen("./luprex.so", RTLD_NOW | RTLD_LOCAL);
|
||||||
|
assert(dll_handle != nullptr);
|
||||||
|
InitFn initfn = (InitFn)dlsym(dll_handle, "init_engine_wrapper");
|
||||||
assert(initfn != nullptr);
|
assert(initfn != nullptr);
|
||||||
initfn(w);
|
initfn(w);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user