예제 #1
0
//--------------------------------------------------------------------------------------------------
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";
}
예제 #2
0
//--------------------------------------------------------------------------------------------------
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);
}
예제 #3
0
//--------------------------------------------------------------------------------------------------
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";
}