wener
7 years ago
6 changed files with 449 additions and 380 deletions
Split View
Diff Options
-
410CMakeLists.txt
-
0build/.gitkeep
-
17cmake/config.h.cmake
-
200cmake/configure.cmake
-
14cmake/shadowsocks-libev.pc.cmake
-
188src/CMakeLists.txt
@ -0,0 +1,200 @@ |
|||
|
|||
# ------------------------------------------------------------- |
|||
# config.h |
|||
|
|||
# If we generate config.h by automake |
|||
#include_directories(.) |
|||
|
|||
# Use cmake to generate config.h |
|||
include(CheckIncludeFiles) |
|||
include(CheckFunctionExists) |
|||
include(CheckSymbolExists) |
|||
include(CheckLibraryExists) |
|||
include(CheckTypeSize) |
|||
include(CheckCSourceCompiles) |
|||
|
|||
# Define if building universal (internal helper macro) |
|||
# AC_APPLE_UNIVERSAL_BUILD |
|||
set(CONNECT_IN_PROGRESS "EINPROGRESS") |
|||
set(CONNECT_IN_PROGRESS "EINPROGRESS" CACHE STRING "") |
|||
|
|||
|
|||
check_include_files(dlfcn.h HAVE_DLFCN_H) |
|||
check_include_files(ev.h HAVE_EV_H) |
|||
check_include_files(fcntl.h HAVE_FCNTL_H) |
|||
check_function_exists(fork HAVE_FORK) |
|||
check_function_exists(getpwnam_r HAVE_GETPWNAM_R) |
|||
check_function_exists(inet_ntop HAVE_INET_NTOP) |
|||
check_include_files(inttypes.h HAVE_INTTYPES_H) |
|||
set(HAVE_IPv6 1) |
|||
check_include_files(langinfo.h HAVE_LANGINFO_H) |
|||
set(HAVE_LIBPCRE 1) |
|||
check_library_exists(socket socket "" HAVE_LIBSOCKET) |
|||
check_include_files(limits.h HAVE_LIMITS_H) |
|||
check_include_files(linux/if.h HAVE_LINUX_IF_H) |
|||
check_include_files(linux/netfilter_ipv4.h HAVE_LINUX_NETFILTER_IPV4_H) |
|||
check_include_files(linux/netfilter_ipv6/ip6_tables.h HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H) |
|||
check_include_files(locale.h HAVE_LOCALE_H) |
|||
|
|||
|
|||
check_function_exists(malloc HAVE_MALLOC) |
|||
check_include_files(memory.h HAVE_MEMORY_H) |
|||
check_function_exists(memset HAVE_MEMSET) |
|||
|
|||
check_include_files(netdb.h HAVE_NETDB_H) |
|||
check_include_files(netinet/in.h HAVE_NETINET_IN_H) |
|||
check_include_files(net/if.h HAVE_NET_IF_H) |
|||
check_include_files(pcre.h HAVE_PCRE_H) |
|||
check_include_files(pcre/pcre.h HAVE_PCRE_PCRE_H) |
|||
check_symbol_exists(PTHREAD_PRIO_INHERIT pthread.h HAVE_PTHREAD_PRIO_INHERIT) |
|||
|
|||
check_function_exists(select HAVE_SELECT) |
|||
check_function_exists(setresuid HAVE_SETRESUID) |
|||
check_function_exists(setreuid HAVE_SETREUID) |
|||
check_function_exists(setrlimit HAVE_SETRLIMIT) |
|||
check_function_exists(socket HAVE_SOCKET) |
|||
|
|||
check_include_files(stdint.h HAVE_STDINT_H) |
|||
check_include_files(stdlib.h HAVE_STDLIB_H) |
|||
|
|||
check_function_exists(strerror HAVE_STRERROR) |
|||
|
|||
check_include_files(strings.h HAVE_STRINGS_H) |
|||
check_include_files(string.h HAVE_STRING_H) |
|||
check_include_files(sys/ioctl.h HAVE_SYS_IOCTL_H) |
|||
check_include_files(sys/select.h HAVE_SYS_SELECT_H) |
|||
check_include_files(sys/socket.h HAVE_SYS_SOCKET_H) |
|||
check_include_files(sys/stat.h HAVE_SYS_STAT_H) |
|||
check_include_files(sys/types.h HAVE_SYS_TYPES_H) |
|||
check_include_files(sys/wait.h HAVE_SYS_WAIT_H) |
|||
check_include_files(udns.h HAVE_UDNS_H) |
|||
check_include_files(unistd.h HAVE_UNISTD_H) |
|||
|
|||
check_function_exists(fork HAVE_FORK) |
|||
check_function_exists(vfork HAVE_VFORK) |
|||
check_include_files(vfork.h HAVE_VFORK_H) |
|||
if (HAVE_VFORK) |
|||
set(HAVE_WORKING_VFORK 1) |
|||
endif () |
|||
if (HAVE_FORK) |
|||
set(HAVE_WORKING_FORK 1) |
|||
endif () |
|||
|
|||
|
|||
# Define to the sub-directory where libtool stores uninstalled libraries. |
|||
set(LT_OBJDIR ".libs/") |
|||
set(NDEBUG 1) |
|||
set(PACKAGE ${PROJECT_NAME}) |
|||
set(PACKAGE_BUGREPORT max.c.lv@gmail.com) |
|||
set(PACKAGE_NAME ${PROJECT_NAME}) |
|||
#set(PACKAGE_VERSION ${PROJECT_VERSION}) |
|||
set(PACKAGE_VERSION 3.0.2) |
|||
set(PACKAGE_STRING "${PROJECT_NAME} ${PACKAGE_VERSION}") |
|||
set(PACKAGE_TARNAME ${PROJECT_NAME}) |
|||
set(PACKAGE_URL "") |
|||
|
|||
#message(${PACKAGE_NAME} - v${PACKAGE_VERSION} - v${PROJECT_VERSION}) |
|||
|
|||
# PTHREAD_CREATE_JOINABLE |
|||
|
|||
# Define as the return type of signal handlers (`int' or `void'). |
|||
set(RETSIGTYPE void) |
|||
|
|||
# Define to the type of arg 1 for `select'. |
|||
set(SELECT_TYPE_ARG1 int) |
|||
|
|||
# Define to the type of args 2, 3 and 4 for `select'. |
|||
set(SELECT_TYPE_ARG234 "(fd_set *)") |
|||
|
|||
# Define to the type of arg 5 for `select'. |
|||
set(SELECT_TYPE_ARG5 "(struct timeval *)") |
|||
|
|||
# Define to 1 if you have the ANSI C header files. |
|||
set(STDC_HEADERS 1) |
|||
|
|||
|
|||
check_include_files(sys/time.h time.h TIME_WITH_SYS_TIME) |
|||
|
|||
|
|||
# If the compiler supports a TLS storage class define it to that here |
|||
check_c_source_compiles(" |
|||
__thread int tls; |
|||
int main(void) { return 0; }" |
|||
HAVE_GCC_THREAD_LOCAL_STORAGE) |
|||
if (HAVE_GCC_THREAD_LOCAL_STORAGE) |
|||
set(TLS __thread) |
|||
endif () |
|||
|
|||
set(_ALL_SOURCE 1) |
|||
set(_GNU_SOURCE 1) |
|||
set(_POSIX_PTHREAD_SEMANTICS 1) |
|||
set(_TANDEM_SOURCE 1) |
|||
set(__EXTENSIONS__ 1) |
|||
# USE_SYSTEM_SHARED_LIB |
|||
set(VERSION ${PACKAGE_VERSION}) |
|||
# TODO WORDS_BIGENDIAN |
|||
# _MINIX |
|||
# _POSIX_1_SOURCE |
|||
# _POSIX_SOURCE |
|||
# _UINT8_T |
|||
|
|||
# Define to empty if `const' does not conform to ANSI C. |
|||
# undef const |
|||
|
|||
# Define to `__inline__' or `__inline' if that's what the C compiler |
|||
# calls it, or to nothing if 'inline' is not supported under any name. |
|||
#ifndef __cplusplus |
|||
#undef inline |
|||
#endif |
|||
# TODO Assume we got inline support |
|||
# https://cmake.org/Wiki/CMakeTestInline |
|||
|
|||
# Define to the equivalent of the C99 'restrict' keyword, or to |
|||
# nothing if this is not supported. Do not define if restrict is |
|||
# supported directly. |
|||
#define restrict __restrict |
|||
if (NOT "c_restrict" IN_LIST CMAKE_C_COMPILE_FEATURES) |
|||
message("No restrict") |
|||
set(restrict __restrict) |
|||
endif () |
|||
|
|||
# Define to `int' if <sys/types.h> does not define. |
|||
# undef pid_t |
|||
# Define to the type of an unsigned integer type of width exactly 16 bits if |
|||
# such a type exists and the standard includes do not define it. |
|||
# undef uint16_t |
|||
# Define to the type of an unsigned integer type of width exactly 8 bits if |
|||
# such a type exists and the standard includes do not define it. |
|||
# undef uint8_t |
|||
set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h) |
|||
check_type_size(pid_t PID_T) |
|||
check_type_size(size_t SIZE_T) |
|||
check_type_size(ssize_t SSIZE_T) |
|||
set(CMAKE_EXTRA_INCLUDE_FILES) |
|||
|
|||
check_type_size(uint16_t UINT16_T) |
|||
check_type_size(uint8_t UINT8_T) |
|||
|
|||
## Inverse |
|||
if (NOT HAVE_PID_T) |
|||
set(pid_t int) |
|||
endif () |
|||
if (NOT HAVE_SIZE_T) |
|||
set(size_t "unsigned int") |
|||
endif () |
|||
if (NOT HAVE_SSIZE_T) |
|||
set(ssize_t int) |
|||
endif () |
|||
|
|||
if (NOT HAVE_UINT8_T) |
|||
set(uint8_t "unsigned char") |
|||
endif () |
|||
if (NOT HAVE_UINT16_T) |
|||
set(uint16_t "unsigned short") |
|||
endif () |
|||
|
|||
|
|||
# Define as `fork' if `vfork' does not work. |
|||
if (NOT HAVE_WORKING_VFORK) |
|||
set(vfork fork) |
|||
endif () |
@ -0,0 +1,14 @@ |
|||
prefix=@prefix@ |
|||
exec_prefix=${prefix}/@CMAKE_INSTALL_BINDIR@ |
|||
libdir=${exec_prefix}/@CMAKE_INSTALL_FULL_LIBDIR@ |
|||
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ |
|||
sharedir=${prefix}/@CMAKE_INSTALL_DATAROOTDIR@ |
|||
mandir=${prefix}/@CMAKE_INSTALL_MANDIR@ |
|||
|
|||
Name: @PROJECT_NAME@ |
|||
Description: @PROJECT_DESC@ |
|||
URL: @PROJECT_URL@ |
|||
Version: @PROJECT_VERSION@ |
|||
Requires: |
|||
Cflags: -I${includedir} |
|||
Libs: -L${libdir} -lshadowsocks-libev -lcrypto |
@ -0,0 +1,188 @@ |
|||
# redir need linux/* stuff |
|||
if (LINUX) |
|||
option(WITH_SS_REDIR "Build ss-redir" ON) |
|||
else () |
|||
option(WITH_SS_REDIR "Build ss-redir" OFF) |
|||
endif () |
|||
|
|||
|
|||
set(SS_SNI_SOURCE |
|||
http.c |
|||
tls.c |
|||
rule.c |
|||
) |
|||
|
|||
set(SS_CRYPTO_SOURCE |
|||
crypto.c |
|||
aead.c |
|||
stream.c |
|||
base64.c |
|||
) |
|||
|
|||
set(SS_PLUGIN_SOURCE |
|||
plugin.c |
|||
) |
|||
|
|||
set(SS_SHARED_SOURCES |
|||
utils.c |
|||
jconf.c |
|||
json.c |
|||
netutils.c |
|||
) |
|||
|
|||
set(LIBSHADOWSOCKS_LIBEV_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
udprelay.c |
|||
cache.c |
|||
acl.c |
|||
local.c |
|||
${SS_CRYPTO_SOURCE} |
|||
${SS_PLUGIN_SOURCE} |
|||
${SS_SNI_SOURCE}) |
|||
|
|||
set(SS_LOCAL_SOURCE |
|||
${LIBSHADOWSOCKS_LIBEV_SOURCE} |
|||
|
|||
) |
|||
|
|||
set(SS_TUNNEL_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
udprelay.c |
|||
cache.c |
|||
tunnel.c |
|||
${SS_CRYPTO_SOURCE} |
|||
${SS_PLUGIN_SOURCE} |
|||
) |
|||
|
|||
set(SS_SERVER_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
udprelay.c |
|||
cache.c |
|||
acl.c |
|||
resolv.c |
|||
server.c |
|||
${SS_CRYPTO_SOURCE} |
|||
${SS_PLUGIN_SOURCE} |
|||
${SS_SNI_SOURCE} |
|||
) |
|||
|
|||
set(SS_MANAGER_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
manager.c |
|||
) |
|||
|
|||
set(SS_REDIR_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
udprelay.c |
|||
cache.c |
|||
redir.c |
|||
${SS_CRYPTO_SOURCE} |
|||
${SS_PLUGIN_SOURCE} |
|||
${SS_SNI_SOURCE} |
|||
) |
|||
|
|||
|
|||
find_library(LIBSODIUM libsodium.a) |
|||
find_library(LIBMBEDTLS libmbedtls.a) |
|||
find_library(LIBMBEDCRYPTO libmbedcrypto.a) |
|||
find_library(LIBEV libev.a) |
|||
find_library(LIBUDNS libudns.a) |
|||
find_library(LIBPCRE libpcre.a) |
|||
|
|||
find_library(LIBSODIUM_SHARED sodium) |
|||
find_library(LIBMBEDTLS_SHARED mbedtls) |
|||
find_library(LIBMBEDCRYPTO_SHARED mbedcrypto) |
|||
find_library(LIBEV_SHARED ev) |
|||
find_library(LIBUDNS_SHARED udns) |
|||
find_library(LIBPCRE_SHARED pcre) |
|||
|
|||
list(APPEND DEPS ${LIBEV} ${LIBUDNS} ${LIBPCRE} ${LIBSODIUM} ${LIBMBEDTLS} ${LIBMBEDCRYPTO}) |
|||
list(APPEND DEPS_SHARED ${LIBEV_SHARED} ${LIBUDNS_SHARED} ${LIBPCRE_SHARED} ${LIBSODIUM_SHARED} ${LIBMBEDTLS_SHARED} ${LIBMBEDCRYPTO_SHARED}) |
|||
|
|||
# Add our targets |
|||
add_executable(ss-server ${SS_SERVER_SOURCE}) |
|||
add_executable(ss-tunnel ${SS_TUNNEL_SOURCE}) |
|||
add_executable(ss-manager ${SS_MANAGER_SOURCE}) |
|||
add_executable(ss-local ${SS_LOCAL_SOURCE}) |
|||
if (WITH_SS_REDIR) |
|||
add_executable(ss-redir ${SS_REDIR_SOURCE}) |
|||
else () |
|||
add_executable(ss-redir EXCLUDE_FROM_ALL ${SS_REDIR_SOURCE}) |
|||
endif () |
|||
add_library(shadowsocks-libev STATIC ${LIBSHADOWSOCKS_LIBEV_SOURCE}) |
|||
|
|||
|
|||
target_compile_definitions(ss-server PUBLIC -DMODULE_REMOTE) |
|||
target_compile_definitions(ss-tunnel PUBLIC -DMODULE_TUNNEL) |
|||
target_compile_definitions(ss-manager PUBLIC -DMODULE_MANAGER) |
|||
target_compile_definitions(ss-local PUBLIC -DMODULE_LOCAL) |
|||
target_compile_definitions(ss-redir PUBLIC -DMODULE_REDIR) |
|||
target_compile_definitions(shadowsocks-libev PUBLIC -DMODULE_LOCAL) |
|||
|
|||
target_link_libraries(ss-server cork ipset ${DEPS}) |
|||
target_link_libraries(ss-tunnel cork ${DEPS}) |
|||
target_link_libraries(ss-manager cork ${LIBEV} ${LIBUDNS}) |
|||
target_link_libraries(ss-local cork ipset ${DEPS}) |
|||
target_link_libraries(ss-redir cork ipset ${DEPS}) |
|||
target_link_libraries(shadowsocks-libev cork ipset ${DEPS}) |
|||
|
|||
# ------------------------------------------------------------------ |
|||
# Shared |
|||
add_executable(ss-server-shared ${SS_SERVER_SOURCE}) |
|||
add_executable(ss-tunnel-shared ${SS_TUNNEL_SOURCE}) |
|||
add_executable(ss-manager-shared ${SS_MANAGER_SOURCE}) |
|||
add_executable(ss-local-shared ${SS_LOCAL_SOURCE}) |
|||
if (WITH_SS_REDIR) |
|||
add_executable(ss-redir-shared ${SS_REDIR_SOURCE}) |
|||
else () |
|||
add_executable(ss-redir-shared EXCLUDE_FROM_ALL ${SS_REDIR_SOURCE}) |
|||
endif () |
|||
add_library(shadowsocks-libev-shared SHARED ${LIBSHADOWSOCKS_LIBEV_SOURCE}) |
|||
|
|||
target_compile_definitions(ss-server-shared PUBLIC -DMODULE_REMOTE) |
|||
target_compile_definitions(ss-tunnel-shared PUBLIC -DMODULE_TUNNEL) |
|||
target_compile_definitions(ss-manager-shared PUBLIC -DMODULE_MANAGER) |
|||
target_compile_definitions(ss-local-shared PUBLIC -DMODULE_LOCAL) |
|||
target_compile_definitions(ss-redir-shared PUBLIC -DMODULE_REDIR) |
|||
target_compile_definitions(shadowsocks-libev-shared PUBLIC -DMODULE_LOCAL) |
|||
|
|||
target_link_libraries(ss-server-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
target_link_libraries(ss-tunnel-shared cork-shared ${DEPS_SHARED}) |
|||
target_link_libraries(ss-manager-shared cork-shared ${LIBEV_SHARED} ${LIBUDNS_SHARED}) |
|||
target_link_libraries(ss-local-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
target_link_libraries(ss-redir-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
target_link_libraries(shadowsocks-libev-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
|
|||
|
|||
set_target_properties(ss-server-shared PROPERTIES OUTPUT_NAME ss-server) |
|||
set_target_properties(ss-tunnel-shared PROPERTIES OUTPUT_NAME ss-tunnel) |
|||
set_target_properties(ss-manager-shared PROPERTIES OUTPUT_NAME ss-manager) |
|||
set_target_properties(ss-local-shared PROPERTIES OUTPUT_NAME ss-local) |
|||
set_target_properties(ss-redir-shared PROPERTIES OUTPUT_NAME ss-redir) |
|||
|
|||
set_target_properties(ss-server-shared ss-tunnel-shared ss-manager-shared ss-local-shared ss-redir-shared |
|||
PROPERTIES |
|||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/shared/bin" |
|||
) |
|||
|
|||
set_target_properties(shadowsocks-libev-shared PROPERTIES OUTPUT_NAME shadowsocks-libev) |
|||
target_compile_definitions(shadowsocks-libev-shared PUBLIC -DMODULE_LOCAL) |
|||
target_link_libraries(shadowsocks-libev-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
|
|||
|
|||
#install(DIRECTORY DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) |
|||
#install(TARGETS ss-server RUNTIME DESTINATION bin) |
|||
#install(TARGETS ss-tunnel RUNTIME DESTINATION bin) |
|||
#install(TARGETS ss-manager RUNTIME DESTINATION bin) |
|||
#install(TARGETS ss-local RUNTIME DESTINATION bin) |
|||
|
|||
install(DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} |
|||
DESTINATION bin |
|||
FILES_MATCHING PATTERN "ss-*") |
|||
|
|||
|
|||
add_custom_target(distclean |
|||
COMMAND ${CMAKE_COMMAND} -E echo WARNING: distclean target is not functional |
|||
COMMAND ${CMAKE_COMMAND} -E echo Use 'git clean -fdx' instead |
|||
VERBATIM |
|||
) |
Write
Preview
Loading…
Cancel
Save