//-------------------------------------------------------------------------------------------------- static void GenerateCxxSourceBuildStatement ( std::ofstream& script, ///< Build script to write to. const model::Component_t* componentPtr, const std::string& sourceFile, ///< Path to the source file. const std::string& apiHeaders,///< String containing IPC API .h files needed by component. const mk::BuildParams_t& buildParams ) //-------------------------------------------------------------------------------------------------- { // Create the build statement. script << "build " << GetObjectFile(sourceFile) << ":" " CompileCxx " << GetAbsoluteSourcePath(sourceFile, componentPtr); // Add order-only dependencies for all the generated .h files that will be needed by the // component. This ensures that the .c files won't be compiled until all the .h files are // available. if (!apiHeaders.empty()) { script << " || $builddir/" << apiHeaders; } script << "\n"; // Define the cxxFlags variable. script << " cxxFlags = $cxxFlags"; GenerateCandCxxFlags(script, componentPtr, buildParams); script << "\n\n"; }
//-------------------------------------------------------------------------------------------------- void GenerateBuildStatements ( std::ofstream& script, ///< Build script to write the variable definition to. const model::Exe_t* exePtr, const mk::BuildParams_t& buildParams ) //-------------------------------------------------------------------------------------------------- { // Add build statements for all the .o files to be built from C/C++ sources listed on the // mkexe command-line. for (auto sourceFile : exePtr->cSources) { script << "build " << GetObjectFile(sourceFile) << ":" " CompileC " << path::MakeAbsolute(sourceFile) << "\n" " cFlags = $cFlags "; GenerateCandCxxFlags(script, exePtr, buildParams); script << "\n\n"; } for (auto sourceFile : exePtr->cxxSources) { script << "build " << GetObjectFile(sourceFile) << ":" " CompileCxx " << path::MakeAbsolute(sourceFile) << "\n" " cxxFlags = $cxxFlags "; GenerateCandCxxFlags(script, exePtr, buildParams); script << "\n\n"; } // Add a build statement for the executable's _main.c.o file. std::string defaultComponentName = exePtr->name + "_exe"; script << "build $builddir/" << exePtr->mainObjectFile << ":" " CompileC $builddir/" << exePtr->mainCSourceFile << "\n" // Define the component name, log session variable, and log filter variable. " cFlags = $cFlags" " -DLEGATO_COMPONENT=" << defaultComponentName << " -DLE_LOG_SESSION=" << defaultComponentName << "_LogSession" " -DLE_LOG_LEVEL_FILTER_PTR=" << defaultComponentName << "_LogLevelFilterPtr " "\n\n"; // Add a build statement for the executable file. GenerateBuildStatement(script, exePtr, buildParams); }
//-------------------------------------------------------------------------------------------------- void GenerateBuildStatements ( std::ofstream& script, ///< Script to write the build statements to. const model::Component_t* componentPtr, const mk::BuildParams_t& buildParams ) //-------------------------------------------------------------------------------------------------- { // Add the build statement for the component library. GenerateComponentLibBuildStatement(script, componentPtr, buildParams); // Create a set of header files that need to be generated for all IPC API interfaces. std::string interfaceHeaders; GetInterfaceHeaders(interfaceHeaders, componentPtr, buildParams); // Add build statements for all the component's object files. for (auto cSourceFile : componentPtr->cSources) { GenerateCSourceBuildStatement(script, componentPtr, cSourceFile, interfaceHeaders, buildParams); } for (auto cxxSourceFile : componentPtr->cxxSources) { GenerateCxxSourceBuildStatement(script, componentPtr, cxxSourceFile, interfaceHeaders, buildParams); } // Add a build statement for the generated component-specific code. script << "build $builddir/" << componentPtr->workingDir + "/obj/_componentMain.c.o" << ":" " CompileC $builddir/" << componentPtr->workingDir + "/src/_componentMain.c" << "\n"; script << " cFlags = $cFlags"; GenerateCandCxxFlags(script, componentPtr, buildParams); script << "\n\n"; }