diff --git a/CMakeLists.txt b/CMakeLists.txt index 60347bd..d5f60bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -264,6 +264,10 @@ if (APPLE) else() set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") endif() +add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) + add_executable(crossc src/crosslangcompiler.cpp ${CROSSLANG_WIN32_EXE_SRC}) add_executable(crossvm src/crosslangvm.cpp ${CROSSLANG_WIN32_EXE_SRC}) add_executable(crossint src/crosslanginterperter.cpp ${CROSSLANG_WIN32_EXE_SRC}) @@ -281,6 +285,10 @@ target_link_libraries(crossdump PUBLIC crosslang_shared) target_link_libraries(crosslang PUBLIC crosslang_shared) target_link_libraries(crossarchiveextract PUBLIC crosslang_shared) target_link_libraries(crossarchivecreate PUBLIC crosslang_shared) +target_link_libraries(crossasm PUBLIC crosslang_shared) +target_link_libraries(crossdisasm PUBLIC crosslang_shared) +target_link_libraries(crossmerge PUBLIC crosslang_shared) + if(NOT WIN32) target_link_libraries(crossthumbnailer PUBLIC crosslang_shared) endif() @@ -293,6 +301,10 @@ add_executable(crossdump src/crosslangdump.cpp ${CROSSLANG_WIN32_EXE_SRC}) add_executable(crosslang src/crosslang.cpp ${CROSSLANG_WIN32_EXE_SRC}) add_executable(crossarchiveextract src/crossarchiveextract.cpp ${CROSSLANG_WIN32_EXE_SRC}) add_executable(crossarchivecreate src/crossarchivecreate.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_WIN32_EXE_SRC}) + if(NOT WIN32) add_executable(crossthumbnailer src/crossthumbnailer.cpp ${CROSSLANG_WIN32_EXE_SRC}) endif() @@ -302,7 +314,10 @@ target_link_libraries(crossint PUBLIC crosslang_static) target_link_libraries(crossdump PUBLIC crosslang_static) target_link_libraries(crosslang PUBLIC crosslang_static) target_link_libraries(crossarchiveextract PUBLIC crosslang_static) -target_link_libraries(crossarchivecreate PUBLIC crosslang_static) +target_link_libraries(crossmerge PUBLIC crosslang_static) +target_link_libraries(crossasm PUBLIC crosslang_static) +target_link_libraries(crossdisasm PUBLIC crosslang_static) + if(NOT WIN32) target_link_libraries(crossthumbnailer PUBLIC crosslang_static) endif() @@ -314,6 +329,10 @@ add_executable(crossdump src/crosslangdump.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_W add_executable(crosslang src/crosslang.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) add_executable(crossarchiveextract src/crossarchiveextract.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) add_executable(crossarchivecreate src/crossarchivecreate.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) + if(NOT WIN32) add_executable(crossthumbnailer src/crossthumbnailer.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) endif() @@ -324,6 +343,10 @@ CROSSLANG_LINK_DEPS(crosslang) CROSSLANG_LINK_DEPS(crossdump) CROSSLANG_LINK_DEPS(crossarchiveextract) CROSSLANG_LINK_DEPS(crossarchivecreate) +CROSSLANG_LINK_DEPS(crossmerge) +CROSSLANG_LINK_DEPS(crossdisasm) +CROSSLANG_LINK_DEPS(crossasm) + if(NOT WIN32) CROSSLANG_LINK_DEPS(crossthumbnailer) endif() @@ -335,6 +358,9 @@ target_link_libraries(crosslang PUBLIC tessesframework) target_link_libraries(crossdump PUBLIC tessesframework) target_link_libraries(crossarchiveextract PUBLIC tessesframework) target_link_libraries(crossarchivecreate PUBLIC tessesframework) +target_link_libraries(crossasm PUBLIC tessesframework) +target_link_libraries(crossdisasm PUBLIC tessesframework) +target_link_libraries(crossmerge PUBLIC tessesframework) if(NOT WIN32) target_link_libraries(crossthumbnailer PUBLIC tessesframework) endif() @@ -346,6 +372,9 @@ target_link_libraries(crosslang PUBLIC TessesFramework::tessesframework) target_link_libraries(crossdump PUBLIC TessesFramework::tessesframework) target_link_libraries(crossarchiveextract PUBLIC TessesFramework::tessesframework) target_link_libraries(crossarchivecreate PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossasm PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossdisasm PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossmerge PUBLIC TessesFramework::tessesframework) if(NOT WIN32) target_link_libraries(crossthumbnailer PUBLIC TessesFramework::tessesframework) endif() @@ -358,6 +387,9 @@ install(TARGETS crossdump DESTINATION bin) install(TARGETS crosslang DESTINATION bin) install(TARGETS crossarchiveextract DESTINATION bin) install(TARGETS crossarchivecreate DESTINATION bin) +install(TARGETS crossasm DESTINATION bin) +install(TARGETS crossdisasm DESTINATION bin) +install(TARGETS crossmerge DESTINATION bin) if(NOT WIN32) install(TARGETS crossthumbnailer DESTINATION bin) configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/crossvm-binfmt.conf.in "${CMAKE_CURRENT_BINARY_DIR}/crossvm-binfmt.conf" diff --git a/README.md b/README.md index 71804b2..7ea4f71 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,13 @@ Tesses Cross Language ![CrossImage](crosslang.png) -> :warning: **NOT READY FOR PRODUCTION (THERE WILL BE BREAKING CHANGES)** +[WebSite](https://crosslang.tesseslanguage.com/) ## What is required to build this project - [TessesFramework](https://onedev.site.tesses.net/tesses-framework) (if you turn CROSSLANG_FETCHCONTENT off otherwise it will be grabbed automaticly) - CMake -## What libraries have I embeded from other people -- [Sqlite](https://www.sqlite.org/) (in folder src/sqlite also uses demo VFS (at least on Wii)) -- [Sago's platform_folders](https://github.com/sago007/PlatformFolders) (in folder src/sago) -- [subprocess](https://github.com/sheredom/subprocess.h) (as file src/runtime_methods/subprocess.h) + ## Use in docker (use my container) ```bash sudo docker pull -t onedev.site.tesses.net/crosslang/crosslang:latest @@ -55,9 +52,6 @@ make -j`nproc` sudo make install ``` -## Run these commands to install crosslang (without plugin support) -Or use binaries from [here](https://crosslang.tesseslanguage.com/download/) - ```bash git clone https://onedev.site.tesses.net/CrossLang cd CrossLang diff --git a/src/crossasmcli.cpp b/src/crossasmcli.cpp new file mode 100644 index 0000000..b5eaa60 --- /dev/null +++ b/src/crossasmcli.cpp @@ -0,0 +1,21 @@ +#include "CrossLang.hpp" + +int main(int argc, char** argv) +{ + using namespace Tesses::Framework; + using namespace Tesses::Framework::Streams; + using namespace Tesses::Framework::Filesystem; + using namespace Tesses::CrossLang; + if(argc > 1 && strcmp(argv[1],"--help")) + { + std::cout << "Run this command in directory you want to assemble (with the crossasm.json)" << std::endl; + return 0; + } + auto curdir = VFSPath::GetAbsoluteCurrentDirectory(); + SubdirFilesystem sdfs(&LocalFS,curdir,false); + auto path = Assemble(&sdfs); + path.relative = true; + std::cout << "Output: " << (curdir / path).ToString() << std::endl; + + return 0; +} \ No newline at end of file diff --git a/src/crossdisasmcli.cpp b/src/crossdisasmcli.cpp new file mode 100644 index 0000000..05f88d9 --- /dev/null +++ b/src/crossdisasmcli.cpp @@ -0,0 +1,60 @@ +#include "CrossLang.hpp" +void help(char* program) +{ + std::cout << "USAGE: " << program << " [flags] FILE.CRVM" << std::endl; + std::cout << "USAGE: " << program << " [flags] FILE.CRVM DIR" << std::endl; + std::cout << "Flags:" << std::endl; + std::cout << "--no-json\tNo json" << std::endl; + std::cout << "--no-resources\nNo resources" << std::endl; + + exit(0); +} +int main(int argc, char** argv) +{ + using namespace Tesses::Framework; + using namespace Tesses::Framework::Streams; + using namespace Tesses::Framework::Filesystem; + using namespace Tesses::CrossLang; + + std::string file; + Tesses::Framework::Filesystem::VFSPath path = VFSPath::GetAbsoluteCurrentDirectory(); + int curPos = 0; + bool json=true; + bool resources = true; + for(int i = 1; i < argc; i++) + { + if(strcmp(argv[i],"--no-json") == 0) + { + json = false; + } + else if(strcmp(argv[i],"--no-resources") == 0) + { + resources = false; + } + else if(strcmp(argv[i],"--help") == 0) + { + help(argv[0]); + } + else { + if(curPos == 0) + { + file = argv[i]; + curPos++; + } + else if(curPos == 1) + { + path = LocalFS.SystemToVFSPath(argv[i]); + } + } + } + if(file.empty()) + { + help(argv[0]); + } + auto strm = LocalFS.OpenFile(file,"rb"); + SubdirFilesystem sdir(&LocalFS,path,false); + if(strm->CanRead()) + Disassemble(strm, &sdir,json,resources); + delete strm; + return 0; +} \ No newline at end of file diff --git a/src/crossmergecli.cpp b/src/crossmergecli.cpp new file mode 100644 index 0000000..1b47634 --- /dev/null +++ b/src/crossmergecli.cpp @@ -0,0 +1,43 @@ +#include "CrossLang.hpp" +void help(char* program) +{ + std::cout << "USAGE: " << program << " FILE.CRVM DEST.CRVM" << std::endl; + + exit(0); +} +int main(int argc, char** argv) +{ + using namespace Tesses::Framework; + using namespace Tesses::Framework::Streams; + using namespace Tesses::Framework::Filesystem; + using namespace Tesses::CrossLang; + + if(argc < 3) + { + help(argv[0]); + } + + std::string src=argv[1]; + std::string dest=argv[2]; + + + + VFSPath srcF = src; + VFSPath destF = dest; + srcF.MakeAbsolute(); + destF.MakeAbsolute(); + + + SubdirFilesystem sdir(&LocalFS,srcF.GetParent(),false); + SubdirFilesystem ddir(&LocalFS,destF+"_tmp",false); + + + auto outpath = Merge(&sdir,"/"+srcF.GetFileName(), &ddir); + outpath.relative=true; + outpath = (destF+"_tmp") / outpath; + LocalFS.MoveFile(outpath,destF); + LocalFS.DeleteDirectoryRecurse(destF+"_tmp"); + + + return 0; +} \ No newline at end of file