Ejemplo n.º 1
0
    def __init__(self, log: Log, configBuildDir: str, configIgnoreNotSupported: bool, toolConfig: ToolConfig, platformName: str,
                 hostPlatformName: str, basicBuildConfig: BasicBuildConfig, generatorInfo: GeneratorInfo, genFiles: List[XmlGenFile],
                 packageManagerFilter: PackageManagerFilter, writeGraph: bool) -> None:
        super().__init__()

        self.__GeneratorInfo = generatorInfo
        self.__ProjectContextCache = ProjectContextCache()

        createContext = PackageManager.__CreateFactoryCreateContext(log, toolConfig, generatorInfo)

        # Handle flavor package resolving.
        unresolvedInput = self.__CreateInitialUnresolvedPackageList(configIgnoreNotSupported, toolConfig, platformName, hostPlatformName, genFiles,
                                                                    createContext)
        unresolvedPackages = PackageManager2.Resolve2(basicBuildConfig, createContext, unresolvedInput, writeGraph)
        unresolvedPackages = PackageManager.__Filter(log, unresolvedPackages, packageManagerFilter)

        uniqueDict = {}  # type: Dict[PackageInstanceName, Package]
        for unresolvedPackage in unresolvedPackages:
            if unresolvedPackage.SourcePackage.NameInfo.FullName not in uniqueDict:
                uniqueDict[unresolvedPackage.SourcePackage.NameInfo.FullName] = Package(log, configBuildDir, unresolvedPackage)
            else:
                raise InternalErrorException("Package has been defined multiple times, this ought to have been caught earlier")

        self.__unresolvedPackages = unresolvedPackages
        self.OriginalPackageDict = uniqueDict
        self.Packages = list(uniqueDict.values())  # type: List[Package]

        # Resolve dependency package names -> actual package objects
        for package in self.Packages:
            self.__ResolvePackageDependencies(package, self.OriginalPackageDict)
Ejemplo n.º 2
0
 def __ResolvePackageDependencies(self, platformName: str, package: Package) -> None:
     for dep in package.GetDirectDependencies(platformName):
         if not dep.Name in self.OriginalPackageDict:
             raise DependencyNotFoundException(package.Name, dep.Name)
         elif package.Type != PackageType.TopLevel and not self.OriginalPackageDict[dep.Name].AllowDependencyOnThis:
             raise InvalidDependencyException(package.Name, dep.Name)
         else:
             resolvedDep = PackageDependency(self.OriginalPackageDict[dep.Name], dep.Access)
             package.ResolvedDirectDependencies.append(resolvedDep)
Ejemplo n.º 3
0
    def CreatePackage(self, log: Log, configBuildDir: str, configIgnoreNotSupported: bool, toolConfig: ToolConfig,
                      platformName: str, hostPlatformName: str, genFile: XmlGenFile, insertAtFront: bool = False) -> Package:

        filePackageInstanceName = PackageInstanceName(genFile.Name)
        if filePackageInstanceName in self.OriginalPackageDict:
            raise UsageErrorException("Package '{0}' already exist".format(filePackageInstanceName))

        createContext = PackageManager.__CreateFactoryCreateContext(log, toolConfig, self.__GeneratorInfo)
        packageProjectContext = self.__FindProjectContext(toolConfig, genFile)
        processedPackage = PackageManager.__AllocatePreprocessedPackage(createContext, packageProjectContext, configIgnoreNotSupported, platformName,
                                                                        hostPlatformName, genFile, True)
        packageLookupDict = PreResolver.CreatePackageLookupDict(self.__unresolvedPackages)
        preResolvedPackageResult = PreResolver.PreResolvePackage(log, packageLookupDict, processedPackage, 0xffffffff)
        package = Package(log, configBuildDir, preResolvedPackageResult)

        self.__ResolvePackageDependencies(package, self.OriginalPackageDict)
        if not insertAtFront:
            self.Packages.append(package)
        else:
            self.Packages.insert(0, package)
        self.OriginalPackageDict[package.NameInfo.FullName] = package
        return package
Ejemplo n.º 4
0
def _AllocatePackage(config: Config, generatorInfo: GeneratorInfo, genFile: XmlGenFile, packageProjectContext: PackageProjectContext) -> Package:
    return Package(config, generatorInfo, packageProjectContext, genFile)
Ejemplo n.º 5
0
def _AllocatePackage(config: Config, genFile: XmlGenFile) -> Package:
    return Package(config, genFile)
