set(SSR_MAIN_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "SSR main directory" FORCE) option(ENABLE_DUMP_INFO "Out put the stage info." ON) if (ENABLE_DUMP_INFO) add_definitions("-D__PRINT_INFO__") endif() if (MSVC) add_definitions("-DSODIUM_STATIC") add_definitions("-DMBEDTLS_API") add_definitions("-D__MINGW32__ -D__MINGW64_VERSION_MAJOR") add_definitions("-DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_WARNINGS") add_definitions("-DUSE_CRYPTO_MBEDTLS -D_WINSOCK_DEPRECATED_NO_WARNINGS -DUDP_RELAY_ENABLE") add_definitions("-DHAVE_PCRE_H") endif() set(SOURCE_FILES_SNI shadowsocks.h socks5.h socks5.c http.c tls.c ) set(SOURCE_FILES_OBFS strtrim.c strtrim.h ssr_cipher_names.c ssr_cipher_names.h aead.c aead.h ppbloom.c ppbloom.h obfs/auth.c obfs/auth_chain.c obfs/base64.c obfs/crc32.c obfs/http_simple.c obfs/obfs.c obfs/obfsutil.c obfs/tls1.2_ticket.c obfs/tls1.2_ticket.h obfs/verify.c) set(SOURCE_FILES_CLIENT ../depends/http-parser/http_parser.c ../depends/http-parser/http_parser.h ../depends/http-parser/http_parser_wrapper.c ../depends/http-parser/http_parser_wrapper.h cache.c cache.h encrypt.c encrypt.h ssrbuffer.c ssrbuffer.h ssrutils.c ssrutils.h udprelay.c udprelay.h udp_ssr_client.c client/defs.h client/listener.c client/main.c client/s5.c client/s5.h ssr_executive.c ssr_executive.h ssr_qr_code.c ssr_qr_code.h config_json.c config_json.h sockaddr_universal.h sockaddr_universal.c tunnel.c tunnel.h client/client.c client/tls_cli.c client/tls_cli.h websocket_basic.c websocket_basic.h text_in_color.c text_in_color.h dump_info.c dump_info.h cmd_line_parser.c cmd_line_parser.h exe_file_path.c exe_file_path.h daemon_wrapper.c daemon_wrapper.h ${SOURCE_FILES_OBFS} client/ssr_client_api.h) set(SOURCE_FILES_SERVER ../depends/http-parser/http_parser.c ../depends/http-parser/http_parser.h ../depends/http-parser/http_parser_wrapper.c ../depends/http-parser/http_parser_wrapper.h websocket_basic.c websocket_basic.h text_in_color.c text_in_color.h dump_info.c dump_info.h client/s5.c client/s5.h ssrutils.h ssrutils.c ssrbuffer.c ssrbuffer.h encrypt.c udprelay.c udp_ssr_server.c cache.c ip_addr_cache.c ip_addr_cache.h ssr_executive.c ssr_executive.h cmd_line_parser.c cmd_line_parser.h exe_file_path.c exe_file_path.h daemon_wrapper.c daemon_wrapper.h config_json.c config_json.h sockaddr_universal.h sockaddr_universal.c tunnel.c tunnel.h server/server.c ${SOURCE_FILES_OBFS}) include_directories(obfs) include_directories(client) IF(MSVC) include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../win32/include ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src ) ENDIF(MSVC) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${LIBBLOOMDIR}) include_directories(${LIBUVDIR}/include) include_directories(${libsodium_include_dirs}) include_directories(${LIB_JSON_C_BIN_DIR}/..) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../depends/http-parser) include_directories(${URI_ENCODE_DIR}) include_directories(${CSTL_ROOT_DIR}/inc) if(USE_CRYPTO_MBEDTLS) include_directories(${MBEDTLS_ROOT_DIR}/include) include_directories(${UVMBED_DIR}/include) endif() if (MSVC) list ( APPEND SOURCE_FILES_CLIENT ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src/getopt.c ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src/getopt_long.c ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src/strncasecmp.c ) list ( APPEND SOURCE_FILES_SERVER ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src/getopt.c ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src/getopt_long.c ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src/strncasecmp.c ) endif(MSVC) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") add_definitions(-Wall -Werror -ggdb3 -std=c99 -Wextra -pedantic) add_definitions("-D_DEFAULT_SOURCE -D_GNU_SOURCE -D__FUNCTION__=__func__") endif() if (UNIX AND (NOT APPLE) AND (NOT ANDROID)) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -static-libstdc++ -static-libgcc") endif() add_definitions(-DUDP_RELAY_ENABLE) if(ANDROID) #[[ include_directories(${LIB_ANCILLARY_DIR}) LIST(APPEND SOURCE_FILES_CLIENT android.c) add_executable(ssr-client ${SOURCE_FILES_CLIENT}) set_target_properties(ssr-client PROPERTIES COMPILE_DEFINITIONS MODULE_LOCAL) set_target_properties(ssr-client PROPERTIES PREFIX "lib" SUFFIX ".so") target_link_libraries(ssr-client ancillary json-c uv_a cstl mbedtls sodium bloom m log uv-mbed uri-encode) ]] include_directories(${LIB_FAKE_DLFCN_DIR}) list ( APPEND SOURCE_FILES_CLIENT android.c ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src/getopt.c ${CMAKE_CURRENT_SOURCE_DIR}/../win32/src/getopt_long.c ) add_library(ssr-client SHARED ${SOURCE_FILES_CLIENT}) target_compile_definitions(ssr-client PRIVATE MODULE_LOCAL=1 HAVE_INT_OPTRESET=1) target_link_libraries(ssr-client fake-dlfcn json-c uv_a cstl mbedtls sodium bloom m log uv-mbed uri-encode) target_include_directories(ssr-client PRIVATE ${LIB_FAKE_DLFCN_DIR}) else() add_executable(ssr-client ${SOURCE_FILES_CLIENT}) add_executable(ssr-server ${SOURCE_FILES_SERVER}) set_target_properties(ssr-client PROPERTIES COMPILE_DEFINITIONS MODULE_LOCAL) set_target_properties(ssr-server PROPERTIES COMPILE_DEFINITIONS MODULE_REMOTE) #target_compile_definitions(libssr-native PRIVATE MODULE_LOCAL LIB_ONLY) #set_target_properties(libssr-native PROPERTIES SUFFIX ".la") set (ss_lib_common json-c uv_a cstl ) if (MSVC) else() list ( APPEND ss_lib_common m ) endif() set (ss_lib_net ${ss_lib_common} mbedtls # /usr/local/lib/libcrypto.a # libcrypto.a # ${LIBCRYPTO} # sodium bloom ) if (WIN32) list ( APPEND ss_lib_net Ws2_32 ) endif() target_link_libraries(ssr-client ${ss_lib_net} uv-mbed uri-encode) target_link_libraries(ssr-server ${ss_lib_net}) install(TARGETS ssr-server ssr-client RUNTIME DESTINATION /usr/bin) install(FILES ../config.json DESTINATION /etc/ssr-native/) if(CMAKE_BUILD_TYPE MATCHES Debug) # target_compile_definitions(ssr-server PUBLIC __AUTO_EXIT__=1 __AUTO_EXIT_TIMEOUT__=10000) endif() endif()