forked from apache/incubator-teaclave
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
148 lines (130 loc) · 5.2 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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()