Files
encryptsql/CMakeLists.txt
blue-lemon0104 46fa58f6f8 merge
2026-04-07 15:45:41 +08:00

287 lines
10 KiB
CMake
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 DEK_Cpp_Files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/KMSAdapter/*.cpp")
add_subdirectory(src/KMS)
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} <regex> <listname> [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})
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)
# TODO UPDATE
set(PG_INSTALL_DIR "/usr/local/postgresql" CACHE PATH "PostgreSQL install dir")
set(PG_LIB_PATH "${PG_INSTALL_DIR}/lib")
set(PG_INCLUDE_PATH "${PG_INSTALL_DIR}/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/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}
keydistribution_client tls_server_host)
if(NO_ENCRYPTSQL_USE_RECOVERY)
target_compile_definitions(your_target PRIVATE NO_ENCRYPTSQL_USE_RECOVERY)
endif()
# TODO UPDATE
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++fsGCC 8/9 必需)
target_link_libraries(backup stdc++fs)
target_link_libraries(restore stdc++fs)
set(ENCRYPTSQL_INSTALL_DIR "/usr/local/postgresql" CACHE PATH "PostgreSQL install prefix (e.g., /usr/local/postgresql)")
set(ENCRYPTSQL_CONFIG_DIR "/etc/encryptsql" CACHE PATH "Directory for encryptsql config files (e.g., map.json)")
set(DK_SERVER_HOST "127.0.0.1" CACHE STRING "DK server host")
set(DK_SERVER_PORT "9443" CACHE STRING "DK server port")
if(NOT ENCRYPTSQL_INSTALL_DIR)
message(FATAL_ERROR "ENCRYPTSQL_INSTALL_DIR must be specified via -DENCRYPTSQL_INSTALL_DIR=...")
endif()
configure_file(en_config.h.in ../include/en_config.h @ONLY)
configure_file(en_config.h.in ../src/utils/en_config.h @ONLY)
target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
install(FILES
createudf.sql
mask_funcs.sql
DESTINATION ${ENCRYPTSQL_INSTALL_DIR}
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
install(FILES
config.json
map.json
DESTINATION ${ENCRYPTSQL_CONFIG_DIR}
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ)
install(TARGETS backup restore
RUNTIME DESTINATION ${ENCRYPTSQL_INSTALL_DIR}/bin)