Skip to content

Instantly share code, notes, and snippets.

@opo2000tw
Forked from olexandr-tymoshenko/CMakeLists.txt
Created October 27, 2021 04:01
Show Gist options
  • Select an option

  • Save opo2000tw/b049b7a4022ff92bcc3b722ae7d62e48 to your computer and use it in GitHub Desktop.

Select an option

Save opo2000tw/b049b7a4022ff92bcc3b722ae7d62e48 to your computer and use it in GitHub Desktop.

Revisions

  1. @olexandr-tymoshenko olexandr-tymoshenko created this gist Oct 3, 2016.
    584 changes: 584 additions & 0 deletions CMakeLists.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,584 @@
    cmake_minimum_required(VERSION 3.4.1)

    set(CMAKE_VERBOSE_MAKEFILE on)

    message(set ${PROXY_PLUGIN_BUILD})
    ##### GLOBAL VARS
    if (${PROXY_PLUGIN_BUILD})
    set(CS_VPN_SOURCES ${PROJECT_SOURCE_DIR}/../../)

    set(CS_VPN_LIBS ${PROJECT_SOURCE_DIR}/../../csproxy/libs-android)

    set(LIB_PATH_INCLUDES ${PROJECT_SOURCE_DIR}/../libhydranative/hydra/includes)
    set(LIB_PATH ${PROJECT_SOURCE_DIR}/../libhydranative/hydra/libs)
    set(3RD_PATH_LIB_PATH ${PROJECT_SOURCE_DIR}/../libhydranative/3rd_parties)

    else()

    set(CS_VPN_SOURCES ${PROJECT_SOURCE_DIR}/../libhydranative/cs-vpn)
    set(CS_VPN_LIBS ${PROJECT_SOURCE_DIR}/../libhydranative/cs-vpn/csproxy/libs-android)

    set(LIB_PATH_INCLUDES ${PROJECT_SOURCE_DIR}/../libhydranative/hydra/includes)
    set(LIB_PATH ${PROJECT_SOURCE_DIR}/../libhydranative/hydra/libs)
    set(3RD_PATH_LIB_PATH ${PROJECT_SOURCE_DIR}/../libhydranative/3rd_parties)

    endif()

    message(${CS_VPN_SOURCES})
    set(COMMON_CFLAGS "-fvisibility=hidden -fasynchronous-unwind-tables")


    set(COMMON_CFLAGS ${COMMON_CFLAGS} -g -DDEBUG)

    ##########################################################
    # build cpufeatures as a static lib
    include_directories(./ndk_helper
    ${ANDROID_NDK}/sources/android/cpufeatures)

    add_library(cpufeatures STATIC
    ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c)


    add_library( libssl_static
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libssl_static

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libssl.a )

    add_library( libcrypto_static
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libcrypto_static

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libcrypto.a )

    ######### PROXY PLUGIN

    add_library(
    proxy_plugin
    STATIC

    ${CS_VPN_SOURCES}/conntrack.c
    ${CS_VPN_SOURCES}/proxy_plugin_bev_channel.c
    ${CS_VPN_SOURCES}/proxy_plugin_bev_udp_channel.c
    ${CS_VPN_SOURCES}/proxy_plugin_lwip_channel.c
    ${CS_VPN_SOURCES}/proxy_plugin_lwip_udp_channel.c
    ${CS_VPN_SOURCES}/proxy_plugin_bev_sock_tcp_channel.c
    ${CS_VPN_SOURCES}/proxy_plugin_bev_sock_udp_channel.c
    ${CS_VPN_SOURCES}/proxy_plugin_ctx.c
    ${CS_VPN_SOURCES}/proxy_plugin_filters.c
    ${CS_VPN_SOURCES}/proxy_plugin_filter_ssl.c
    ${CS_VPN_SOURCES}/proxy_plugin_filter_zlib.c
    ${CS_VPN_SOURCES}/proxy_plugin.c
    ${CS_VPN_SOURCES}/proxy_plugin_templates.c
    ${CS_VPN_SOURCES}/proxy_plugin_bypass_per_ip.c
    ${CS_VPN_SOURCES}/proxy_plugin_comScore.c
    ${CS_VPN_SOURCES}/proxy_plugin_comScore_lib.c
    ${CS_VPN_SOURCES}/proxy_plugin_comScore_csproxy.c
    )
    target_link_libraries(proxy_plugin
    cpufeatures
    )
    set_target_properties(proxy_plugin PROPERTIES COMPILE_FLAGS
    "-std=c99 -fvisibility=hidden -fasynchronous-unwind-tables -DHAVE_LIBEVENT_OPENSSL -Wall -Wno-unused-function -fno-strict-aliasing")
    ######### CELPER

    add_library( # Sets the name of the library.
    celper

    # Sets the library as a shared library.
    SHARED

    # Provides a relative path to your source file(s).
    # Associated headers in the same location as their source
    # file are automatically included.
    ../libhydranative/jni/celper.cpp )

    find_library( # Sets the name of the path variable.
    log-lib

    # Specifies the name of the NDK library that
    # you want CMake to locate.
    log )

    include_directories(../libhydranative/cs-vpn/csproxy/libs/include)

    target_link_libraries( # Specifies the target library.
    celper

    # Links the target library to the log library
    # included in the NDK.
    libssl_static
    libcrypto_static
    ${log-lib}
    -Wl,--no-warn-shared-textrel )

    ######### JUDY
    message(warning ${ANDROID_ABI})
    if (${ANDROID_ABI} MATCHES "armeabi*.")
    set(POSTFIX ".android.arm" )
    else()
    set(POSTFIX ".android.${ANDROID_ABI}")
    endif()

    add_library( judy
    SHARED
    IMPORTED )
    set_target_properties( # Specifies the target library.
    judy

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${PROJECT_SOURCE_DIR}/../libhydranative/3rd_parties/${POSTFIX}/libJudy.so )
    file(COPY

    ${PROJECT_SOURCE_DIR}/../libhydranative/3rd_parties/${POSTFIX}/libJudy.so
    DESTINATION
    ${PROJECT_SOURCE_DIR}/../libhydranative/prebuilt-libs/${ANDROID_ABI}/ )


    ######### HYDRA

    add_library( viper
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    viper

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/libviper_android${POSTFIX}.a )

    add_library( afvpn
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    afvpn

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/libafvpn_client${POSTFIX}.a )
    add_library( lproxy
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    lproxy

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/liblproxy${POSTFIX}.a )

    add_library( tranceport
    STATIC
    IMPORTED )


    set_target_properties( # Specifies the target library.
    tranceport

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/libtranceport_client${POSTFIX}.a )



    add_library( libevent2
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libevent2

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${3RD_PATH_LIB_PATH}/${POSTFIX}/libevent.a )

    add_library( libevent
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libevent

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${3RD_PATH_LIB_PATH}/${POSTFIX}/libevent.a )


    add_library( libevent2_pthreads
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libevent2_pthreads

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${3RD_PATH_LIB_PATH}/${POSTFIX}/libevent_pthreads.a )

    add_library( libevent2_openssl
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libevent2_openssl

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${3RD_PATH_LIB_PATH}/${POSTFIX}/libevent_openssl.a )

    add_library( proxy_plugin2
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    proxy_plugin2

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/libproxyplugin${POSTFIX}.a )

    add_library( libssl_static2
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libssl_static2

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${3RD_PATH_LIB_PATH}/${POSTFIX}/libssl.a )

    add_library( yajl
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    yajl

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libyajl_s.a )

    add_library( ezxml
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    ezxml

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libezxml.a )

    add_library( curl
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    curl

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libcurl.a )

    add_library( uuid
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    uuid

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libuuid.a )

    add_library( pcre2-8
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    pcre2-8

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libpcre2-8.a )


    add_library( pcre2-posix
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    pcre2-posix

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libpcre2-posix.a )

    add_library( cbo
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    cbo

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/libcbo.client${POSTFIX}.a )

    add_library( libsocat
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libsocat

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${3RD_PATH_LIB_PATH}/${POSTFIX}/libxio.a )


    add_library( libeccser
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    libeccser

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/libeccser_client${POSTFIX}.a )


    add_library( performance_testing
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    performance_testing

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/libperformance_testing${POSTFIX}.a )

    add_library( vpr_stats
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    vpr_stats

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${LIB_PATH}/libafvprstats${POSTFIX}.a )


    add_library( jansson_static
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    jansson_static

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${3RD_PATH_LIB_PATH}/${POSTFIX}/libjansson.a )


    add_library( csproxy
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    csproxy

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libcsproxy_static.a )


    add_library( pmtutils
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    pmtutils

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libpmtutils.a )

    add_library( pmt63
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    pmt63

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libpmt63_static.a )


    add_library( fuzzy
    STATIC
    IMPORTED )

    set_target_properties( # Specifies the target library.
    fuzzy

    # Specifies the parameter you want to define.
    PROPERTIES IMPORTED_LOCATION

    # Provides the path to the library you want to import.
    ${CS_VPN_LIBS}/${ANDROID_ABI}/libfuzzy.a )


    add_library( # Sets the name of the library.
    hydra

    # Sets the library as a shared library.
    SHARED

    # Provides a relative path to your source file(s).
    # Associated headers in the same location as their source
    # file are automatically included.
    ../libhydranative/jni/arc4random.c
    ../libhydranative/jni/event_list.c
    ../libhydranative/jni/hydra_jni.c
    ../libhydranative/jni/socket_list.c
    ../libhydranative/jni/hydra_ptm.c )

    include_directories(
    ${CS_VPN_SOURCES}/csproxy/csproxy/include
    ${CS_VPN_SOURCES}/csproxy/libs/include
    ${CS_VPN_SOURCES}/csproxy/pmt63/include
    ${CS_VPN_SOURCES}/csproxy/fuzzy/include
    ${LIB_PATH_INCLUDES}/hydra/tranceport
    ${LIB_PATH_INCLUDES}/libevent${POSTFIX}/include
    ${LIB_PATH_INCLUDES}/openssl${POSTFIX}
    ${LIB_PATH_INCLUDES}/openssl${POSTFIX}/crypto
    ${LIB_PATH_INCLUDES}/openssl${POSTFIX}/include
    ${LIB_PATH_INCLUDES}/judy${POSTFIX}/judy-1.0.5/src
    ${LIB_PATH_INCLUDES}/hydra
    ${LIB_PATH_INCLUDES}/hydra/afvpn
    ${LIB_PATH_INCLUDES}/hydra/viper/afcommon/lib
    ${LIB_PATH_INCLUDES}/hydra/viper/afcommon/include
    ${LIB_PATH_INCLUDES}/hydra/viper/afcommon/include/arch
    ${LIB_PATH_INCLUDES}/hydra/lwip/src/include
    ${LIB_PATH_INCLUDES}/hydra/lwip/src/include/ipv4
    ${LIB_PATH_INCLUDES}/jansson${POSTFIX}/src
    ${LIB_PATH_INCLUDES}/jansson${POSTFIX}/android
    )

    set_target_properties(hydra PROPERTIES COMPILE_FLAGS
    "-fvisibility=hidden -fasynchronous-unwind-tables -std=c99 -Wall -Wno-unused-function -fno-strict-aliasing -DSTDC_HEADERS -DPROXY_PLUGIN_DEBUG -DHAVE_LIBEVENT_OPENSSL")

    set_target_properties(hydra PROPERTIES LINKER_LANGUAGE CXX)

    if (${PROXY_PLUGIN_BUILD})
    target_link_libraries( hydra
    PUBLIC
    afvpn tranceport
    viper lproxy performance_testing proxy_plugin vpr_stats
    libeccser libsocat jansson_static
    csproxy pmt63 pmtutils fuzzy pcre2-posix pcre2-8
    ezxml curl uuid yajl
    cbo
    afvpn tranceport
    libevent libevent2_pthreads libevent2_openssl
    libssl_static libcrypto_static
    cpufeatures
    judy
    z
    android
    cpufeatures
    ${log-lib} )
    else()
    target_link_libraries( hydra
    PUBLIC
    afvpn tranceport
    viper lproxy performance_testing proxy_plugin2 vpr_stats
    libeccser libsocat jansson_static
    csproxy pmt63 pmtutils fuzzy pcre2-posix pcre2-8
    ezxml curl uuid yajl
    cbo
    afvpn tranceport
    libevent2 libevent2_pthreads libevent2_openssl
    libssl_static2 libcrypto_static
    cpufeatures
    judy
    z
    android
    cpufeatures
    ${log-lib} )
    endif()