blob: a59699330dba0d2448801812bc571721d74bba03 [file] [log] [blame]
cmake_minimum_required (VERSION 3.10)
project (MesaTEE C)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(MesaTEEUtils)
include(ExternalProject)
check_exe_dependencies(git openssl python rustup lsof pypy)
init_submodules()
# ====== VARIABLES FOR CMAKE -D{VAR}=VAL CONFIGURATION BEGIN ======
SET_STRVAR_FROM_ENV_OR(SGX_SDK "/opt/sgxsdk" "Path of SGX SDK")
SET_STRVAR_FROM_ENV_OR(RUSTFLAGS "" "Rust flags")
SET_STRVAR_FROM_ENV_OR(MESATEE_CMAKE_DBG "" "set to turn on debug message for cmake")
set(MESAPY_VERSION 2b7ea38773d337d106c613a239661a60a4fa7528)
option(COV "Turn on/off coverage" OFF)
option(OFFLINE "Turn on/off cargo offline" ON)
option(TEST_MODE "Turn on/off test mode" OFF)
option(SGX_SIM_MODE "Turn on/off sgx simulation mode" OFF)
if(TEST_MODE)
set(RUSTFLAGS "${RUSTFLAGS} --cfg test_mode")
endif()
if(SGX_SIM_MODE)
set(RUSTFLAGS "${RUSTFLAGS} --cfg sgx_sim")
set(SGX_MODE "SW")
else()
set(SGX_MODE "HW")
endif()
# ======= VARIABLES FOR CMAKE -D{VAR}=VAL CONFIGURATION END =======
# =============== VARIABLES FOR MANUAL CHANGE BEGIN ===============
set(UNIX_LIBS mesatee_sdk protected_fs_rs)
# ================ VARIABLES FOR MANUAL CHANGE END ================
# UNIX_APPS, SGX_APPS and SGX_LIBS are parsed from corresponding toml files
parse_cargo_packages(UNIX_APPS
CARGO_TOML_PATH ${PROJECT_SOURCE_DIR}/cmake/tomls/Cargo.unix_app.toml
CATEGORIES UNIX_APP_CATEGORIES
)
parse_cargo_packages(SGX_APPS
CARGO_TOML_PATH ${PROJECT_SOURCE_DIR}/cmake/tomls/Cargo.sgx_untrusted_app.toml
CATEGORIES SGX_APP_CATEGORIES
)
parse_cargo_packages(SGX_LIBS
CARGO_TOML_PATH ${PROJECT_SOURCE_DIR}/cmake/tomls/Cargo.sgx_trusted_lib.toml
CATEGORIES SGX_LIB_CATEGORIES
PKG_PATHS SGX_LIB_PATHS
)
include(MesaTEEGenVars)
# ========== CONFIG-TIME CHECKS AND INITIALIZATIONS BEGIN =========
check_sgx_sdk()
generate_env_file()
# =========== CONFIG-TIME CHECKS AND INITIALIZATIONS END ==========
# UTIL TARGETS: prep, sgx-test, cov, cov-clean, format, check, doc, etc.
include(UtilTargets)
# unix_app
list(LENGTH UNIX_APPS UNIX_APP_LEN)
math(EXPR UNIX_APP_LAST_INDEX "${UNIX_APP_LEN} - 1")
foreach(_i RANGE ${UNIX_APP_LAST_INDEX})
list(GET UNIX_APPS ${_i} _pkg_name)
list(GET UNIX_APP_CATEGORIES ${_i} _category)
add_cargo_build_target(${_pkg_name}
TARGET_NAME "${UNIXAPP_PREFIX}-${_pkg_name}"
TOML_DIR ${MT_UNIX_TOML_DIR}
TARGET_DIR ${UNIX_TARGET_DIR}
INSTALL_DIR ${MESATEE_INSTALL_DIR}/${_category}
EXTRA_CARGO_FLAGS ${EXTRA_CARGO_FLAGS}
DEPENDS prep
)
endforeach()
# sgx_untrusted_app
list(LENGTH SGX_APPS SGX_APP_LEN)
math(EXPR SGX_APP_LAST_INDEX "${SGX_APP_LEN} - 1")
foreach(_i RANGE ${SGX_APP_LAST_INDEX})
list(GET SGX_APPS ${_i} _pkg_name)
list(GET SGX_APP_CATEGORIES ${_i} _category)
add_cargo_build_target(${_pkg_name}
TARGET_NAME "${SGXAPP_PREFIX}-${_pkg_name}"
TOML_DIR ${MT_SGXAPP_TOML_DIR}
TARGET_DIR ${UNTRUSTED_TARGET_DIR}
INSTALL_DIR ${MESATEE_INSTALL_DIR}/${_category}
EXTRA_CARGO_FLAGS ${EXTRA_CARGO_FLAGS}
DEPENDS prep
)
endforeach()
# mesapy components
add_custom_command(
OUTPUT ${MESATEE_OUT_DIR}/acs_py_enclave.c
COMMAND env
ARGS PYTHONPATH=${PROJECT_SOURCE_DIR}/third_party/mesapy/sgx
PYPY_FFI_OUTDIR=${MESATEE_OUT_DIR}
pypy ${PROJECT_SOURCE_DIR}/mesatee_services/acs/python/ffi.py
DEPENDS prep
${PROJECT_SOURCE_DIR}/mesatee_services/acs/python/ffi.py
${PROJECT_SOURCE_DIR}/mesatee_services/acs/python/acs_engine.py
COMMENT "Generating mesapy ffi stubs"
)
add_library(pycomponent STATIC ${MESATEE_OUT_DIR}/acs_py_enclave.c)
set_target_properties(pycomponent PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${MESATEE_OUT_DIR})
target_compile_definitions(pycomponent PUBLIC SGX)
if(NOT EXISTS "/usr/lib/pypy/include")
message(FATAL_ERROR "pypy development package not found\nFor Ubuntu, please run `apt-get install pypy-dev`")
endif()
target_compile_options(pycomponent PUBLIC -UWITH_THREAD -O2 -fPIC -Wimplicit -I/usr/lib/pypy/include)
# sgx_trusted_lib
list(LENGTH SGX_LIBS SGX_LIB_LEN)
math(EXPR SGX_LIB_LAST_INDEX "${SGX_LIB_LEN} - 1")
foreach(_i RANGE ${SGX_LIB_LAST_INDEX})
list(GET SGX_LIBS ${_i} _pkg_name)
list(GET SGX_LIB_PATHS ${_i} _pkg_path)
list(GET SGX_LIB_CATEGORIES ${_i} _category)
add_sgx_build_target(${_pkg_path} ${_pkg_name}
DEPENDS prep pycomponent
INSTALL_DIR ${MESATEE_INSTALL_DIR}/${_category}
)
endforeach()
# MesaTEE C SDK
add_cargo_build_dylib_target(mesatee_sdk_c
TARGET_NAME "${UNIXLIB_PREFIX}-mesatee_sdk_c"
TOML_DIR ${MT_UNIX_TOML_DIR}
TARGET_DIR ${UNIX_TARGET_DIR}
DEPENDS prep
)
# example/quickstart_c
link_directories(${MESATEE_LIB_INSTALL_DIR})
add_executable(quickstart_c ${MESATEE_PROJECT_ROOT}/examples/quickstart_c/main.c)
add_dependencies(quickstart_c prep ${UNIXLIB_PREFIX}-mesatee_sdk_c)
target_include_directories(quickstart_c
PUBLIC ${MESATEE_PROJECT_ROOT}/mesatee_sdk/c_sdk/include/)
target_link_libraries(quickstart_c mesatee_sdk_c)
add_custom_command(TARGET quickstart_c POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/quickstart_c
${MESATEE_EXAMPLE_INSTALL_DIR}/quickstart_c
)
add_enclave_sig_target_n_hooks()