XNSim/XNInterfaceGenServer/XNInterfaceGenServer.cpp

100 lines
2.6 KiB
C++
Raw Normal View History

#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<char *>(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;
}