summaryrefslogtreecommitdiff
path: root/main/src/main/cpp/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/main/cpp/CMakeLists.txt')
-rw-r--r--main/src/main/cpp/CMakeLists.txt207
1 files changed, 207 insertions, 0 deletions
diff --git a/main/src/main/cpp/CMakeLists.txt b/main/src/main/cpp/CMakeLists.txt
new file mode 100644
index 00000000..1aca0c36
--- /dev/null
+++ b/main/src/main/cpp/CMakeLists.txt
@@ -0,0 +1,207 @@
+cmake_minimum_required(VERSION 3.4.1)
+# Git version string
+
+include(GetGitRevisionDescription.cmake)
+git_describe(OPENVPN2_GIT "${CMAKE_CURRENT_SOURCE_DIR}/openvpn" "--tags" "--always" "--long")
+git_describe(OPENVPN3_GIT "${CMAKE_CURRENT_SOURCE_DIR}/openvpn3" "--tags" "--always" "--long")
+message ("OpenVPN 2.x version ${OPENVPN2_GIT}")
+message ("OpenVPN 3.x version ${OPENVPN3_GIT}")
+
+
+# Set mbedtls options
+OPTION(ENABLE_PROGRAMS "" OFF)
+OPTION(USE_SHARED_MBEDTLS_LIBRARY "" OFF)
+OPTION(ENABLE_TESTING "" OFF)
+
+#add_subdirectory(lzo)
+include(tools.cmake)
+include(lzo.cmake)
+include(openssl.cmake)
+
+# Super hacky way to determine flavour
+#-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/arne/software/icsopenvpn/main/build/intermediates/cmake/normal/debug/obj/arm64-v8a
+if (NOT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} MATCHES "build/intermediates/cmake/.*noovpn3.*/")
+ add_subdirectory(mbedtls)
+ add_custom_command(OUTPUT "ovpncli_wrap.cxx"
+ COMMAND ${CMAKE_COMMAND} -E make_directory ovpn3
+ COMMAND swig -outdir ovpn3
+ -c++
+ -java -package net.openvpn.ovpn3
+ -outcurrentdir
+ -I${CMAKE_SOURCE_DIR}/openvpn3/client
+ -I${CMAKE_SOURCE_DIR}/openvpn3
+ ${CMAKE_SOURCE_DIR}/openvpn3/javacli/ovpncli.i)
+
+ set(ovpn3_SRCS
+ openvpn3/client/ovpncli.cpp
+ ovpncli_wrap.cxx)
+
+ add_library(ovpn3 SHARED ${ovpn3_SRCS})
+
+ target_include_directories(ovpn3 PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/lzo/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/openvpn3
+ ${CMAKE_CURRENT_SOURCE_DIR}/asio/asio/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/openvpn3/client
+ ${CMAKE_CURRENT_SOURCE_DIR}/mbedtls/include
+ )
+
+ target_compile_options(ovpn3 PRIVATE -std=c++1y)
+ target_compile_definitions(ovpn3 PRIVATE
+ -DHAVE_CONFIG_H
+ -DHAVE_LZO
+ -DASIO_STANDALONE
+ -DUSE_ASIO
+ -DUSE_MBEDTLS
+ -DGIT_VERSION_STRING=\"${OPENVPN3_GIT}\"
+ -DNO_ROUTE_EXCLUDE_EMULATION
+ )
+ target_link_libraries(ovpn3 mbedtls mbedx509 mbedcrypto lzo_static_lib)
+else()
+ message ("Not budiling OpenVPN for output dir ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
+endif()
+
+add_library(opvpnutil SHARED opvpnutil/jniglue.c opvpnutil/scan_ifs.c opvpnutil/sslspeed.c)
+target_compile_definitions(opvpnutil PRIVATE -DTARGET_ARCH_ABI=\"${ANDROID_ABI}\")
+target_link_libraries(opvpnutil log crypto ssl)
+
+# The magic Jellybean keystore signing hack. Beware dragons and dlsyms magic ahead
+add_library(jbcrypto SHARED jbcrypto/jbcrypto.cpp)
+target_link_libraries(jbcrypto log dl)
+target_compile_options(jbcrypto PRIVATE)
+
+set(openvpn_srcs
+ src/compat/compat-basename.c
+ src/compat/compat-daemon.c
+ src/compat/compat-dirname.c
+ src/compat/compat-gettimeofday.c
+ src/compat/compat-inet_ntop.c
+ src/compat/compat-inet_pton.c
+ src/compat/compat-lz4.c
+ src/openvpn/argv.c
+ src/openvpn/base64.c
+ src/openvpn/buffer.c
+ src/openvpn/clinat.c
+ src/openvpn/console.c
+ src/openvpn/console_builtin.c
+ src/openvpn/crypto.c
+ src/openvpn/crypto_openssl.c
+ src/openvpn/crypto_mbedtls.c
+ src/openvpn/cryptoapi.c
+ src/openvpn/dhcp.c
+ src/openvpn/error.c
+ src/openvpn/event.c
+ src/openvpn/fdmisc.c
+ src/openvpn/forward.c
+ src/openvpn/fragment.c
+ src/openvpn/gremlin.c
+ src/openvpn/helper.c
+ src/openvpn/httpdigest.c
+ src/openvpn/init.c
+ src/openvpn/interval.c
+ src/openvpn/list.c
+ src/openvpn/lladdr.c
+ src/openvpn/lzo.c
+ src/openvpn/manage.c
+ src/openvpn/mbuf.c
+ src/openvpn/misc.c
+ src/openvpn/mroute.c
+ src/openvpn/mss.c
+ src/openvpn/mstats.c
+ src/openvpn/mtcp.c
+ src/openvpn/mtu.c
+ src/openvpn/mudp.c
+ src/openvpn/multi.c
+ src/openvpn/ntlm.c
+ src/openvpn/occ.c
+ src/openvpn/openvpn.c
+ src/openvpn/options.c
+ src/openvpn/otime.c
+ src/openvpn/packet_id.c
+ src/openvpn/perf.c
+ src/openvpn/pf.c
+ src/openvpn/ping.c
+ src/openvpn/pkcs11.c
+ src/openvpn/pkcs11_openssl.c
+ src/openvpn/platform.c
+ src/openvpn/plugin.c
+ src/openvpn/pool.c
+ src/openvpn/proto.c
+ src/openvpn/proxy.c
+ src/openvpn/ps.c
+ src/openvpn/push.c
+ src/openvpn/reliable.c
+ src/openvpn/route.c
+ src/openvpn/schedule.c
+ src/openvpn/session_id.c
+ src/openvpn/shaper.c
+ src/openvpn/sig.c
+ src/openvpn/socket.c
+ src/openvpn/socks.c
+ src/openvpn/ssl.c
+ src/openvpn/ssl_openssl.c
+ src/openvpn/ssl_mbedtls.c
+ src/openvpn/ssl_verify.c
+ src/openvpn/ssl_verify_openssl.c
+ src/openvpn/ssl_verify_mbedtls.c
+ src/openvpn/status.c
+ src/openvpn/tls_crypt.c
+ src/openvpn/tun.c
+ src/openvpn/comp-lz4.c
+ src/openvpn/comp.c
+ src/openvpn/compstub.c
+ )
+
+PREPEND(openvpn_srcs_with_path "openvpn" ${openvpn_srcs})
+add_library(openvpn SHARED ${openvpn_srcs_with_path})
+target_include_directories(openvpn PRIVATE
+ openvpn-config
+ openvpn/src/compat
+ openvpn/include
+ lzo/include
+ openvpn
+ )
+
+target_compile_definitions(openvpn PRIVATE
+ -DHAVE_CONFIG_H
+ -DCONFIGURE_GIT_REVISION=\"${OPENVPN2_GIT}\"
+ -DCONFIGURE_GIT_FLAGS=\"\"
+ -DTARGET_ABI=\"${ANDROID_ABI}\"
+ )
+
+target_compile_definitions(openvpn PRIVATE
+ -DENABLE_CRYPTO_OPENSSL=1
+ )
+target_link_libraries(openvpn crypto ssl lzo_static_lib)
+
+add_executable(pie_openvpn.${ANDROID_ABI} minivpn/minivpn.c)
+target_compile_options(pie_openvpn.${ANDROID_ABI} PRIVATE -fPIE)
+target_link_libraries(pie_openvpn.${ANDROID_ABI} PRIVATE openvpn -fPIE -pie)
+
+add_executable(nopie_openvpn.${ANDROID_ABI} minivpn/minivpn.c)
+target_link_libraries(nopie_openvpn.${ANDROID_ABI} PRIVATE openvpn)
+
+# Hack to copy OpenVPN binaries to assets directory
+SET(OVPN_ASSET_DIR ${CMAKE_SOURCE_DIR}/../../../build/ovpnassets)
+
+add_custom_target(makeassetdir ALL
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${OVPN_ASSET_DIR})
+
+add_custom_command(TARGET nopie_openvpn.${ANDROID_ABI} POST_BUILD
+ COMMAND
+ ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_BINARY_DIR}/nopie_openvpn.${ANDROID_ABI}
+ ${OVPN_ASSET_DIR}
+)
+
+add_custom_command(TARGET pie_openvpn.${ANDROID_ABI} POST_BUILD
+ COMMAND
+ ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_BINARY_DIR}/pie_openvpn.${ANDROID_ABI}
+ ${OVPN_ASSET_DIR}
+)
+
+# Hack that these targets are really executed
+add_dependencies(opvpnutil pie_openvpn.${ANDROID_ABI} nopie_openvpn.${ANDROID_ABI})
+add_dependencies(pie_openvpn.${ANDROID_ABI} makeassetdir)
+add_dependencies(nopie_openvpn.${ANDROID_ABI} makeassetdir)