func (s *HardwareLoader) Run(context map[string]interface{}) error { mainHardwarePlatformTxt := make(map[string]string) packages := make(map[string]*types.Package) folders := context[constants.CTX_HARDWARE_FOLDERS].([]string) folders, err := utils.AbsolutizePaths(folders) if err != nil { return utils.WrapError(err) } for _, folder := range folders { stat, err := os.Stat(folder) if err != nil { return utils.WrapError(err) } if !stat.IsDir() { return utils.Errorf(context, constants.MSG_MUST_BE_A_FOLDER, folder) } if len(mainHardwarePlatformTxt) == 0 { mainHardwarePlatformTxt, err = props.SafeLoad(filepath.Join(folder, constants.FILE_PLATFORM_TXT)) if err != nil { return utils.WrapError(err) } } hardwarePlatformTxt, err := props.SafeLoad(filepath.Join(folder, constants.FILE_PLATFORM_TXT)) if err != nil { return utils.WrapError(err) } hardwarePlatformTxt = utils.MergeMapsOfStrings(make(map[string]string), mainHardwarePlatformTxt, hardwarePlatformTxt) subfolders, err := utils.ReadDirFiltered(folder, utils.FilterDirs) if err != nil { return utils.WrapError(err) } subfolders = utils.FilterOutFoldersByNames(subfolders, constants.FOLDER_TOOLS) for _, subfolder := range subfolders { subfolderPath := filepath.Join(folder, subfolder.Name()) packageId := subfolder.Name() if _, err := os.Stat(filepath.Join(subfolderPath, constants.FOLDER_HARDWARE)); err == nil { subfolderPath = filepath.Join(subfolderPath, constants.FOLDER_HARDWARE) } targetPackage := getOrCreatePackage(packages, packageId) err = loadPackage(targetPackage, subfolderPath, hardwarePlatformTxt) if err != nil { return utils.WrapError(err) } packages[packageId] = targetPackage } } context[constants.CTX_HARDWARE] = packages return nil }
func (s *HardwareLoader) Run(ctx *types.Context) error { logger := ctx.GetLogger() packages := &types.Packages{} packages.Packages = make(map[string]*types.Package) packages.Properties = make(map[string]string) folders := ctx.HardwareFolders folders, err := utils.AbsolutizePaths(folders) if err != nil { return i18n.WrapError(err) } for _, folder := range folders { stat, err := os.Stat(folder) if err != nil { return i18n.WrapError(err) } if !stat.IsDir() { return i18n.ErrorfWithLogger(logger, constants.MSG_MUST_BE_A_FOLDER, folder) } hardwarePlatformTxt, err := props.SafeLoad(filepath.Join(folder, constants.FILE_PLATFORM_TXT), logger) if err != nil { return i18n.WrapError(err) } packages.Properties.Merge(hardwarePlatformTxt) subfolders, err := utils.ReadDirFiltered(folder, utils.FilterDirs) if err != nil { return i18n.WrapError(err) } subfolders = utils.FilterOutFoldersByNames(subfolders, constants.FOLDER_TOOLS) for _, subfolder := range subfolders { subfolderPath := filepath.Join(folder, subfolder.Name()) packageId := subfolder.Name() if _, err := os.Stat(filepath.Join(subfolderPath, constants.FOLDER_HARDWARE)); err == nil { subfolderPath = filepath.Join(subfolderPath, constants.FOLDER_HARDWARE) } targetPackage := getOrCreatePackage(packages, packageId) err = loadPackage(targetPackage, subfolderPath, logger) if err != nil { return i18n.WrapError(err) } packages.Packages[packageId] = targetPackage } } ctx.Hardware = packages return nil }
func (s *LibrariesLoader) Run(context map[string]interface{}) error { sortedLibrariesFolders := []string{} builtInLibrariesFolders := []string{} if utils.MapHas(context, constants.CTX_BUILT_IN_LIBRARIES_FOLDERS) { builtInLibrariesFolders = context[constants.CTX_BUILT_IN_LIBRARIES_FOLDERS].([]string) } builtInLibrariesFolders, err := utils.AbsolutizePaths(builtInLibrariesFolders) if err != nil { return utils.WrapError(err) } sortedLibrariesFolders = utils.AppendIfNotPresent(sortedLibrariesFolders, builtInLibrariesFolders...) platform := context[constants.CTX_TARGET_PLATFORM].(*types.Platform) debugLevel := utils.DebugLevel(context) logger := context[constants.CTX_LOGGER].(i18n.Logger) actualPlatform := context[constants.CTX_ACTUAL_PLATFORM].(*types.Platform) if actualPlatform != platform { sortedLibrariesFolders = appendPathToLibrariesFolders(sortedLibrariesFolders, filepath.Join(actualPlatform.Folder, constants.FOLDER_LIBRARIES)) } sortedLibrariesFolders = appendPathToLibrariesFolders(sortedLibrariesFolders, filepath.Join(platform.Folder, constants.FOLDER_LIBRARIES)) librariesFolders := []string{} if utils.MapHas(context, constants.CTX_OTHER_LIBRARIES_FOLDERS) { librariesFolders = context[constants.CTX_OTHER_LIBRARIES_FOLDERS].([]string) } librariesFolders, err = utils.AbsolutizePaths(librariesFolders) if err != nil { return utils.WrapError(err) } sortedLibrariesFolders = utils.AppendIfNotPresent(sortedLibrariesFolders, librariesFolders...) context[constants.CTX_LIBRARIES_FOLDERS] = sortedLibrariesFolders var libraries []*types.Library for _, libraryFolder := range sortedLibrariesFolders { subFolders, err := utils.ReadDirFiltered(libraryFolder, utils.FilterDirs) if err != nil { return utils.WrapError(err) } for _, subFolder := range subFolders { library, err := makeLibrary(filepath.Join(libraryFolder, subFolder.Name()), debugLevel, logger) if err != nil { return utils.WrapError(err) } libraries = append(libraries, library) } } context[constants.CTX_LIBRARIES] = libraries headerToLibraries := make(map[string][]*types.Library) for _, library := range libraries { headers, err := utils.ReadDirFiltered(library.SrcFolder, utils.FilterFilesWithExtension(".h")) if err != nil { return utils.WrapError(err) } for _, header := range headers { headerFileName := header.Name() headerToLibraries[headerFileName] = append(headerToLibraries[headerFileName], library) } } context[constants.CTX_HEADER_TO_LIBRARIES] = headerToLibraries return nil }
func (s *LibrariesLoader) Run(ctx *types.Context) error { builtInLibrariesFolders := ctx.BuiltInLibrariesFolders builtInLibrariesFolders, err := utils.AbsolutizePaths(builtInLibrariesFolders) if err != nil { return i18n.WrapError(err) } sortedLibrariesFolders := []string{} sortedLibrariesFolders = utils.AppendIfNotPresent(sortedLibrariesFolders, builtInLibrariesFolders...) platform := ctx.TargetPlatform debugLevel := ctx.DebugLevel logger := ctx.GetLogger() actualPlatform := ctx.ActualPlatform if actualPlatform != platform { sortedLibrariesFolders = appendPathToLibrariesFolders(sortedLibrariesFolders, filepath.Join(actualPlatform.Folder, constants.FOLDER_LIBRARIES)) } sortedLibrariesFolders = appendPathToLibrariesFolders(sortedLibrariesFolders, filepath.Join(platform.Folder, constants.FOLDER_LIBRARIES)) librariesFolders := ctx.OtherLibrariesFolders librariesFolders, err = utils.AbsolutizePaths(librariesFolders) if err != nil { return i18n.WrapError(err) } sortedLibrariesFolders = utils.AppendIfNotPresent(sortedLibrariesFolders, librariesFolders...) ctx.LibrariesFolders = sortedLibrariesFolders var libraries []*types.Library for _, libraryFolder := range sortedLibrariesFolders { subFolders, err := utils.ReadDirFiltered(libraryFolder, utils.FilterDirs) if err != nil { return i18n.WrapError(err) } for _, subFolder := range subFolders { library, err := makeLibrary(filepath.Join(libraryFolder, subFolder.Name()), debugLevel, logger) if err != nil { return i18n.WrapError(err) } libraries = append(libraries, library) } } ctx.Libraries = libraries headerToLibraries := make(map[string][]*types.Library) for _, library := range libraries { headers, err := utils.ReadDirFiltered(library.SrcFolder, utils.FilterFilesWithExtensions(".h", ".hpp", ".hh")) if err != nil { return i18n.WrapError(err) } for _, header := range headers { headerFileName := header.Name() headerToLibraries[headerFileName] = append(headerToLibraries[headerFileName], library) } } ctx.HeaderToLibraries = headerToLibraries return nil }