Add publish to crosslang and add plugin_host support for packages

This commit is contained in:
2025-09-30 22:22:14 -05:00
parent cac59c863c
commit 0b51a04bfa
12 changed files with 500 additions and 22 deletions

View File

@@ -0,0 +1,46 @@
cmake_minimum_required(VERSION 3.16)
project(@<<short_name>>@)
option(@<<caps_version>>@_FETCHCONTENT "Whether to use fetchcontent" ON)
option(@<<caps_version>>@_SHARED_CROSSLANG "Whether to use shared crosslang" ON)
add_executable(@<<short_name>>@ src/main.cpp)
if(@<<caps_version>>@_FETCHCONTENT)
set(TESSESFRAMEWORK_ENABLE_EXAMPLES OFF CACHE INTERNAL "For TessesFramework" FORCE)
set(TESSESFRAMEWORK_ENABLE_APPS OFF CACHE INTERNAL "For TessesFramework" FORCE)
set(TESSESFRAMEWORK_FETCHCONTENT ON CACHE INTERNAL "For TessesFramework" FORCE)
set(CROSSLANG_ENABLE_BINARIES OFF CACHE INTERNAL "For CrossLang" FORCE)
if(@<<caps_version>>@_SHARED_CROSSLANG)
set(TESSESFRAMEWORK_ENABLE_STATIC OFF CACHE INTERNAL "For TessesFramework" FORCE)
set(TESSESFRAMEWORK_ENABLE_SHARED ON CACHE INTERNAL "For TessesFramework" FORCE)
else()
set(TESSESFRAMEWORK_ENABLE_STATIC ON CACHE INTERNAL "For TessesFramework" FORCE)
set(TESSESFRAMEWORK_ENABLE_SHARED OFF CACHE INTERNAL "For TessesFramework" FORCE)
endif()
include(FetchContent)
FetchContent_Declare(
TessesCrossLang
GIT_REPOSITORY https://onedev.site.tesses.net/crosslang.git
)
FetchContent_MakeAvailable(TessesCrossLang)
if(@<<caps_version>>@_SHARED_CROSSLANG)
target_link_libraries(@<<short_name>>@ PUBLIC crosslang_shared)
else()
target_link_libraries(@<<short_name>>@ PUBLIC crosslang_static)
endif()
else()
find_package(TessesCrossLang REQUIRED)
if(@<<caps_version>>@_SHARED_CROSSLANG)
target_link_libraries(@<<short_name>>@ PUBLIC TessesCrossLang::crosslang_shared)
else()
target_link_libraries(@<<short_name>>@ PUBLIC TessesCrossLang::crosslang_static)
endif()
endif()
install(TARGETS @<<short_name>>@ DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@@ -0,0 +1,76 @@
#include <CrossLang.hpp>
#include "@<<HEADER>>@.h"
using namespace Tesses::Framework;
using namespace Tesses::CrossLang;
int main(int argc, char** argv)
{
std::string name = argv[0];
Tesses::Framework::Filesystem::LocalFilesystem fs;
Tesses::Framework::Filesystem::VFSPath exePath=fs.SystemToVFSPath(name);
exePath.MakeAbsolute();
TF_InitWithConsole();
GC gc;
gc.Start();
GCList ls(gc);
TRootEnvironment* env = TRootEnvironment::Create(ls, TDictionary::Create(ls));
TStd::RegisterStd(&gc,env);
{
auto ms = std::shared_ptr<Tesses::Framework::Streams::MemoryStream>(false);
auto& buff = ms->GetBuffer();
buff.resize(@<<CAPS_VERSION>>@_length);
memcpy(buff.data(),@<<CAPS_VERSION>>@_data,@<<CAPS_VERSION>>@_length);
auto file = TFile::Create(ls);
file->Load(&gc, &ms);
env->LoadFile(&gc,file);
}
if(env->HasVariable("WebAppMain"))
{
Args args(argc, argv);
int port = 4206;
for(auto& item : args.options)
{
if(item.first == "port")
{
port = std::stoi(item.second);
}
}
TList* args2 = TList::Create(ls);
args2->Add(exePath.ToString());
for(auto& item : args.positional)
{
args2->Add(item);
}
auto res = env->CallFunction(ls, "WebAppMain", {args2});
TObjectHttpServer http(&gc, res);
Tesses::Framework::Http::HttpServer svr(port,http,false);
svr.StartAccepting();
TF_RunEventLoop();
TDictionary* _dict;
if(GetObjectHeap(res,_dict))
{
_dict->CallMethod(ls,"Close",{});
}
TF_Quit();
}
else {
TList* args = TList::Create(ls);
args->Add(exePath.ToString());
for(int arg=1;arg<argc;arg++)
args->Add(argv[arg]);
auto res = env->CallFunction(ls,"main",{args});
int64_t iresult;
if(GetObject(res,iresult))
return (int)iresult;
}
return 0;
}