Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 3 additions & 43 deletions cmd/cbuild2cmake/commands/root_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -305,49 +305,9 @@ set(OUTPUTS_1
err := cmd.Execute()
assert.Nil(err)

// check super CMakeLists contents
content, err := utils.ReadFileContent(testCaseRoot + "/tmp/CMakeLists.txt")
// check golden references
err, mismatch := inittest.CompareFiles(testCaseRoot+"/ref", testCaseRoot+"/tmp")
assert.Nil(err)

content = strings.ReplaceAll(content, "\r\n", "\n")
assert.Contains(content, `
# Execute: project.Release+ARMCM0-Sign_Artifact
set(INPUT
${SOLUTION_ROOT}/script/sign.cmake
${SOLUTION_ROOT}/out/project/ARMCM0/Release/project.axf
)
list(GET INPUT 0 INPUT_0)
set(OUTPUT
${SOLUTION_ROOT}/out/project/ARMCM0/Release/project.axf.signed
)
add_custom_target(project.Release+ARMCM0-Sign_Artifact ALL DEPENDS ${OUTPUT})
add_custom_command(OUTPUT ${OUTPUT} DEPENDS ${INPUT}
COMMAND ${CMAKE_COMMAND} -DINPUT="${INPUT}" -DOUTPUT="${OUTPUT}" -P "${INPUT_0}"
COMMENT project.Release+ARMCM0-Sign_Artifact
)`)
assert.Contains(content, `
# Build dependencies
add_dependencies(project.Debug+ARMCM0-build
Generate_Project_Sources
)
add_dependencies(project.Release+ARMCM0-build
Generate_Project_Sources
)
add_dependencies(Archive_Artifacts
project.Release+ARMCM0-build
project.Release+ARMCM0-Sign_Artifact
)
add_dependencies(project.Release+ARMCM0-executes
Archive_Artifacts
)
add_dependencies(Run_After_Archiving
Archive_Artifacts
)
add_dependencies(project.Release+ARMCM0-Sign_Artifact
project.Release+ARMCM0-build
)
add_dependencies(project.Release+ARMCM0-executes
project.Release+ARMCM0-Sign_Artifact
)`)
assert.False(mismatch)
})
}
47 changes: 40 additions & 7 deletions pkg/maker/buildcontent.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ type CompilerAbstractions struct {

type ScopeMap map[string]map[string][]string
type LanguageMap map[string][]string
type DependenciesMap map[string][]string

var CategoryLanguageMap = map[string]string{
"headerAsm": "ASM",
Expand Down Expand Up @@ -158,6 +159,7 @@ func (m *Maker) AddStepSuffix(name string) string {

func (m *Maker) CMakeTargetAddDependencies(name string, dependencies []string) string {
var content string
dependencies = utils.AppendUniquely(dependencies, m.GetAllRunAlways(name)...)
if len(dependencies) > 0 {
content += "\nadd_dependencies(" + m.AddStepSuffix(name)
for _, dependency := range dependencies {
Expand All @@ -176,22 +178,53 @@ func (m *Maker) BuildDependencies() string {
}
content += m.CMakeTargetAddDependencies(cbuild.Project+cbuild.Configuration, cbuild.DependsOn)
}
var postBuildDependencies = make(DependenciesMap)
for _, item := range m.CbuildIndex.BuildIdx.Executes {
content += m.CMakeTargetAddDependencies(item.Execute, item.DependsOn)
// add executes statement to ${CONTEXT}-executes target of context
// if dependency is a context
for _, dependsOn := range item.DependsOn {
if slices.Contains(m.Contexts, dependsOn) {
content += m.CMakeTargetAddDependencies(dependsOn+"-executes", []string{item.Execute})
}
}
postBuildDependencies = m.GetContextDependencies(item.Execute, item.DependsOn, postBuildDependencies)
}
// add executes statement to ${CONTEXT}-executes target of context
for context, dependencies := range postBuildDependencies {
content += m.CMakeTargetAddDependencies(context+"-executes", dependencies)
}
if len(content) > 0 {
content = "\n\n# Build dependencies" + content
}
return content
}

func (m *Maker) GetContextDependencies(execute string, dependsOn []string, deps DependenciesMap) DependenciesMap {
for _, item := range dependsOn {
if slices.Contains(m.Contexts, item) {
// collect dependency on context (post build step)
deps[item] = utils.AppendUniquely(deps[item], execute)
} else {
// check recursively further dependencies
deps = m.GetContextDependencies(execute, m.GetDependsOn(item), deps)
}
}
return deps
}

func (m *Maker) GetDependsOn(execute string) (dependsOn []string) {
for _, item := range m.CbuildIndex.BuildIdx.Executes {
if item.Execute == execute {
dependsOn = item.DependsOn
break
}
}
return dependsOn
}

func (m *Maker) GetAllRunAlways(execute string) (elements []string) {
for _, item := range m.CbuildIndex.BuildIdx.Executes {
if item.Execute != execute && item.Always != nil {
elements = utils.AppendUniquely(elements, item.Execute)
}
}
return elements
}

func CMakeTargetIncludeDirectories(name string, includes ScopeMap) string {
if len(includes) == 0 {
return ""
Expand Down
34 changes: 33 additions & 1 deletion pkg/maker/buildcontent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -357,8 +357,40 @@ func TestBuildContent(t *testing.T) {
m.Vars.Contexts = []string{
"project.debug+target",
}
m.CbuildIndex.BuildIdx.Executes = []maker.Executes{
{
Execute: "RunAlways",
Always: make(map[string]interface{}),
},
{
Execute: "PostBuild",
DependsOn: []string{"project.debug+target"},
},
{
Execute: "SecondLevel_PostBuild",
DependsOn: []string{"PostBuild"},
},
}
content := m.BuildDependencies()
assert.Contains(content, "add_dependencies(project.debug+target-build\n dependentContext\n)")
assert.Contains(content, `
# Build dependencies
add_dependencies(project.debug+target-build
dependentContext
RunAlways
)
add_dependencies(PostBuild
project.debug+target-build
RunAlways
)
add_dependencies(SecondLevel_PostBuild
PostBuild
RunAlways
)
add_dependencies(project.debug+target-executes
PostBuild
SecondLevel_PostBuild
RunAlways
)`)
})

t.Run("test linker options", func(t *testing.T) {
Expand Down
127 changes: 0 additions & 127 deletions test/data/solutions/executes/project/project.Debug+ARMCM0.cbuild.yml

This file was deleted.

Loading