| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| set(TEACLAVE_PROJECT_ROOT ${PROJECT_SOURCE_DIR}) |
| set(TEACLAVE_BUILD_ROOT ${PROJECT_BINARY_DIR}) |
| set(TEACLAVE_OUT_DIR ${PROJECT_BINARY_DIR}/intermediate) |
| set(TEACLAVE_INSTALL_DIR ${PROJECT_SOURCE_DIR}/release) |
| set(TEACLAVE_EDL_DIR ${PROJECT_SOURCE_DIR}/edl) |
| set(TEACLAVE_SERVICE_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/services) |
| set(TEACLAVE_EXAMPLE_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/examples) |
| set(TEACLAVE_BIN_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/bin) |
| set(TEACLAVE_CLI_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/cli) |
| set(TEACLAVE_TOOL_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/tool) |
| set(TEACLAVE_DCAP_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/dcap) |
| set(TEACLAVE_LIB_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/lib) |
| set(TEACLAVE_DOC_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/docs) |
| set(TEACLAVE_TEST_INSTALL_DIR ${TEACLAVE_INSTALL_DIR}/tests) |
| set(TEACLAVE_AUDITORS_DIR ${TEACLAVE_SERVICE_INSTALL_DIR}/auditors) |
| set(TEACLAVE_EXAMPLE_AUDITORS_DIR ${TEACLAVE_EXAMPLE_INSTALL_DIR}/auditors) |
| set(TEACLAVE_TARGET_DIR ${PROJECT_BINARY_DIR}/target) |
| |
| execute_process(COMMAND bash -c "mktemp -u -d -t teaclave_symlinks.XXXXXXXXXXXX" |
| OUTPUT_VARIABLE TEACLAVE_SYMLINKS) |
| string(STRIP "${TEACLAVE_SYMLINKS}" TEACLAVE_SYMLINKS) |
| set(TEACLAVE_SYMLINKS ${TEACLAVE_SYMLINKS}) |
| |
| set(THIRD_PARTY_DIR ${PROJECT_SOURCE_DIR}/third_party) |
| set(UNTRUSTED_TARGET_DIR ${TEACLAVE_TARGET_DIR}/untrusted) |
| set(UNIX_TARGET_DIR ${TEACLAVE_TARGET_DIR}/unix) |
| set(TRUSTED_TARGET_DIR ${TEACLAVE_TARGET_DIR}/trusted) |
| # build.rs will read ENV{ENCLAVE_OUT_DIR} for linking |
| set(ENCLAVE_OUT_DIR ${TEACLAVE_OUT_DIR}) |
| set(RUST_SGX_SDK ${PROJECT_SOURCE_DIR}/third_party/rust-sgx-sdk) |
| set(MT_SCRIPT_DIR ${PROJECT_SOURCE_DIR}/cmake/scripts) |
| set(MT_UNIX_TOML_DIR ${PROJECT_BINARY_DIR}/cmake_tomls/unix_app) |
| set(MT_SGXLIB_TOML_DIR ${PROJECT_BINARY_DIR}/cmake_tomls/sgx_trusted_lib) |
| set(MT_SGXAPP_TOML_DIR ${PROJECT_BINARY_DIR}/cmake_tomls/sgx_untrusted_app) |
| |
| set(SGX_EDGER8R ${SGX_SDK}/bin/x64/sgx_edger8r) |
| set(SGX_ENCLAVE_SIGNER ${SGX_SDK}/bin/x64/sgx_sign) |
| set(SGX_LIBRARY_PATH ${SGX_SDK}/lib64) |
| |
| set(SGX_COMMON_CFLAGS -m64 -O2) |
| set(SGX_UNTRUSTED_CFLAGS ${SGX_COMMON_CFLAGS} -fPIC -Wno-attributes |
| -I${SGX_SDK}/include -I${RUST_SGX_SDK}/edl) |
| set(SGX_TRUSTED_CFLAGS |
| ${SGX_COMMON_CFLAGS} |
| -nostdinc |
| -fvisibility=hidden |
| -fpie |
| -fstack-protector |
| -I${RUST_SGX_SDK}/edl |
| -I${RUST_SGX_SDK}/common/inc |
| -I${SGX_SDK}/include |
| -I${SGX_SDK}/include/tlibc |
| -I${SGX_SDK}/include/stlport |
| -I${SGX_SDK}/include/epid) |
| join_string("${SGX_COMMON_CFLAGS}" " " STR_SGX_COMMON_CFLAGS) |
| join_string("${SGX_UNTRUSTED_CFLAGS}" " " STR_SGX_UNTRUSTED_CFLAGS) |
| join_string("${SGX_TRUSTED_CFLAGS}" " " STR_SGX_TRUSTED_CFLAGS) |
| |
| if(NOT "${SGX_MODE}" STREQUAL "HW") |
| set(Trts_Library_Name sgx_trts_sim) |
| set(Service_Library_Name sgx_tservice_sim) |
| else() |
| set(Trts_Library_Name sgx_trts) |
| set(Service_Library_Name sgx_tservice) |
| endif() |
| |
| set(SGX_ENCLAVE_FEATURES -Z package-features --features mesalock_sgx) |
| string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) |
| if(CMAKE_BUILD_TYPE_LOWER STREQUAL "release") |
| set(TARGET release) |
| set(CARGO_BUILD_FLAGS --release) |
| else() |
| set(TARGET debug) |
| set(CARGO_BUILD_FLAGS "") |
| |
| if(COV) |
| check_exe_dependencies(lcov llvm-cov) |
| set(SGX_ENCLAVE_FEATURES -Z package-features --features "mesalock_sgx cov") |
| set(CARGO_INCREMENTAL 0) |
| set(RUSTFLAGS "${RUSTFLAGS} -D warnings -Zprofile -Ccodegen-units=1 \ |
| -Cllvm_args=-inline-threshold=0 -Coverflow-checks=off") |
| endif() |
| endif() |
| |
| if(OFFLINE) |
| set(EXTRA_CARGO_FLAGS "--offline") |
| endif() |
| |
| set(UNIXAPP_PREFIX "unixapp") |
| set(UNIXLIB_PREFIX "unixlib") |
| set(SGXAPP_PREFIX "sgxapp") |
| set(SGXLIB_PREFIX "sgxlib") |
| set(SGX_MODULES ${SGX_APPS}) |
| |
| # generate SGXLIB_TARGETS (sgxlib-fns sgxlib-kms ...) |
| new_list_with_prefix(SGXLIB_TARGETS "${SGXLIB_PREFIX}-" ${SGX_MODULES}) |
| |
| set(TEACLAVE_COMMON_ENVS |
| TEACLAVE_PROJECT_ROOT=${TEACLAVE_PROJECT_ROOT} |
| TEACLAVE_BUILD_ROOT=${TEACLAVE_BUILD_ROOT} |
| TEACLAVE_OUT_DIR=${TEACLAVE_OUT_DIR} |
| TEACLAVE_SERVICE_INSTALL_DIR=${TEACLAVE_SERVICE_INSTALL_DIR} |
| TEACLAVE_EXAMPLE_INSTALL_DIR=${TEACLAVE_EXAMPLE_INSTALL_DIR} |
| TEACLAVE_BIN_INSTALL_DIR=${TEACLAVE_BIN_INSTALL_DIR} |
| TEACLAVE_CLI_INSTALL_DIR=${TEACLAVE_CLI_INSTALL_DIR} |
| TEACLAVE_TOOL_INSTALL_DIR=${TEACLAVE_TOOL_INSTALL_DIR} |
| TEACLAVE_DCAP_INSTALL_DIR=${TEACLAVE_DCAP_INSTALL_DIR} |
| TEACLAVE_LIB_INSTALL_DIR=${TEACLAVE_LIB_INSTALL_DIR} |
| TEACLAVE_DOC_INSTALL_DIR=${TEACLAVE_DOC_INSTALL_DIR} |
| TEACLAVE_TEST_INSTALL_DIR=${TEACLAVE_TEST_INSTALL_DIR} |
| TEACLAVE_AUDITORS_DIR=${TEACLAVE_AUDITORS_DIR} |
| TEACLAVE_EXAMPLE_AUDITORS_DIR=${TEACLAVE_EXAMPLE_AUDITORS_DIR} |
| TEACLAVE_TARGET_DIR=${TEACLAVE_TARGET_DIR} |
| TEACLAVE_CFG_DIR=${PROJECT_SOURCE_DIR} |
| TEACLAVE_BUILD_CFG_DIR=${PROJECT_SOURCE_DIR} |
| TEACLAVE_EDL_DIR=${TEACLAVE_EDL_DIR} |
| TEACLAVE_SYMLINKS=${TEACLAVE_SYMLINKS} |
| RUSTFLAGS=${RUSTFLAGS} |
| SGX_SDK=${SGX_SDK} |
| SGX_MODE=${SGX_MODE} |
| DCAP=${DCAP} |
| ENCLAVE_OUT_DIR=${ENCLAVE_OUT_DIR} |
| RUSTUP_TOOLCHAIN=${RUSTUP_TOOLCHAIN} |
| RUST_SGX_SDK=${RUST_SGX_SDK} |
| MT_SCRIPT_DIR=${MT_SCRIPT_DIR} |
| MT_SGXAPP_TOML_DIR=${MT_SGXAPP_TOML_DIR} |
| CARGO_INCREMENTAL=${CARGO_INCREMENTAL} |
| CMAKE_C_COMPILER=${CMAKE_C_COMPILER} |
| CC=${MT_SCRIPT_DIR}/cc_wrapper.sh |
| MT_RUSTC_WRAPPER=${MT_SCRIPT_DIR}/rustc_wrapper.sh) |
| |
| set(TARGET_PREP_ENVS |
| ${TEACLAVE_COMMON_ENVS} |
| CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR} |
| CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} |
| MESAPY_VERSION=${MESAPY_VERSION} |
| SGX_EDGER8R=${SGX_EDGER8R} |
| CMAKE_AR=${CMAKE_AR} |
| DCAP=${DCAP}) |
| |
| set(TARGET_SGXLIB_ENVS |
| ${TEACLAVE_COMMON_ENVS} |
| SGX_LIBRARY_PATH=${SGX_LIBRARY_PATH} |
| SGX_ENCLAVE_SIGNER=${SGX_ENCLAVE_SIGNER} |
| Service_Library_Name=${Service_Library_Name} |
| Trts_Library_Name=${Trts_Library_Name} |
| TRUSTED_TARGET_DIR=${TRUSTED_TARGET_DIR} |
| TARGET=${TARGET}) |
| |
| message("SGX_SDK=${SGX_SDK}") |
| message("SGX_MODE=${SGX_MODE}") |
| message("RUSTUP_TOOLCHAIN=${RUSTUP_TOOLCHAIN}") |
| message("DCAP=${DCAP}") |
| message("BUILD_TYPE=${TARGET}") |
| message("TEACLAVE_SYMLINKS=${TEACLAVE_SYMLINKS}") |