summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYi Chou <yich@google.com>2023-03-15 11:24:45 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-04-18 05:00:48 +0000
commit291cd044f5e62db9f66e784b41c6541ab22811c6 (patch)
treea127e10426fbce004e34c590dfc1f04aee354faf
parent4d4780fa4a2d800ef0ee8442bff9ebb80e05b349 (diff)
downloadchrome-ec-291cd044f5e62db9f66e784b41c6541ab22811c6.tar.gz
cmake: Support GNU compilers in the common toolchain file
Some platform are using the GNU compilers. We should support them properly. BUG=b:248508087 TEST=make runhosttests -j TEST=make buildall -j BRANCH=none Change-Id: Ia8d85bacf00c49a63f6f0fe665ea1309cc84b1f1 Signed-off-by: Yi Chou <yich@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4336873 Reviewed-by: Tom Hughes <tomhughes@chromium.org>
-rw-r--r--cmake/toolchain-armv7m.cmake6
-rw-r--r--cmake/toolchain-common.cmake43
2 files changed, 39 insertions, 10 deletions
diff --git a/cmake/toolchain-armv7m.cmake b/cmake/toolchain-armv7m.cmake
index 38d8f761d8..dacb265879 100644
--- a/cmake/toolchain-armv7m.cmake
+++ b/cmake/toolchain-armv7m.cmake
@@ -5,9 +5,13 @@
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)
-set(PREFIX armv7m-cros-eabi-)
+set(CROSS_COMPILE armv7m-cros-eabi-)
set(CMAKE_SYSROOT /usr/armv7m-cros-eabi/)
+set(CC_NAME clang)
+set(CXX_NAME clang++)
+
+set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES CROSS_COMPILE CC_NAME CXX_NAME)
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/toolchain-common.cmake")
add_link_options(-lclang_rt.builtins-armv7m)
diff --git a/cmake/toolchain-common.cmake b/cmake/toolchain-common.cmake
index 059c604235..347a57f76d 100644
--- a/cmake/toolchain-common.cmake
+++ b/cmake/toolchain-common.cmake
@@ -2,18 +2,43 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-set(CMAKE_C_COMPILER ${PREFIX}clang)
-set(CMAKE_CXX_COMPILER ${PREFIX}clang++)
-set(CMAKE_LINKER ${PREFIX}ld.lld)
-set(CMAKE_AR ${PREFIX}ar)
-set(CMAKE_NM ${PREFIX}nm)
-set(CMAKE_OBJCOPY ${PREFIX}objcopy)
-set(CMAKE_OBJDUMP ${PREFIX}objdump)
-set(CMAKE_RANLIB ${PREFIX}ranlib)
-set(CMAKE_READELF ${PREFIX}readelf)
+# Input variables:
+# CROSS_COMPILE: the prefix of the cross compiler.
+# CC_NAME: the name of the C compiler.
+# CXX_NAME: the name of the C++ compiler.
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+set(CMAKE_C_COMPILER "${CROSS_COMPILE}${CC_NAME}")
+set(CMAKE_CXX_COMPILER "${CROSS_COMPILE}${CXX_NAME}")
+set(CMAKE_OBJCOPY "${CROSS_COMPILE}objcopy")
+set(CMAKE_OBJDUMP "${CROSS_COMPILE}objdump")
+set(CMAKE_READELF "${CROSS_COMPILE}readelf")
+
+if ("${CC_NAME}" STREQUAL "gcc")
+set(CMAKE_LINKER "${CROSS_COMPILE}ld")
+else()
+set(CMAKE_LINKER "${CROSS_COMPILE}ld.lld")
+endif()
+
+# This is only for host unittests build.
+if ("${CC_NAME}" STREQUAL gcc AND "${CMAKE_SYSROOT}" STREQUAL "")
+set(CMAKE_AR "${CROSS_COMPILE}gcc-ar")
+set(CMAKE_NM "${CROSS_COMPILE}gcc-nm")
+set(CMAKE_RANLIB "${CROSS_COMPILE}gcc-ranlib")
+else()
+set(CMAKE_AR "${CROSS_COMPILE}ar")
+set(CMAKE_NM "${CROSS_COMPILE}nm")
+set(CMAKE_RANLIB "${CROSS_COMPILE}ranlib")
+endif()
+
+if ("${CC_NAME}" STREQUAL gcc)
+add_compile_options(-Os)
+else()
add_compile_options(-Oz)
+endif()
+# Enable Link Time Optimization.
add_compile_options(-flto)
add_link_options(-flto)