- cmake_minimum_required(VERSION 3.13)
- project(optee_engine NONE)
- include(ExternalProject)
-
- enable_language(C)
- enable_language(CXX)
-
- set(CMAKE_VERBOSE_MAKEFILE ON)
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "~/.cmake/Modules")
- set(CMAKE_CXX_STANDARD 11)
- set(CMAKE_POSITION_INDEPENDENT_CODE ON)
- set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
- set(OPTEE_ENGINE_INSTALL_DIR /opt)
-
- # OP-TEE
- if (NOT OPTEE_BUILD_DIR)
- message(FATAL_ERROR "Must specify -DOPTEE_BUILD_DIR")
- endif()
- if (NOT PLATFORM)
- message(FATAL_ERROR "Must specify -DPLATFORM=V where V is either qemu or hikey960")
- endif()
- set(OPTEE_ROOT_DIR ${OPTEE_BUILD_DIR})
- set(OPTEE_REE_LIB_DIR ${OPTEE_ROOT_DIR}/out-br/target/usr/lib)
- set(OPTEE_REE_INCLUDE_DIR ${OPTEE_ROOT_DIR}/optee_client/public)
- set(CMAKE_C_COMPILER ${OPTEE_ROOT_DIR}/toolchains/aarch64/bin/aarch64-linux-gnu-gcc CACHE PATH "" FORCE)
- set(CMAKE_CXX_COMPILER ${OPTEE_ROOT_DIR}/toolchains/aarch64/bin/aarch64-linux-gnu-g++ CACHE PATH "" FORCE)
-
- # 3rd Parties
-
- # OpenSSL config targets
- set(OPENSSL_CONFIG_CMD "Configure" CACHE STRING "Command used to configure OpenSSL (default ./config)")
- set(OPENSSL_CONFIG_TARGET "linux-aarch64" CACHE STRING "Platform for which OpenSSL should be compiled (default native)")
-
- add_subdirectory(3rd/openssl-cmake)
- # Gtest
- add_subdirectory(3rd/gtest)
- get_property(OPENSSL_INSTALL_DIR GLOBAL PROPERTY openssl_build_install_dir_property)
- set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include)
-
- # Trusted Application sources
- set(TA_DELEGATOR_ROOT ${CMAKE_SOURCE_DIR}/src/ta)
-
- # Global configuration
- set(C_CXX_FLAGS "\
- -Wno-ignored-qualifiers \
- -Wpedantic \
- -Wall \
- -Werror \
- -Wshadow \
- -Wno-variadic-macros \
- -Wundef \
- -Wunused-result")
-
- # Control Debug/Release mode
- IF(${CMAKE_BUILD_TYPE} MATCHES "Debug")
- set(C_CXX_FLAGS "${C_CXX_FLAGS} -g3 -O0 -Wno-unused")
- else()
- set(C_CXX_FLAGS "${C_CXX_FLAGS} -O3")
- endif()
-
- set(CMAKE_C_FLAGS ${C_CXX_FLAGS})
- set(CMAKE_CXX_FLAGS ${C_CXX_FLAGS})
-
- # --- Build targets ---
-
- # lang specific settings
- set(CMAKE_C_FLAGS
- "${CMAKE_C_FLAGS} \
- -std=gnu99 \
- -Werror=implicit-function-declaration \
- -Wmissing-prototypes \
- -Wstrict-prototypes")
-
- # optee_eng
- set(OPTEE_ENGINE_SRC
- src/optee_engine/back.c
- src/optee_engine/front.c
- src/optee_engine/log.c
- )
-
- add_library(
- optee_eng SHARED
- ${OPTEE_ENGINE_SRC}
- )
-
- target_include_directories(
- optee_eng PRIVATE
- ${OPENSSL_INCLUDE_DIR}
- ${OPTEE_REE_INCLUDE_DIR}
- src
- )
-
- target_include_directories(
- optee_eng PUBLIC
- inc
- ${OPENSSL_INCLUDE_DIR}
- ${TA_DELEGATOR_ROOT}/include
- )
-
- target_link_directories(
- optee_eng PRIVATE
- ${OPTEE_REE_LIB_DIR})
-
- target_link_libraries(
- optee_eng
- OpenSSL_crypto_shared
- teec
- ${CMAKE_DL_LIBS})
-
- IF(${CMAKE_BUILD_TYPE} MATCHES "Debug")
- target_compile_definitions(optee_eng PRIVATE BUILD_DEBUG)
- endif()
-
- # Key management app
- add_executable(
- optee_keymgnt
- src/optee_engine/keymgnt.c
- )
- target_include_directories(
- optee_keymgnt PRIVATE
- ${OPENSSL_INCLUDE_DIR}
- ${OPTEE_REE_INCLUDE_DIR}
- ${TA_DELEGATOR_ROOT}/include)
- target_link_directories(
- optee_keymgnt PRIVATE
- ${OPTEE_REE_LIB_DIR})
- target_link_libraries(
- optee_keymgnt
- OpenSSL_crypto_shared
- teec
- ${OPTEE_ENG_LD_FLAGS}
- ${CMAKE_DL_LIBS})
-
- ExternalProject_Add(optee_eng_ta
- SOURCE_DIR ${TA_DELEGATOR_ROOT}
- CONFIGURE_COMMAND ""
- BUILD_COMMAND OPTEE_ROOT=${OPTEE_BUILD_DIR} O=${CMAKE_CURRENT_BINARY_DIR} ${MAKE_PROGRAM}
- BUILD_IN_SOURCE TRUE
- INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/ta
- INSTALL_COMMAND ""
- BUILD_ALWAYS TRUE
- )
-
- # Google benchmark settings
- set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
- # Target for benchmark - it also builds gtest library
- set(BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE BOOL "Enable testing of the benchmark library." FORCE)
- set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "Disable benchmark tests" FORCE)
- set(GOOGLETEST_PATH "${CMAKE_CURRENT_SOURCE_DIR}/3rd/gtest" CACHE PATH "Path to the gtest sources" FORCE)
- set(BENCHMARK_OS_WINDOWS OFF CACHE BOOL "" FORCE)
- set(HAVE_POSIX_REGEX OFF CACHE BOOL "" FORCE)
- set(BENCHMARK_ENABLE_EXCEPTIONS OFF CACHE BOOL "" FORCE)
- set(BENCHMARK_ENABLE_INSTALL OFF CACHE BOOL "" FORCE)
- add_subdirectory(3rd/gbench)
- add_executable(
- speed
- src/optee_engine/speed.cc)
- target_include_directories(
- speed PRIVATE
- ${OPENSSL_INCLUDE_DIR}
- )
- target_link_libraries(
- speed
- gtest
- pthread
- OpenSSL_crypto_shared
- benchmark::benchmark)
-
- # Install copies needed files to the buildroot overlay.
-
- # OpenVPN config
- install(FILES ${PROJECT_SOURCE_DIR}/cfg/openvpn_cli.conf
- DESTINATION ${OPTEE_ROOT_DIR}/build/br-ext/board/${PLATFORM}/overlay/etc/openvpn/
- RENAME client.conf)
- install(FILES
- ${PROJECT_SOURCE_DIR}/cfg/certs/ca.cert
- ${PROJECT_SOURCE_DIR}/cfg/certs/client.cert
- ${PROJECT_SOURCE_DIR}/cfg/certs/client.key
- DESTINATION ${OPTEE_ROOT_DIR}/build/br-ext/board/${PLATFORM}/overlay/etc/openvpn/certs/)
- # OpenSSL config
- install(FILES ${PROJECT_SOURCE_DIR}/cfg/openssl_optee.cnf
- DESTINATION ${OPTEE_ROOT_DIR}/build/br-ext/board/${PLATFORM}/overlay/etc/ssl/
- RENAME openssl.cnf)
- # OpTEE engine
- install(TARGETS optee_eng
- LIBRARY DESTINATION ${OPTEE_ROOT_DIR}/build/br-ext/board/${PLATFORM}/overlay/opt/
- PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
- # TA
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/8aaaf200-2450-11e4-0060-0dc0ffee0000.ta
- DESTINATION ${OPTEE_ROOT_DIR}/build/br-ext/board/${PLATFORM}/overlay/lib/optee_armtz)
- # Must be empty and have same name as the TEE key ID
- install(FILES /dev/null
- DESTINATION ${OPTEE_ROOT_DIR}/build/br-ext/board/${PLATFORM}/overlay/etc/openvpn/
- RENAME vpn.testlab.com)
- # Key management app
- install(TARGETS optee_keymgnt
- RUNTIME DESTINATION ${OPTEE_ROOT_DIR}/build/br-ext/board/${PLATFORM}/overlay/usr/bin/
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ WORLD_READ)
- # Speed app
- install(TARGETS speed
- RUNTIME DESTINATION ${OPTEE_ROOT_DIR}/build/br-ext/board/${PLATFORM}/overlay/usr/bin/
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ WORLD_READ)
|