Open-CMSIS-Pack/cbuild2cmake

View on GitHub
pkg/maker/maker.go

Summary

Maintainability
A
0 mins
Test Coverage
B
80%
/*
 * Copyright (c) 2024 Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

package maker

import (
    "path"
    "path/filepath"

    semver "github.com/Masterminds/semver/v3"
    utils "github.com/Open-CMSIS-Pack/cbuild/v2/pkg/utils"
)

type Params struct {
    Runner         utils.RunnerInterface
    Options        Options
    InputFile      string
    InstallConfigs utils.Configurations
}

type Options struct {
    Quiet         bool
    Debug         bool
    Verbose       bool
    UseContextSet bool
}

type Vars struct {
    CbuildIndex              CbuildIndex
    CbuildSet                CbuildSet
    Cbuilds                  []Cbuild
    Contexts                 []string
    EnvVars                  utils.EnvVars
    ToolchainConfigs         map[*semver.Version]Toolchain
    RegisteredToolchains     map[*semver.Version]Toolchain
    SelectedToolchainVersion []*semver.Version
    SelectedToolchainConfig  []string
    SolutionTmpDir           string
}

type Maker struct {
    Params
    Vars
}

func (m *Maker) GenerateCMakeLists() error {
    // Update environment variables
    m.EnvVars = utils.UpdateEnvVars(m.InstallConfigs.BinPath, m.InstallConfigs.EtcPath)
    m.EnvVars.PackRoot, _ = filepath.EvalSymlinks(m.EnvVars.PackRoot)
    m.EnvVars.PackRoot = filepath.ToSlash(m.EnvVars.PackRoot)
    m.EnvVars.CompilerRoot, _ = filepath.EvalSymlinks(m.EnvVars.CompilerRoot)
    m.EnvVars.CompilerRoot = filepath.ToSlash(m.EnvVars.CompilerRoot)

    // Parse cbuild files
    err := m.ParseCbuildFiles()
    if err != nil {
        return err
    }

    // Process toolchain
    err = m.ProcessToolchain()
    if err != nil {
        return err
    }

    // Create super project CMakeLists.txt
    if len(m.CbuildIndex.BuildIdx.TmpDir) == 0 {
        m.CbuildIndex.BuildIdx.TmpDir = "tmp"
    }
    m.SolutionTmpDir = path.Join(m.CbuildIndex.BaseDir, m.CbuildIndex.BuildIdx.TmpDir)
    err = m.CreateSuperCMakeLists()
    if err != nil {
        return err
    }

    // Create context specific CMake files
    for index := range m.Cbuilds {
        err = m.CreateContextCMakeLists(index)
        if err != nil {
            return err
        }
    }

    return err
}