cmake_minimum_required(VERSION 3.0) #确定版本号,必须步骤 project(encryptsql) #项目名称,随便写 set(TARGET encryptsql) set(top_builddir ../../..) ######################## common settings ############################################# option(USE_ENCRYPT "Whether to use encrypt function" ON) option(TIME_PORTRAIT "Whether to use time portrait" OFF) option(USE_LRU "Whether to use LRU" OFF) option(USE_SGX "Whether to use SGX" ON) option(SGX_ORE "Whether to use SGX for all ORE calculation" OFF) option(USE_ECALL_BATCH "Whether to use batched ecall" OFF) option(USE_SWITCHLESS "Whether to use SGX switchless" OFF) option(SGX_MODE "on for hw mode, off for sim mode" ON) option(SGX_MHE "Whether to use SGX for all MHE calculation" ON) set(SGX_SDK /opt/intel/sgxsdk) #SDK的安装路径 set(SGX_ARCH x64) set(SGX_DEBUG 1) set(CMAKE_BUILD_TYPE "Debug") # set(CMAKE_BUILD_TYPE "Release") ##################################################################################### set(SGX_COMMON_FLAGS -m64) set(SGX_LIBRARY_PATH ${SGX_SDK}/lib64) set(SGX_EDGER8R ${SGX_SDK}/bin/x64/sgx_edger8r) set(SGX_ENCLAVE_SIGNER ${SGX_SDK}/bin/x64/sgx_sign) #以上的参数都是根据自己的机器设置,注意不要设置错误 # if(SGX_ORE OR SGX_MHE) # 如果取消了USE_SGX却打开了SGX_ORE,有些预编译代码会出错 # if(NOT USE_SGX) # message(FATAL_ERROR "You want to use SGX to calculate ORE or MHE, but you didn't turn on the switch of SGX!") # endif() # endif() set(CMAKE_VERBOSE_MAKEFILE ON) if(${TIME_PORTRAIT}) add_definitions(-DTIME_PORTRAIT) endif() if(${USE_ECALL_BATCH}) add_definitions(-DECALL_BATCH) endif() if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") add_definitions(-DEDEBUG) else() add_definitions(-DNDEBUG) endif() if(${USE_LRU} ) add_definitions(-DUSE_LRU) endif() if(${USE_SWITCHLESS} ) add_definitions(-DUSE_SWITCHLESS) endif() if(${USE_ENCRYPT}) add_definitions(-DUSE_ENCRYPT) endif() if(USE_SGX) add_definitions(-DUSE_SGX) message(STATUS "Build with SGX!") if(${SGX_ORE}) add_definitions(-DSGX_ORE) endif() if(${SGX_MHE}) add_definitions(-DSGX_MHE) endif() else() message(STATUS "Build without SGX!") endif() # SET(CMAKE_C_FLAGS "-fno-omit-frame-pointer -fsanitize=address -maes -std=gnu99 -fvisibility=hidden -Wall -Wunused -Wmissing-prototypes -Wpointer-arith -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard") # SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -std=c++11 -fno-omit-frame-pointer -fsanitize=address") SET(CMAKE_C_FLAGS " ${CMAKE_C_FLAGS} -maes -std=gnu99 -fvisibility=hidden -Wall -Wunused -Wmissing-prototypes -Wpointer-arith -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -std=c++11 ") SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" ) message(${CMAKE_MODULE_PATH}) file(GLOB_RECURSE Cpp_Files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/encryptsql/*.cpp" ) file(GLOB_RECURSE C_Files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/encryptsql/*.c") # file(GLOB_RECURSE KMS_Cpp_Files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/KMS/*.cpp") file(GLOB_RECURSE DEK_Cpp_Files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/KMSAdapter/*.cpp") add_subdirectory(src/KMS) # file(GLOB_RECURSE UtilsFiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/utils/*.cpp") #set(Files "${Cpp_Files};${C_Files};src/utils/cryptoUtils.cpp;src/utils/cryptoCaller.cpp;src/utils/utils.cpp;src/utils/base64.c;src/utils/opensslUtils.cpp" # src/KMS/KeyManagementService.cpp # src/KMS/json.hpp) # set(Files "${Cpp_Files};${C_Files};${KMS_Cpp_Files};${DEK_Cpp_Files};src/utils/cryptoUtils.cpp;src/utils/cryptoCaller.cpp;src/utils/utils.cpp;src/utils/base64.c;src/utils/opensslUtils.cpp") set(Files "${Cpp_Files};${C_Files};${DEK_Cpp_Files};src/utils/cryptoUtils.cpp;src/utils/cryptoCaller.cpp;src/utils/utils.cpp;src/utils/base64.c;src/utils/opensslUtils.cpp") list(REMOVE_ITEM Files "src/crypto/symmetria_2/symmetria_2/Interface_c.c") # Filter values through regex # filter_regex({INCLUDE | EXCLUDE} [items...]) # Element will included into result list if # INCLUDE is specified and it matches with regex or # EXCLUDE is specified and it doesn't match with regex. # Example: # filter_regex(INCLUDE "(a|c)" LISTOUT a b c d) => a c # filter_regex(EXCLUDE "(a|c)" LISTOUT a b c d) => b d function(filter_regex _action _regex _listname) # check an action if("${_action}" STREQUAL "INCLUDE") set(has_include TRUE) elseif("${_action}" STREQUAL "EXCLUDE") set(has_include FALSE) else() message(FATAL_ERROR "Incorrect value for ACTION: ${_action}") endif() set(${_listname}) foreach(element ${ARGN}) string(REGEX MATCH ${_regex} result ${element}) if(result) if(has_include) list(APPEND ${_listname} ${element}) endif() else() if(NOT has_include) list(APPEND ${_listname} ${element}) endif() endif() endforeach() # put result in parent scope variable set(${_listname} ${${_listname}} PARENT_SCOPE) endfunction() function(combine_archives output_archive list_of_input_archives) set(TEMP_DIR /tmp) set(mri_file ${TEMP_DIR}/${output_archive}.mri) set(FULL_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH}/lib${output_archive}.a) file(WRITE ${mri_file} "create ${FULL_OUTPUT_PATH}\n") FOREACH(in_archive ${list_of_input_archives}) file(APPEND ${mri_file} "addlib ${LIBRARY_OUTPUT_PATH}/lib${in_archive}.a\n") ENDFOREACH() file(APPEND ${mri_file} "save\n") file(APPEND ${mri_file} "end\n") set(output_archive_dummy_file ${TEMP_DIR}/${output_archive}.dummy.cpp) add_custom_command(OUTPUT ${output_archive_dummy_file} COMMAND touch ${output_archive_dummy_file} DEPENDS ${list_of_input_archives}) add_library(${output_archive} STATIC ${output_archive_dummy_file}) add_custom_command(TARGET ${output_archive} POST_BUILD COMMAND ar -M < ${mri_file}) endfunction(combine_archives) filter_regex(EXCLUDE "libudf" Files ${Files}) filter_regex(EXCLUDE "Interface_c" Files ${Files}) filter_regex(EXCLUDE "symmetria" Files ${Files}) # message(STATUS ${SOURCES}) # find_package(PkgConfig REQUIRED) # pkg_search_module(OPENSSL REQUIRED openssl) # pkg_search_module(GMP REQUIRED gmp) find_package(jsoncpp REQUIRED) find_package(GMP REQUIRED) find_package(LOG4CPP REQUIRED) find_package(OpenSSL REQUIRED) find_package(Boost COMPONENTS system thread REQUIRED) find_package(Protobuf REQUIRED) find_package(OpenEnclave CONFIG REQUIRED) message(STATUS "OE_INCLUDE: ${OE_INCLUDEDIR}") message(STATUS "openenclave路径: ${OpenEnclave_DIR}") message("FOUND CONFIG: ${jsoncpp_CONFIG}") # 在所有 find_package 之后添加: message(STATUS "OpenSSL 包含路径: ${OPENSSL_INCLUDE_DIR}") message(STATUS "evp.h 路径: ${OPENSSL_INCLUDE_DIR}/openssl/evp.h") # 设置全局属性,确保子目录可以访问 set(ENCRYPTSQL_OPENSSL_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR} CACHE PATH "OpenSSL include directory" FORCE) mark_as_advanced(ENCRYPTSQL_OPENSSL_INCLUDE_DIR) get_target_property(jsoncpp_INCLUDE jsoncpp_lib INTERFACE_INCLUDE_DIRECTORIES) set(jsoncpp_LIBRARY jsoncpp_lib) set(jsoncpp_STATIC_LIBRARY jsoncpp_lib_static) SET(CryptoLib src/crypto/cryptolib) set(PG_LIB_PATH "/usr/local/postgresql/lib") set(PG_INCLUDE_PATH "/usr/local/postgresql/include") include_directories(src/utils ${OPENSSL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${CryptoLib}/symmetria ${jsoncpp_INCLUDE} ${PG_INCLUDE_PATH}) SET(Udf_Lib udf) SET(SYM_Lib symmetria) SET(HE_Lib he) SET(ORE_Lib ore) add_subdirectory(${CryptoLib}) # add_subdirectory(src/Server) add_subdirectory(src/KeyDistribution) if(${CMAKE_BUILD_TYPE} EQUAL "Debug") add_subdirectory(tests) endif() # add_subdirectory(tests) add_library(${TARGET} SHARED ${Files}) # target_link_libraries(${TARGET} ${OPENSSL_LIBRARIES} ${jsoncpp_LIBRARY} ${KMS_LIBRARY} -L${PG_LIB_PATH}) target_link_libraries(${TARGET} ${OPENSSL_LIBRARIES} ${jsoncpp_LIBRARY} ${KMS_LIBRARY} -L${PG_LIB_PATH} keydistribution_client tls_server_host) target_link_libraries(encryptsql /new_enc/postgresql-14.2/src/port/libpgport.a /new_enc/postgresql-14.2/src/common/libpgcommon.a ) target_link_libraries(${TARGET} -Wl,--no-as-needed /usr/local/lib/libgmssl.so -Wl,--as-needed) target_link_libraries(${TARGET} ${SYM_Lib}) target_include_directories(${TARGET} PRIVATE include pg_include ${KMS_INCLUDE_DIRS} src) # if(${USE_SGX}) # add_custom_target( genKey ALL # COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build/bin/EnclaveTest # DEPENDS ${TARGET} EnclaveTest # COMMENT "generate enclave key" # ) # endif() # 添加可执行文件 add_executable(backup src/bkup/backup.cpp) add_executable(restore src/bkup/restore.cpp) # 链接 stdc++fs(GCC 8/9 必需) target_link_libraries(backup stdc++fs) target_link_libraries(restore stdc++fs)