//-------------------------------------------------------------------------------------------------- static legato::Executable& ConstructObjectModel ( void ) //-------------------------------------------------------------------------------------------------- { bool errorFound = false; // Create a new Executable object. legato::Executable& exe = App.CreateExecutable(ExePath); if (BuildParams.IsVerbose()) { std::cout << "Making executable '" << exe.OutputPath() << "'" << std::endl << "\t(using exe name '" << exe.CName() << "')" << std::endl << "\tcontaining:" << std::endl; } // For each item of content, we have to figure out what type of content it is and // handle it accordingly. for (auto contentName: ContentNames) { const char* contentType; if (legato::IsCSource(contentName)) { contentType = "C source code"; // Add the source code file to the default component. exe.AddCSourceFile(legato::FindFile(contentName, BuildParams.ComponentDirs())); } else if (legato::IsLibrary(contentName)) { contentType = "library"; // Add the library file to the list of libraries to be linked with the default // component. exe.AddLibrary(contentName); } else if (legato::IsComponent(contentName, BuildParams.ComponentDirs())) { contentType = "component"; // Find the component and add it to the executable's list of component instances. // NOTE: For now, we only support one instance of a component per executable, and it is // identified by the file system path to that component (relative to a directory // somewhere in the component search path). legato::Component& component = GetComponent(contentName); exe.AddComponentInstance(legato::ComponentInstance(component)); } else { contentType = "** unknown **"; std::cerr << "** ERROR: Couldn't identify content item '" << contentName << "'." << std::endl; errorFound = true; } if (BuildParams.IsVerbose()) { std::cout << "\t\t'" << contentName << "' (" << contentType << ")" << std::endl; } } if (errorFound) { throw std::runtime_error("Unable to identify requested content."); } return exe; }