blob: c51ca7140b31bd20c14ef0c1142d11ddc5bf73c4 [file] [log] [blame]
Julian Hall201ce462021-04-29 11:05:34 +01001#-------------------------------------------------------------------------------
Gyorgy Szing28bca0b2023-02-15 11:17:07 +01002# Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved.
Julian Hall201ce462021-04-29 11:05:34 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
Gyorgy Szing2247d242021-09-03 16:17:25 +02006# QCBOR is a library for encoding and decoding CBOR objects, as per RFC8949
Julian Hall201ce462021-04-29 11:05:34 +01007#-------------------------------------------------------------------------------
8
Julian Hall201ce462021-04-29 11:05:34 +01009set(QCBOR_URL "https://github.com/laurencelundblade/QCBOR.git" CACHE STRING "qcbor repository URL")
Julian Hallec708602022-03-07 09:41:44 +000010set(QCBOR_REFSPEC "v1.0" CACHE STRING "qcbor git refspec")
Gyorgy Szing96669942021-12-08 04:19:50 +010011set(QCBOR_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/qcbor-src" CACHE PATH "qcbor installation directory")
12set(QCBOR_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/qcbor_install" CACHE PATH "qcbor installation directory")
Gyorgy Szing34aaf212022-10-20 07:26:23 +020013set(QCBOR_BUILD_TYPE "Release" CACHE STRING "qcbor build type")
Julian Hall201ce462021-04-29 11:05:34 +010014
Gyorgy Szing96669942021-12-08 04:19:50 +010015set(GIT_OPTIONS
Julian Hall201ce462021-04-29 11:05:34 +010016 GIT_REPOSITORY ${QCBOR_URL}
17 GIT_TAG ${QCBOR_REFSPEC}
Julian Halla628af32022-04-01 10:08:18 +010018 GIT_SHALLOW FALSE
Julian Hallcaa4af82021-05-19 12:02:36 +010019
20 PATCH_COMMAND git stash
21 COMMAND git branch -f bf-patch
Gyorgy Szing23e78d32022-03-05 01:49:02 +000022 COMMAND git am ${CMAKE_CURRENT_LIST_DIR}/0001-Introduce-a-way-to-allow-setting-macro-definitions-e.patch
23 ${CMAKE_CURRENT_LIST_DIR}/0002-Add-install-definition.patch
24 ${CMAKE_CURRENT_LIST_DIR}/0003-Fix-stop-overriding-C_FLAGS-from-environment.patch
Julian Hallcaa4af82021-05-19 12:02:36 +010025 COMMAND git reset bf-patch
Julian Hall201ce462021-04-29 11:05:34 +010026)
27
Gyorgy Szing23e78d32022-03-05 01:49:02 +000028# Only pass libc settings to qcbor if needed. For environments where the standard
29# library is not overridden, this is not needed.
30if(TARGET stdlib::c)
31 include(${TS_ROOT}/tools/cmake/common/PropertyCopy.cmake)
32
33 # Save libc settings
34 save_interface_target_properties(TGT stdlib::c PREFIX LIBC)
35 # Translate libc settings to cmake code fragment. Will be inserted into
36 # qcbor-init-cache.cmake.in when LazyFetch configures the file.
37 translate_interface_target_properties(PREFIX LIBC RES _cmake_fragment)
38 unset_saved_properties(LIBC)
39endif()
Julian Hall201ce462021-04-29 11:05:34 +010040
Gyorgy Szing96669942021-12-08 04:19:50 +010041include(${TS_ROOT}/tools/cmake/common/LazyFetch.cmake REQUIRED)
42LazyFetch_MakeAvailable(DEP_NAME qcbor
43 FETCH_OPTIONS "${GIT_OPTIONS}"
44 INSTALL_DIR "${QCBOR_INSTALL_DIR}"
45 CACHE_FILE "${CMAKE_CURRENT_LIST_DIR}/qcbor-init-cache.cmake.in"
46 SOURCE_DIR "${QCBOR_SOURCE_DIR}"
Julian Hallcaa4af82021-05-19 12:02:36 +010047 )
Gyorgy Szing23e78d32022-03-05 01:49:02 +000048unset(_cmake_fragment)
Julian Hallcaa4af82021-05-19 12:02:36 +010049
Julian Hall201ce462021-04-29 11:05:34 +010050# Create an imported target to have clean abstraction in the build-system.
51add_library(qcbor STATIC IMPORTED)
Gyorgy Szing96669942021-12-08 04:19:50 +010052set_property(TARGET qcbor PROPERTY IMPORTED_LOCATION "${QCBOR_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}qcbor${CMAKE_STATIC_LIBRARY_SUFFIX}")
53set_property(TARGET qcbor PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${QCBOR_INSTALL_DIR}/include")
Gyorgy Szing28bca0b2023-02-15 11:17:07 +010054if(TARGET stdlib::c)
55 target_link_libraries(qcbor INTERFACE stdlib::c)
56endif()
Gyorgy Szing96669942021-12-08 04:19:50 +010057set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${QCBOR_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}qcbor${CMAKE_STATIC_LIBRARY_SUFFIX}")