Ejemplo n.º 6
0
    def __GenerateCMakeFile(
            self, config: Config, package: Package, platformName: str,
            template: CMakeGeneratorUtil.CodeTemplateCMake) -> None:
        if package.IsVirtual:
            return
        if package.AbsolutePath is None or package.ResolvedBuildPath is None:
            raise Exception("Invalid package")

        packageName = CMakeGeneratorUtil.GetPackageName(package)

        addSubDirectoriesDirectDependencies = ""
        #findExternalDependencies = ""
        if package.Type == PackageType.TopLevel:
            package.AbsolutePath = config.SDKPath
            packageName = "DemoFrameworkTopLevel"
            addSubDirectoriesDirectDependencies = self.__BuildAddSubDirectoriesForDirectDependencies(
                config, package, template)
            #findExternalDependencies = self.__BuildFindExternalDependencies(config, package, template)

        aliasPackageName = CMakeGeneratorUtil.GetAliasName(packageName)

        targetIncludeDirectories = CMakeGeneratorUtil.BuildTargetIncludeDirectories(
            config, package, template.PackageTargetIncludeDirectories,
            template.PackageTargetIncludeDirEntry)

        includeFiles = self.__Join(package.ResolvedBuildAllIncludeFiles)
        sourceFiles = self.__Join(package.ResolvedBuildSourceFiles)

        linkLibrariesDirectDependencies = CMakeGeneratorUtil.BuildTargetLinkLibrariesForDirectDependencies(
            config, package, template.PackageDependencyTargetLinkLibraries)
        directDefinitions = CMakeGeneratorUtil.BuildDirectDefinitions(
            config, package,
            template.PackageDependencyTargetCompileDefinitions)
        findDirectExternalDependencies = CMakeGeneratorUtil.BuildFindDirectExternalDependencies(
            config, package, template.PackageDependencyFindPackage)

        buildCMakeFile = template.Master
        buildCMakeFile = buildCMakeFile.replace("##PACKAGE_INCLUDE_FILES##",
                                                includeFiles)
        buildCMakeFile = buildCMakeFile.replace("##PACKAGE_SOURCE_FILES##",
                                                sourceFiles)
        buildCMakeFile = buildCMakeFile.replace(
            "##TARGET_INCLUDE_DIRECTORIES##", targetIncludeDirectories)
        buildCMakeFile = buildCMakeFile.replace(
            "##PACKAGE_DIRECT_DEPENDENCIES_ADD_SUBDIRECTORIES##",
            addSubDirectoriesDirectDependencies)
        buildCMakeFile = buildCMakeFile.replace(
            "##PACKAGE_DIRECT_DEPENDENCIES_TARGET_LINK_LIBRARIES##",
            linkLibrariesDirectDependencies)
        buildCMakeFile = buildCMakeFile.replace(
            "##PACKAGE_DIRECT_DEPENDENCIES_TARGET_COMPILE_DEFINITIONS##",
            directDefinitions)
        buildCMakeFile = buildCMakeFile.replace(
            "##PACKAGES_FIND_DIRECT_EXTERNAL_DEPENDENCIES##",
            findDirectExternalDependencies)
        buildCMakeFile = buildCMakeFile.replace(
            "##SNIPPET_DEFAULT_TARGET_COMPILE_OPTIONS##",
            template.SnippetDefaultTargetCompileOptions)
        buildCMakeFile = buildCMakeFile.replace(
            "##SNIPPET_DEFAULT_TARGET_COMPILE_FEATURES##",
            template.SnippetDefaultTargetCompileFeatures)
        buildCMakeFile = buildCMakeFile.replace("##PACKAGE_NAME!##",
                                                packageName.upper())
        buildCMakeFile = buildCMakeFile.replace("##PACKAGE_NAME##",
                                                packageName)
        buildCMakeFile = buildCMakeFile.replace("##ALIAS_PACKAGE_NAME##",
                                                aliasPackageName)

        buildBasePath = IOUtil.Join(package.AbsolutePath,
                                    package.ResolvedBuildPath)
        if not config.DisableWrite:
            IOUtil.SafeMakeDirs(buildBasePath)
            dstFileCMakeFile = IOUtil.Join(package.AbsolutePath,
                                           "CMakeLists.txt")
            IOUtil.WriteFileIfChanged(dstFileCMakeFile, buildCMakeFile)
Ejemplo n.º 7
0
 def __ResolvePackageDependencies(self, package: Package, originalPackageDict: Dict[PackageInstanceName, Package]) -> None:
     for dep in package.GetDirectDependencies():
         depPackage = self.__ResolvePackageDependency(package, dep.Name, originalPackageDict)
         package.ResolvedDirectDependencies.append(PackageDependency(depPackage, dep.Access))