// Populates the builder with all the packages that need to be built and // configures each package's build settings. After this function executes, // packages are ready to be built. func (b *Builder) PrepBuild() error { // Populate the full set of packages to be built. for _, bpkg := range b.PkgMap { if err := bpkg.resolveDeps(b.cfg, b.apiMap); err != nil { return err } } b.logDepInfo() // Populate the base set of compiler flags. Flags from the following // packages get applied to every source file: // * target // * app (if present) // * bsp // * compiler (not added here) // // In the case of conflicting flags, the higher priority package's flag // wins. Package priorities are assigned as follows (highest priority // first): // * target // * app (if present) // * bsp // * <library package> // * compiler baseCi := toolchain.NewCompilerInfo() // Target flags. log.Debugf("Generating build flags for target %s", b.targetPkg.FullName()) targetCi, err := b.targetPkg.CompilerInfo(b) if err != nil { return err } baseCi.AddCompilerInfo(targetCi) // App flags. if b.appPkg != nil { log.Debugf("Generating build flags for app %s", b.appPkg.FullName()) appCi, err := b.appPkg.CompilerInfo(b) if err != nil { return err } baseCi.AddCompilerInfo(appCi) } // Bsp flags. log.Debugf("Generating build flags for bsp %s", b.bspPkg.FullName()) bspCi, err := b.bspPkg.CompilerInfo(b) if err != nil { return err } // Define a cpp symbol indicating the BSP architecture, name of the // BSP and app. archName := b.targetBuilder.bspPkg.Arch bspCi.Cflags = append(bspCi.Cflags, "-DARCH_"+util.CIdentifier(archName)) bspCi.Cflags = append(bspCi.Cflags, "-DARCH_NAME=\""+archName+"\"") if b.appPkg != nil { appName := filepath.Base(b.appPkg.Name()) bspCi.Cflags = append(bspCi.Cflags, "-DAPP_"+util.CIdentifier(appName)) bspCi.Cflags = append(bspCi.Cflags, "-DAPP_NAME=\""+appName+"\"") } bspName := filepath.Base(b.bspPkg.Name()) bspCi.Cflags = append(bspCi.Cflags, "-DBSP_"+util.CIdentifier(bspName)) bspCi.Cflags = append(bspCi.Cflags, "-DBSP_NAME=\""+bspName+"\"") baseCi.AddCompilerInfo(bspCi) // All packages have access to the generated code header directory. baseCi.Cflags = append(baseCi.Cflags, "-I"+GeneratedIncludeDir(b.targetPkg.Name())) // Note: Compiler flags get added at the end, after the flags for library // package being built are calculated. b.compilerInfo = baseCi return nil }
func escapeStr(s string) string { return strings.ToUpper(util.CIdentifier(s)) }