aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/cmake.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rosa/cmake.go')
-rw-r--r--internal/rosa/cmake.go38
1 files changed, 31 insertions, 7 deletions
diff --git a/internal/rosa/cmake.go b/internal/rosa/cmake.go
index f9e5e38c..2095c47a 100644
--- a/internal/rosa/cmake.go
+++ b/internal/rosa/cmake.go
@@ -7,6 +7,8 @@ import (
)
var (
+ _cmakeEarly = H("cmake-early")
+
_cmake = H("cmake")
_ninja = H("ninja")
)
@@ -16,6 +18,9 @@ type CMakeHelper struct {
// Path elements joined with source.
Append []string
+ // Use the bootstrap minimal [MakeHelper] CMake.
+ Early bool
+
// Value of CMAKE_BUILD_TYPE. The zero value is equivalent to "Release".
BuildType string
// CMake CACHE entries.
@@ -35,11 +40,16 @@ type CMakeHelper struct {
var _ Helper = new(CMakeHelper)
// tools returns the cmake handle alongside either ninja or make.
-func (attr *CMakeHelper) tools() P {
+func (attr *CMakeHelper) tools(Toolchain) P {
+ h := _cmake
+ if attr != nil && attr.Early {
+ h = _cmakeEarly
+ }
+
if attr != nil && attr.Make {
- return P{_cmake, _make}
+ return P{h, _make}
}
- return P{_cmake, _ninja}
+ return P{h, _ninja}
}
// inputs is a noop.
@@ -62,6 +72,7 @@ func (attr *CMakeHelper) script(t Toolchain, name string) string {
if attr == nil {
attr = new(CMakeHelper)
}
+ target := t.triple()
generate := "Ninja"
test := "ninja " + jobsFlagE + " " + loadFlagE + " test"
@@ -85,12 +96,25 @@ func (attr *CMakeHelper) script(t Toolchain, name string) string {
}
cache = append(cache, attr.Cache...)
+ var cross string
+ if t.cross() {
+ cross = `
+ -DCMAKE_SYSTEM_NAME=Linux \
+ -DCMAKE_SYSROOT=/system/` + t.arch + ` \
+ -DCMAKE_C_COMPILER=/system/bin/clang \
+ -DCMAKE_CXX_COMPILER=/system/bin/clang++ \
+ -DCMAKE_ASM_COMPILER=/system/bin/clang \`
+ }
+
return `
cmake -G ` + generate + ` \
- -Wno-author -Wno-unused-cli \
- -DCMAKE_C_COMPILER_TARGET="${ROSA_TRIPLE}" \
- -DCMAKE_CXX_COMPILER_TARGET="${ROSA_TRIPLE}" \
- -DCMAKE_ASM_COMPILER_TARGET="${ROSA_TRIPLE}" \
+ -Wno-author -Wno-unused-cli \` + cross + `
+ -DCMAKE_C_COMPILER_TARGET='` + target + `' \
+ -DCMAKE_C_FLAGS='--target=` + target + `' \
+ -DCMAKE_CXX_COMPILER_TARGET='` + target + `' \
+ -DCMAKE_CXX_FLAGS='--target=` + target + `' \
+ -DCMAKE_ASM_COMPILER_TARGET='` + target + `' \
+ -DCMAKE_ASM_FLAGS='--target=` + target + `' \
-DCMAKE_INSTALL_LIBDIR=lib \
` + strings.Join(slices.Collect(func(yield func(string) bool) {
for _, v := range cache {