cmake_minimum_required(VERSION 3.5) project(tfe) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(Version) include(Package) add_definitions(-D_GNU_SOURCE) set(CMAKE_CXX_STANDARD 11) set(CMAKE_C_STANDARD 11) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2") elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") endif () if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo) endif() if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set (CMAKE_INSTALL_PREFIX "/opt/tsg/tfe" CACHE PATH "default install path" FORCE ) endif() # Global compile options option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE) option(ENABLE_WARNING_ALL "Enable all optional warnings which are desirable for normal code" TRUE) if(NOT ASAN_OPTION) option(ENABLE_SANITIZE_ADDRESS "Enable AddressSanitizer" FALSE) else() option(ENABLE_SANITIZE_ADDRESS "Enable AddressSanitizer" TRUE) endif() option(ENABLE_SANITIZE_THREAD "Enable ThreadSanitizer" FALSE) # Plugins option(ENABLE_PLUGIN_HTTP "Enable HTTP support" TRUE) option(ENABLE_PLUGIN_TRAFFIC_MIRROR "Enable traffic mirror" TRUE) option(ENABLE_PLUGIN_DOH "Enable Doh business" TRUE) option(ENABLE_PLUGIN_PANGU_HTTP "Enable Pangu-HTTP business" TRUE) option(ENABLE_PLUGIN_HTTP2 "Enable HTTP2 business" TRUE) option(ENABLE_PLUGIN_SSL_POLICY "Enable SSL policy support" TRUE) option(ENABLE_PLUGIN_TCP_POLICY "Enable TCP policy support" TRUE) option(ENABLE_PLUGIN_CHAINING_POLICY "Enable Chaining policy support" TRUE) if(ENABLE_PIC) set(CMAKE_POSITION_INDEPENDENT_CODE 1) endif() find_package(LIBURING) if (SUPPORT_LIBURING) add_definitions(-DSUPPORT_LIBURING=1) message(STATUS "Support liburing") else() message(STATUS "Not support liburing") endif() find_package(LIBBPF) if (SUPPORT_BPF) add_definitions(-DSUPPORT_BPF=1) message(STATUS "Support BPF") else() message(STATUS "Not support BPF") endif() if(ENABLE_WARNING_ALL) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") endif() if(ENABLE_SANITIZE_ADDRESS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan") elseif(ENABLE_SANITIZE_THREAD) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan") endif() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lelf") if(ENABLE_SANITIZE_ADDRESS AND ENABLE_SANITIZE_THREAD) message(WARNING "Both ENABLE_SANITIZE_ADDRESS and ENABLE_SANITIZE_THREAD set, only ENABLE_SANITIZE_ADDRESS effected.") endif() add_custom_target("install-program" COMMAND ${CMAKE_COMMAND} ARGS -DCOMPONENT=Program -P cmake_install.cmake) add_custom_target("install-profile" COMMAND ${CMAKE_COMMAND} ARGS -DCOMPONENT=Profile -P cmake_install.cmake) enable_testing() add_subdirectory(conf) add_subdirectory(resource) add_subdirectory(vendor) add_subdirectory(common) add_subdirectory(plugin) add_subdirectory(platform) add_subdirectory(script) add_subdirectory(bpf)