TF-RMM Release v0.1.0
This is the first external release of TF-RMM and provides a reference
implementation of Realm Management Monitor (RMM) as specified by the
RMM Beta0 specification[1].
The `docs/readme.rst` has more details about the project and
`docs/getting_started/getting-started.rst` has details on how to get
started with TF-RMM.
[1] https://developer.arm.com/documentation/den0137/1-0bet0/?lang=en
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
Change-Id: I205ef14c015e4a37ae9ae1a64e4cd22eb8da746e
diff --git a/toolchains/aarch64/common_aarch64.cmake b/toolchains/aarch64/common_aarch64.cmake
new file mode 100644
index 0000000..bafa481
--- /dev/null
+++ b/toolchains/aarch64/common_aarch64.cmake
@@ -0,0 +1,20 @@
+#
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
+#
+
+include_guard()
+
+include(${CMAKE_CURRENT_LIST_DIR}/../common.cmake)
+
+foreach(language IN ITEMS ASM C)
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-ffreestanding ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-march=armv8.5-a ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-mgeneral-regs-only ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-mstrict-align ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-fpie ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-gdwarf-4 ")
+endforeach()
+
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-nostdlib ")
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,-pie ")
diff --git a/toolchains/aarch64/gnu.cmake b/toolchains/aarch64/gnu.cmake
new file mode 100644
index 0000000..802a92a
--- /dev/null
+++ b/toolchains/aarch64/gnu.cmake
@@ -0,0 +1,18 @@
+#
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
+#
+
+include_guard()
+
+include(${CMAKE_CURRENT_LIST_DIR}/common_aarch64.cmake)
+
+find_program(CMAKE_ASM_COMPILER
+ NAMES "$ENV{CROSS_COMPILE}gcc"
+ DOC "Path to an aarch64 compiler."
+ REQUIRED)
+
+find_program(CMAKE_C_COMPILER
+ NAMES "$ENV{CROSS_COMPILE}gcc"
+ DOC "Path to an aarch64 compiler."
+ REQUIRED)
diff --git a/toolchains/aarch64/llvm.cmake b/toolchains/aarch64/llvm.cmake
new file mode 100644
index 0000000..c63319e
--- /dev/null
+++ b/toolchains/aarch64/llvm.cmake
@@ -0,0 +1,63 @@
+#
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
+#
+
+include_guard()
+
+include(${CMAKE_CURRENT_LIST_DIR}/common_aarch64.cmake)
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+find_program(CMAKE_C_COMPILER
+ NAMES "clang"
+ DOC "Path to clang."
+ REQUIRED)
+
+set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
+
+find_program(CMAKE_OBJCOPY
+ NAMES "llvm-objcopy"
+ DOC "Path to llvm-objcopy."
+ REQUIRED)
+
+find_program(CMAKE_OBJDUMP
+ NAMES "llvm-objdump"
+ DOC "Path to llvm-objcopy."
+ REQUIRED)
+
+find_program(CMAKE_AR
+ NAMES "llvm-ar"
+ DOC "Path to llvm-ar."
+ REQUIRED)
+
+find_program(CMAKE_RANLIB
+ NAMES "llvm-ranlib"
+ DOC "Path to llvm-ranlib."
+ REQUIRED)
+
+# Find the path to AArch64 gcc
+find_program(A64_GCC
+ NAMES "$ENV{CROSS_COMPILE}gcc"
+ DOC "Path to aarch64 gcc"
+ REQUIRED)
+
+# Get the AArch64 GCC triplet
+execute_process(COMMAND ${A64_GCC} -dumpmachine
+ OUTPUT_VARIABLE A64-GCC-TRIPLET
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# Construct the path to `include` folder of AArch64 GCC toolchain
+get_filename_component(A64_GCC_DIR ${A64_GCC} DIRECTORY)
+set(A64_GCC_INC_DIR "${A64_GCC_DIR}/../${A64-GCC-TRIPLET}/include")
+message(STATUS "Using ${A64_GCC_INC_DIR} for std include headers")
+
+foreach(language IN ITEMS ASM C)
+ set(CMAKE_${language}_COMPILER_TARGET "${A64-GCC-TRIPLET}")
+ string(APPEND CMAKE_${language}_STANDARD_INCLUDE_DIRECTORIES "${A64_GCC_INC_DIR}")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-Wno-unknown-warning-option ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-Wno-unused-function ")
+endforeach()
+
+# Use lld as default linker
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld ")
diff --git a/toolchains/common.cmake b/toolchains/common.cmake
new file mode 100644
index 0000000..4d710fb
--- /dev/null
+++ b/toolchains/common.cmake
@@ -0,0 +1,24 @@
+#
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
+#
+
+include_guard()
+
+set(CMAKE_SYSTEM_NAME "Generic")
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+foreach(language IN ITEMS ASM C)
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-fno-common ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-fomit-frame-pointer ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-ffunction-sections ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-fdata-sections ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-Wall -Werror ")
+ string(APPEND CMAKE_${language}_FLAGS_DEBUG_INIT "-Og ")
+ string(APPEND CMAKE_${language}_FLAGS_RELEASE_INIT "-g ")
+endforeach()
+
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--gc-sections ")
diff --git a/toolchains/fake_host/gnu.cmake b/toolchains/fake_host/gnu.cmake
new file mode 100644
index 0000000..ca2f48f
--- /dev/null
+++ b/toolchains/fake_host/gnu.cmake
@@ -0,0 +1,17 @@
+#
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
+#
+
+include_guard()
+
+include(${CMAKE_CURRENT_LIST_DIR}/../common.cmake)
+
+find_program(CMAKE_C_COMPILER
+ NAMES "gcc"
+ DOC "Path to gcc."
+ REQUIRED)
+
+set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
+
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--build-id=none ")
diff --git a/toolchains/fake_host/llvm.cmake b/toolchains/fake_host/llvm.cmake
new file mode 100644
index 0000000..cb0f207
--- /dev/null
+++ b/toolchains/fake_host/llvm.cmake
@@ -0,0 +1,23 @@
+#
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
+#
+
+include_guard()
+
+include(${CMAKE_CURRENT_LIST_DIR}/../common.cmake)
+
+find_program(CMAKE_C_COMPILER
+ NAMES "clang"
+ DOC "Path to clang."
+ REQUIRED)
+
+set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
+
+foreach(language IN ITEMS ASM C)
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-Wno-unknown-warning-option ")
+ string(APPEND CMAKE_${language}_FLAGS_INIT "-Wno-unused-function ")
+endforeach()
+
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--build-id=none ")
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld ")