blob: 46b61c66209aa439adf96c69f056f9caa0d051fa [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package builder
import (
"path/filepath"
"mynewt.apache.org/newt/newt/interfaces"
"mynewt.apache.org/newt/newt/pkg"
"mynewt.apache.org/newt/newt/project"
"mynewt.apache.org/newt/util"
)
const BUILD_NAME_BOOT = "app/@mcuboot"
const BUILD_NAME_APP = "app"
const BUILD_NAME_LOADER = "loader"
func ProjectRoot() string {
return project.GetProject().Path()
}
func BinRoot() string {
return project.GetProject().Path() + "/bin"
}
func TargetBinDir(targetName string) string {
return BinRoot() + "/" + targetName
}
func GeneratedBaseDir(targetName string) string {
return BinRoot() + "/" + targetName + "/generated"
}
func GeneratedSrcDir(targetName string) string {
return GeneratedBaseDir(targetName) + "/src"
}
func GeneratedIncludeDir(targetName string) string {
return GeneratedBaseDir(targetName) + "/include"
}
func GeneratedBinDir(targetName string) string {
return GeneratedBaseDir(targetName) + "/bin"
}
func SysinitArchivePath(targetName string) string {
return GeneratedBinDir(targetName) + "/sysinit.a"
}
func UserBaseDir(targetName string) string {
return BinRoot() + "/" + targetName + "/user"
}
func UserPreBuildDir(targetName string) string {
return UserBaseDir(targetName) + "/pre_build"
}
func UserPreLinkDir(targetName string) string {
return UserBaseDir(targetName) + "/pre_link"
}
func UserPreBuildSrcDir(targetName string) string {
return UserPreBuildDir(targetName) + "/src"
}
func UserPreBuildIncludeDir(targetName string) string {
return UserPreBuildDir(targetName) + "/include"
}
func UserPreLinkSrcDir(targetName string) string {
return UserPreLinkDir(targetName) + "/src"
}
func UserTempSrcDir(tempDir string) string {
return tempDir + "/src"
}
func UserTempIncludeDir(tempDir string) string {
return tempDir + "/include"
}
func PkgSyscfgPath(pkgPath string) string {
return pkgPath + "/" + pkg.SYSCFG_YAML_FILENAME
}
func BinDir(targetName string, buildName string) string {
return BinRoot() + "/" + targetName + "/" + buildName
}
func FileBinDir(targetName string, buildName string, pkgName string) string {
return BinDir(targetName, buildName) + "/" + pkgName
}
func PkgBinDir(targetName string, buildName string, pkgName string,
pkgType interfaces.PackageType) string {
switch pkgType {
case pkg.PACKAGE_TYPE_GENERATED:
return GeneratedBinDir(targetName)
default:
return FileBinDir(targetName, buildName, pkgName)
}
}
func ArchivePath(targetName string, buildName string, pkgName string,
pkgType interfaces.PackageType) string {
filename := util.FilenameFromPath(pkgName) + ".a"
return PkgBinDir(targetName, buildName, pkgName, pkgType) + "/" + filename
}
func AppElfPath(targetName string, buildName string, appName string) string {
return FileBinDir(targetName, buildName, appName) + "/" +
filepath.Base(appName) + ".elf"
}
func AppBinPath(targetName string, buildName string, appName string) string {
return AppElfPath(targetName, buildName, appName) + ".bin"
}
func TestExePath(targetName string, buildName string, pkgName string,
pkgType interfaces.PackageType) string {
return PkgBinDir(targetName, buildName, pkgName, pkgType) + "/" +
TestTargetName(pkgName) + ".elf"
}
func ManifestPath(targetName string, buildName string, pkgName string) string {
return FileBinDir(targetName, buildName, pkgName) + "/manifest.json"
}
func AppImgPath(targetName string, buildName string, appName string) string {
return FileBinDir(targetName, buildName, appName) + "/" +
filepath.Base(appName) + ".img"
}
func MfgBinDir(mfgPkgName string) string {
return BinRoot() + "/" + mfgPkgName
}
func MfgBootDir(mfgPkgName string) string {
return MfgBinDir(mfgPkgName) + "/bootloader"
}
func (b *Builder) BinDir() string {
return BinDir(b.targetPkg.rpkg.Lpkg.FullName(), b.buildName)
}
func (b *Builder) FileBinDir(pkgName string) string {
return FileBinDir(b.targetPkg.rpkg.Lpkg.FullName(), b.buildName, pkgName)
}
func (b *Builder) PkgBinDir(bpkg *BuildPackage) string {
return PkgBinDir(b.targetPkg.rpkg.Lpkg.FullName(), b.buildName,
bpkg.rpkg.Lpkg.FullName(), bpkg.rpkg.Lpkg.Type())
}
// Generates the path+filename of the specified package's .a file.
func (b *Builder) ArchivePath(bpkg *BuildPackage) string {
return ArchivePath(b.targetPkg.rpkg.Lpkg.FullName(), b.buildName,
bpkg.rpkg.Lpkg.FullName(), bpkg.rpkg.Lpkg.Type())
}
func (b *Builder) AppTentativeElfPath() string {
return b.PkgBinDir(b.appPkg) + "/" +
filepath.Base(b.appPkg.rpkg.Lpkg.FullName()) + "_tmp.elf"
}
func (b *Builder) AppElfPath() string {
return AppElfPath(b.targetPkg.rpkg.Lpkg.FullName(), b.buildName,
b.appPkg.rpkg.Lpkg.FullName())
}
func (b *Builder) AppLinkerElfPath() string {
return b.PkgBinDir(b.appPkg) + "/" +
filepath.Base(b.appPkg.rpkg.Lpkg.FullName()) + "linker.elf"
}
func (b *Builder) AppImgPath() string {
return b.PkgBinDir(b.appPkg) + "/" +
filepath.Base(b.appPkg.rpkg.Lpkg.FullName()) + ".img"
}
func (b *Builder) AppHexPath() string {
return b.PkgBinDir(b.appPkg) + "/" +
filepath.Base(b.appPkg.rpkg.Lpkg.FullName()) + ".hex"
}
func (b *Builder) AppMapPath() string {
return b.AppElfPath() + ".map"
}
func (b *Builder) AppBinPath() string {
return b.AppElfPath() + ".bin"
}
func (b *Builder) AppPath() string {
return b.PkgBinDir(b.appPkg) + "/"
}
func (b *Builder) TestExePath() string {
return TestExePath(b.targetPkg.rpkg.Lpkg.FullName(), b.buildName,
b.testPkg.rpkg.Lpkg.FullName(), b.testPkg.rpkg.Lpkg.Type())
}
func (b *Builder) ManifestPath() string {
return ManifestPath(b.targetPkg.rpkg.Lpkg.FullName(), b.buildName,
b.appPkg.rpkg.Lpkg.FullName())
}
func (b *Builder) AppBinBasePath() string {
return b.PkgBinDir(b.appPkg) + "/" +
filepath.Base(b.appPkg.rpkg.Lpkg.FullName())
}
func (b *Builder) CompileCmdsPath() string {
// The path depends on whether we are building an app or running a test.
var basePath string
if b.appPkg != nil {
basePath = filepath.Dir(b.AppElfPath())
} else {
basePath = filepath.Dir(b.TestExePath())
}
return basePath + "/compile_commands.json"
}