#include "XNInterfaceGenServer.h" #include "GetInterfaceData.h" #include "GenIDL.h" #include "FastDDSGen.h" #include "DDSInterfaceGen.h" #include "CMakeListsGen.h" // 全局变量定义 std::string g_tableName; std::string g_configName; char *g_errorMsg; int g_errorMsgSize; AllInterfaceData g_interfaceData; bool XNInterfaceGen_Step1_InitParams(const char *tableName, const int tableNameSize, const char *configName, const int configNameSize, const char *errorMsg, const int errorMsgSize) { g_tableName = std::string(tableName, tableNameSize); g_configName = std::string(configName, configNameSize); g_errorMsg = const_cast(errorMsg); g_errorMsgSize = errorMsgSize; return true; } bool XNInterfaceGen_Step2_GetInterfaceData() { std::string errorMsgStr; g_interfaceData = GetInterfaceData::getInterfaceData(g_tableName, errorMsgStr); if (!errorMsgStr.empty()) { memcpy(g_errorMsg, errorMsgStr.c_str(), g_errorMsgSize); return false; } return true; } bool XNInterfaceGen_Step3_CreateConfigDir() { bool ret = GenIDL::createConfigDirectory(g_configName); if (!ret) { memcpy(g_errorMsg, "Create config directory failed", g_errorMsgSize); return false; } return true; } bool XNInterfaceGen_Step4_GenerateIDL() { bool ret = GenIDL::generateIDL(g_interfaceData); if (!ret) { memcpy(g_errorMsg, "Generate IDL failed", g_errorMsgSize); return false; } return true; } bool XNInterfaceGen_Step5_GenerateFastDDS() { bool ret = FastDDSGen::generateFastDDSCode(GenIDL::getIDLFilePath()); if (!ret) { memcpy(g_errorMsg, "Generate FastDDS code failed", g_errorMsgSize); return false; } return true; } bool XNInterfaceGen_Step6_GenerateDDSInterface() { DDSInterfaceGen ddsInterfaceGen(GenIDL::getIDLFilePath()); bool ret = ddsInterfaceGen.generateDDSInterface(g_interfaceData); if (!ret) { memcpy(g_errorMsg, "Generate DDS interface failed", g_errorMsgSize); return false; } return true; } bool XNInterfaceGen_Step7_GenerateCMakeLists() { bool ret = CMakeListsGen::generateCMakeLists(g_interfaceData, GenIDL::getIDLFilePath(), g_configName); if (!ret) { memcpy(g_errorMsg, "Generate CMakeLists.txt failed", g_errorMsgSize); return false; } return true; } bool XNInterfaceGen_Step8_BuildAndInstall() { std::string idlDirPath = fs::path(GenIDL::getIDLFilePath()).parent_path().string(); std::string buildCmd = "cd " + idlDirPath + " && mkdir -p build && cd build && cmake .. && make && make install"; int buildRet = system(buildCmd.c_str()); if (buildRet != 0) { memcpy(g_errorMsg, "CMake build or install failed", g_errorMsgSize); return false; } return true; }