blob: becba56a351f7105e2e5bb48a2233e70c54a013a [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_APP = "app"
const BUILD_NAME_LOADER = "loader"
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 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.Name(), b.buildName)
}
func (b *Builder) FileBinDir(pkgName string) string {
return FileBinDir(b.targetPkg.rpkg.Lpkg.Name(), b.buildName, pkgName)
}
func (b *Builder) PkgBinDir(bpkg *BuildPackage) string {
return PkgBinDir(b.targetPkg.rpkg.Lpkg.Name(), b.buildName, bpkg.rpkg.Lpkg.Name(),
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.Name(), b.buildName, bpkg.rpkg.Lpkg.Name(),
bpkg.rpkg.Lpkg.Type())
}
func (b *Builder) AppTentativeElfPath() string {
return b.PkgBinDir(b.appPkg) + "/" + filepath.Base(b.appPkg.rpkg.Lpkg.Name()) +
"_tmp.elf"
}
func (b *Builder) AppElfPath() string {
return AppElfPath(b.targetPkg.rpkg.Lpkg.Name(), b.buildName,
b.appPkg.rpkg.Lpkg.Name())
}
func (b *Builder) AppLinkerElfPath() string {
return b.PkgBinDir(b.appPkg) + "/" + filepath.Base(b.appPkg.rpkg.Lpkg.Name()) +
"linker.elf"
}
func (b *Builder) AppImgPath() string {
return b.PkgBinDir(b.appPkg) + "/" + filepath.Base(b.appPkg.rpkg.Lpkg.Name()) +
".img"
}
func (b *Builder) AppHexPath() string {
return b.PkgBinDir(b.appPkg) + "/" + filepath.Base(b.appPkg.rpkg.Lpkg.Name()) +
".hex"
}
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.Name(), b.buildName,
b.testPkg.rpkg.Lpkg.Name(), b.testPkg.rpkg.Lpkg.Type())
}
func (b *Builder) ManifestPath() string {
return ManifestPath(b.targetPkg.rpkg.Lpkg.Name(), b.buildName,
b.appPkg.rpkg.Lpkg.Name())
}
func (b *Builder) AppBinBasePath() string {
return b.PkgBinDir(b.appPkg) + "/" +
filepath.Base(b.appPkg.rpkg.Lpkg.Name())
}
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"
}