blob: 2457ca859addbc1f074960643040f67ca39bc183 [file] [log] [blame]
Rui Miguel Silva427e8202021-12-03 16:36:51 +00001#-------------------------------------------------------------------------------
2# Copyright (c) 2021-2022 Linaro Limited
Gyorgy Szingc9b6b632023-02-15 10:45:26 +01003# Copyright (c) 2021-2023, Arm Limited. All rights reserved.
Rui Miguel Silva427e8202021-12-03 16:36:51 +00004#
5# SPDX-License-Identifier: BSD-3-Clause
6#
7#-------------------------------------------------------------------------------
8
9set (LIBMETAL_URL "https://github.com/OpenAMP/libmetal.git"
Gyorgy Szingc9b6b632023-02-15 10:45:26 +010010 CACHE STRING "libmetal repository URL")
Rui Miguel Silva427e8202021-12-03 16:36:51 +000011set (LIBMETAL_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/libmetal_install"
Gyorgy Szingc9b6b632023-02-15 10:45:26 +010012 CACHE PATH "libmetal installation directory")
Rui Miguel Silva427e8202021-12-03 16:36:51 +000013set(LIBMETAL_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/libmetal"
Gyorgy Szingc9b6b632023-02-15 10:45:26 +010014 CACHE PATH "libmetal source-code")
Rui Miguel Silva427e8202021-12-03 16:36:51 +000015set (LIBMETAL_PACKAGE_DIR "${LIBMETAL_INSTALL_DIR}/libmetal/cmake"
Gyorgy Szingc9b6b632023-02-15 10:45:26 +010016 CACHE PATH "libmetal CMake package directory")
Rui Miguel Silva427e8202021-12-03 16:36:51 +000017set (LIBMETAL_REFSPEC "f252f0e007fbfb8b3a52b1d5901250ddac96baad"
Gyorgy Szingc9b6b632023-02-15 10:45:26 +010018 CACHE STRING "The version of libmetal to use")
Rui Miguel Silva427e8202021-12-03 16:36:51 +000019set(LIBMETAL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/libmetal-build")
20
21set(GIT_OPTIONS
22 GIT_REPOSITORY ${LIBMETAL_URL}
23 GIT_TAG ${LIBMETAL_REFSPEC}
24 GIT_SHALLOW FALSE
25)
26
27if(NOT LIBMETAL_DEBUG)
28 set(LIBMETAL_BUILD_TYPE "Release")
29else()
30 set(LIBMETAL_BUILD_TYPE "Debug")
31endif()
32
33include(FetchContent)
34
35# Checking git
36find_program(GIT_COMMAND "git")
37if (NOT GIT_COMMAND)
38 message(FATAL_ERROR "Please install git")
39endif()
40
41# Only pass libc settings to libmetal if needed. For environments where the
42# standard library is not overridden, this is not needed.
43if(TARGET stdlib::c)
44 include(${TS_ROOT}/tools/cmake/common/PropertyCopy.cmake)
45
46 # Save libc settings
47 save_interface_target_properties(TGT stdlib::c PREFIX LIBC)
48 # Translate libc settings to cmake code fragment. Will be inserted into
49 # libmetal-init-cache.cmake.in when LazyFetch configures the file.
50 translate_interface_target_properties(PREFIX LIBC RES _cmake_fragment)
51 unset_saved_properties(LIBC)
52endif()
53
54include(${TS_ROOT}/tools/cmake/common/LazyFetch.cmake REQUIRED)
55LazyFetch_MakeAvailable(DEP_NAME libmetal
56 FETCH_OPTIONS "${GIT_OPTIONS}"
57 INSTALL_DIR "${LIBMETAL_INSTALL_DIR}"
58 CACHE_FILE "${TS_ROOT}/external/openamp/libmetal-init-cache.cmake.in"
59 SOURCE_DIR "${LIBMETAL_SOURCE_DIR}"
60)
61unset(_cmake_fragment)
62
63#Create an imported target to have clean abstraction in the build-system.
64add_library(libmetal STATIC IMPORTED)
65set_property(TARGET libmetal PROPERTY IMPORTED_LOCATION "${LIBMETAL_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}metal${CMAKE_STATIC_LIBRARY_SUFFIX}")
66set_property(TARGET libmetal PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${LIBMETAL_INSTALL_DIR}/include")
Gyorgy Szingc9b6b632023-02-15 10:45:26 +010067if(TARGET stdlib::c)
68 target_link_libraries(libmetal INTERFACE stdlib::c)
69endif()