diff options
Diffstat (limited to 'internal/rosa/cmake.go')
| -rw-r--r-- | internal/rosa/cmake.go | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go index 049688e5..b22c124f 100644 --- a/internal/rosa/cmake.go +++ b/internal/rosa/cmake.go @@ -20,6 +20,8 @@ type CMakeHelper struct { // Use the bootstrap minimal [MakeHelper] CMake. Early bool + // Omit CMAKE_CROSSCOMPILING_EMULATOR, because qemu is not yet available. + SkipEmulator bool // Value of CMAKE_BUILD_TYPE. The zero value is equivalent to "Release". BuildType string @@ -40,16 +42,22 @@ type CMakeHelper struct { var _ Helper = new(CMakeHelper) // tools returns the cmake handle alongside either ninja or make. -func (attr *CMakeHelper) tools(Toolchain) P { - h := _cmake - if attr != nil && attr.Early { - h = _cmakeEarly - } +func (attr *CMakeHelper) tools(t Toolchain) P { + tools := P{_cmake, _ninja, _qemu} + if attr != nil { + if attr.Early { + tools[0] = _cmakeEarly + } + + if attr.Make { + tools[1] = _make + } - if attr != nil && attr.Make { - return P{h, _make} + if !t.cross() || attr.SkipEmulator { + tools = tools[:2] + } } - return P{h, _ninja} + return tools } // inputs is a noop. @@ -85,7 +93,8 @@ func (attr *CMakeHelper) script(t Toolchain, name string) string { } script := attr.Script - if !attr.SkipTest && t.opts&OptSkipCheck == 0 { + if !attr.SkipTest && t.opts&OptSkipCheck == 0 && + !(t.cross() && attr.SkipEmulator) { script += "\n" + test } @@ -108,6 +117,11 @@ func (attr *CMakeHelper) script(t Toolchain, name string) string { -DCMAKE_CXX_FLAGS='--target=` + target + ` --sysroot=` + sysroot + `' \ -DCMAKE_ASM_COMPILER=` + Prefix + `/bin/clang \ -DCMAKE_ASM_FLAGS='--target=` + target + ` --sysroot=` + sysroot + `' \` + + if !attr.SkipEmulator { + cross += ` + -DCMAKE_CROSSCOMPILING_EMULATOR='qemu-` + t.linuxArch() + `;-L;` + sysroot + `' \` + } } return ` |
