blob: a89f4f3f400f2524e6647c98c4a61de9dd8bdc54 [file] [log] [blame]
#
# Copyright (c) 2025, Arm Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: MIT OR GPL-2.0-or-later
#
cmake_minimum_required(VERSION 3.15)
project(libtpm2 VERSION 0.1 LANGUAGES C)
#
# Set global flags.
#
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED TRUE)
set(CMAKE_C_EXTENSIONS TRUE)
set (TPM_INTERFACE "NONE" CACHE STRING "Transport interface for TPM (Currently supported: FIFO_SPI)")
set_property (CACHE TPM_INTERFACE PROPERTY STRINGS "FIFO_SPI")
set(
LOG_LEVEL "" CACHE STRING
"Log Level options:
0 - NONE
10 - ERROR
20 - NOTICE
30 - WARNING
40 - INFO
50 - VERBOSE"
)
if(LOG_LEVEL STREQUAL "")
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(LOG_LEVEL 10)
else()
set(LOG_LEVEL 40)
endif()
endif()
add_compile_definitions(LOG_LEVEL=${LOG_LEVEL})
set(DEBUG_BACKEND_HEADER "log_backend_printf.h" CACHE STRING "Path to debug backend header")
add_compile_definitions(DEBUG_BACKEND_HEADER="${DEBUG_BACKEND_HEADER}")
SET(TARGET_GROUP release CACHE STRING "Specify the Build Target [\"release\" by default]")
add_library(tpm2
STATIC
${PROJECT_SOURCE_DIR}/src/tpm2_chip.c
${PROJECT_SOURCE_DIR}/src/tpm2_cmds.c
)
if (NOT DEFINED TPM_INTERFACE OR
TPM_INTERFACE STREQUAL "" OR
TPM_INTERFACE STREQUAL "NONE")
message(WARNING "TPM_INTERFACE not set — defaulting to FIFO_SPI")
set(TPM_INTERFACE "FIFO_SPI")
endif()
if (${TPM_INTERFACE} STREQUAL "FIFO_SPI")
target_sources (tpm2
PRIVATE
${PROJECT_SOURCE_DIR}/src/tpm2_fifo.c
${PROJECT_SOURCE_DIR}/src/tpm2_fifo_spi.c
)
target_compile_definitions(tpm2 PRIVATE TPM_INTERFACE_FIFO_SPI)
else()
message(FATAL_ERROR "Unknown transport interface selected")
endif()
target_include_directories(tpm2
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
$<INSTALL_INTERFACE:include/tpm2> # extra path for unqualified includes
)
if(PROJECT_API)
include(${PROJECT_SOURCE_DIR}/cmake/ProjectApi.cmake)
endif()
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
# Install the library
install(TARGETS tpm2
EXPORT tpm2Targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(FILES
${PROJECT_SOURCE_DIR}/include/tpm2.h
${PROJECT_SOURCE_DIR}/include/tpm2_chip.h
${PROJECT_SOURCE_DIR}/include/transport/spi.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tpm2
)
# Export targets file
install(EXPORT tpm2Targets
FILE tpm2Targets.cmake
NAMESPACE tpm2::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/tpm2
)
# Generate Config and Version files
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/tpm2ConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
configure_package_config_file(
${PROJECT_SOURCE_DIR}/tpm2Config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/tpm2Config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/tpm2
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/tpm2Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/tpm2ConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/tpm2
)