mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2025-06-28 20:05:08 +03:00
Replace hand-written Makefiles with CMake
This commit is contained in:
parent
59dbca72c8
commit
7f3c63f894
7
CMakeLists.txt
Normal file
7
CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
|
||||||
|
project(SoftEtherVPN LANGUAGES C)
|
||||||
|
|
||||||
|
set(default_build_type "Release")
|
||||||
|
|
||||||
|
add_subdirectory(src)
|
94
configure
vendored
94
configure
vendored
@ -17,96 +17,12 @@ echo
|
|||||||
echo 'Welcome to the corner-cutting configure script !'
|
echo 'Welcome to the corner-cutting configure script !'
|
||||||
echo
|
echo
|
||||||
|
|
||||||
OS=""
|
if [ ! -d "tmp" ]; then
|
||||||
case "`uname -s`" in
|
mkdir tmp
|
||||||
Linux)
|
|
||||||
OS="linux"
|
|
||||||
;;
|
|
||||||
FreeBSD)
|
|
||||||
OS="freebsd"
|
|
||||||
;;
|
|
||||||
SunOS)
|
|
||||||
OS="solaris"
|
|
||||||
;;
|
|
||||||
Darwin)
|
|
||||||
OS="macos"
|
|
||||||
;;
|
|
||||||
OpenBSD)
|
|
||||||
OS="openbsd"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo 'Select your operating system below:'
|
|
||||||
echo ' 1: Linux'
|
|
||||||
echo ' 2: FreeBSD'
|
|
||||||
echo ' 3: Solaris'
|
|
||||||
echo ' 4: Mac OS X'
|
|
||||||
echo ' 5: OpenBSD'
|
|
||||||
echo
|
|
||||||
echo -n 'Which is your operating system (1 - 5) ? : '
|
|
||||||
read TMP
|
|
||||||
echo
|
|
||||||
if test "$TMP" = "1"
|
|
||||||
then
|
|
||||||
OS="linux"
|
|
||||||
fi
|
|
||||||
if test "$TMP" = "2"
|
|
||||||
then
|
|
||||||
OS="freebsd"
|
|
||||||
fi
|
|
||||||
if test "$TMP" = "3"
|
|
||||||
then
|
|
||||||
OS="solaris"
|
|
||||||
fi
|
|
||||||
if test "$TMP" = "4"
|
|
||||||
then
|
|
||||||
OS="macos"
|
|
||||||
fi
|
|
||||||
if test "$TMP" = "5"
|
|
||||||
then
|
|
||||||
OS="openbsd"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$OS" = ""
|
(cd tmp && cmake .. || exit 1)
|
||||||
then
|
|
||||||
echo "Wrong number."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
CPU=""
|
echo ""
|
||||||
case "`uname -m`" in
|
|
||||||
x86_64|amd64|aarch64|arm64|armv8*|mips64|ppc64|sparc64|alpha|ia64)
|
|
||||||
CPU=64bit
|
|
||||||
;;
|
|
||||||
i?86|x86pc|i86pc|armv4*|armv5*|armv6*|armv7*)
|
|
||||||
CPU=32bit
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo 'Select your CPU bits below:'
|
|
||||||
echo ' 1: 32-bit'
|
|
||||||
echo ' 2: 64-bit'
|
|
||||||
echo
|
|
||||||
echo -n 'Which is the type of your CPU (1 - 2) ? : '
|
|
||||||
read TMP
|
|
||||||
echo
|
|
||||||
if test "$TMP" = "1"
|
|
||||||
then
|
|
||||||
CPU="32bit"
|
|
||||||
fi
|
|
||||||
if test "$TMP" = "2"
|
|
||||||
then
|
|
||||||
CPU="64bit"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$CPU" = ""
|
echo "The Makefile is generated. Run 'make -C tmp' to build SoftEther VPN."
|
||||||
then
|
|
||||||
echo "Wrong number."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
cp src/makefiles/${OS}_${CPU}.mak Makefile
|
|
||||||
|
|
||||||
echo "The Makefile is generated. Run 'make' to build SoftEther VPN."
|
|
||||||
|
246
src/CMakeLists.txt
Normal file
246
src/CMakeLists.txt
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
|
macro(install_wrapper_script target destination)
|
||||||
|
get_filename_component(filename ${target} NAME)
|
||||||
|
|
||||||
|
file(WRITE ${CMAKE_SOURCE_DIR}/tmp/script/${filename} "#!/bin/sh\n")
|
||||||
|
file(APPEND ${CMAKE_SOURCE_DIR}/tmp/script/${filename} "${target} \"$@\"\n")
|
||||||
|
file(APPEND ${CMAKE_SOURCE_DIR}/tmp/script/${filename} "exit $?\n")
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/tmp/script/${filename}
|
||||||
|
DESTINATION ${destination}
|
||||||
|
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||||
|
)
|
||||||
|
endmacro(install_wrapper_script)
|
||||||
|
|
||||||
|
# Cedar communication module
|
||||||
|
file(GLOB SOURCES_CEDAR "Cedar/*.c")
|
||||||
|
file(GLOB HEADERS_CEDAR "Cedar/*.h")
|
||||||
|
|
||||||
|
add_library(cedar STATIC ${SOURCES_CEDAR} ${HEADERS_CEDAR})
|
||||||
|
|
||||||
|
set_target_properties(cedar
|
||||||
|
PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/Cedar"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/Cedar"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/Cedar"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Mayaqua kernel
|
||||||
|
file(GLOB SOURCES_MAYAQUA "Mayaqua/*.c")
|
||||||
|
file(GLOB HEADERS_MAYAQUA "Mayaqua/*.h")
|
||||||
|
|
||||||
|
add_library(mayaqua STATIC ${SOURCES_MAYAQUA} ${HEADERS_MAYAQUA})
|
||||||
|
|
||||||
|
target_include_directories(mayaqua PUBLIC Mayaqua)
|
||||||
|
|
||||||
|
set_target_properties(mayaqua
|
||||||
|
PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/Mayaqua"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/Mayaqua"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/Mayaqua"
|
||||||
|
)
|
||||||
|
|
||||||
|
# hamcorebuilder utility
|
||||||
|
add_executable(hamcorebuilder hamcorebuilder/hamcorebuilder.c)
|
||||||
|
|
||||||
|
set_target_properties(hamcorebuilder
|
||||||
|
PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp"
|
||||||
|
)
|
||||||
|
|
||||||
|
# vpnserver
|
||||||
|
add_executable(vpnserver vpnserver/vpnserver.c)
|
||||||
|
|
||||||
|
set_target_properties(vpnserver
|
||||||
|
PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/vpnserver"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/vpnserver"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/vpnserver"
|
||||||
|
)
|
||||||
|
|
||||||
|
get_target_property(VPNSERVER_RUNTIME_OUTPUT_DIRECTORY vpnserver RUNTIME_OUTPUT_DIRECTORY)
|
||||||
|
|
||||||
|
# vpnclient
|
||||||
|
add_executable(vpnclient vpnclient/vpncsvc.c)
|
||||||
|
|
||||||
|
set_target_properties(vpnclient
|
||||||
|
PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/vpnclient"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/vpnclient"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/vpnclient"
|
||||||
|
)
|
||||||
|
|
||||||
|
get_target_property(VPNCLIENT_RUNTIME_OUTPUT_DIRECTORY vpnclient RUNTIME_OUTPUT_DIRECTORY)
|
||||||
|
|
||||||
|
# vpnbridge
|
||||||
|
add_executable(vpnbridge vpnbridge/vpnbridge.c)
|
||||||
|
|
||||||
|
set_target_properties(vpnbridge
|
||||||
|
PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/vpnbridge"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/vpnbridge"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/vpnbridge"
|
||||||
|
)
|
||||||
|
|
||||||
|
get_target_property(VPNBRIDGE_RUNTIME_OUTPUT_DIRECTORY vpnbridge RUNTIME_OUTPUT_DIRECTORY)
|
||||||
|
|
||||||
|
# vpncmd
|
||||||
|
add_executable(vpncmd vpncmd/vpncmd.c)
|
||||||
|
|
||||||
|
set_target_properties(vpncmd
|
||||||
|
PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/tmp/vpncmd"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/vpncmd"
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/vpncmd"
|
||||||
|
)
|
||||||
|
|
||||||
|
get_target_property(VPNCMD_RUNTIME_OUTPUT_DIRECTORY vpncmd RUNTIME_OUTPUT_DIRECTORY)
|
||||||
|
|
||||||
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
add_definitions(-D_DEBUG -DDEBUG)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||||
|
add_definitions(-DNDEBUG -DVPN_SPEED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
add_definitions(-DCPU_64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_definitions(-D_REENTRANT -DREENTRANT -D_THREAD_SAFE -D_THREADSAFE -DTHREAD_SAFE -DTHREADSAFE -D_FILE_OFFSET_BITS=64)
|
||||||
|
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsigned-char")
|
||||||
|
|
||||||
|
# Add /src to the include paths
|
||||||
|
include_directories(.)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
message(FATAL_ERROR "Windows compilation via CMake is currently not supported.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(UNIX)
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2")
|
||||||
|
|
||||||
|
add_definitions(-DUNIX)
|
||||||
|
|
||||||
|
find_library(LIB_PTHREAD pthread)
|
||||||
|
find_library(LIB_READLINE readline)
|
||||||
|
find_library(LIB_NCURSES ncurses)
|
||||||
|
find_library(LIB_Z z)
|
||||||
|
|
||||||
|
# In some cases libiconv is not included in libc
|
||||||
|
find_library(LIB_ICONV iconv)
|
||||||
|
|
||||||
|
# This is required in order to link to the correct OpenSSL library
|
||||||
|
find_library(LIB_SSL
|
||||||
|
NAMES ssl
|
||||||
|
HINTS "/usr/local/opt/openssl/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(LIB_CRYPTO
|
||||||
|
NAMES crypto
|
||||||
|
HINTS "/usr/local/opt/openssl/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
|
add_definitions(-DUNIX_LINUX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||||
|
add_definitions(-DUNIX_BSD -DBRIDGE_BPF -DNO_VLAN)
|
||||||
|
include_directories(SYSTEM /usr/local/include)
|
||||||
|
link_directories(SYSTEM /usr/local/lib)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
||||||
|
add_definitions(-DUNIX_BSD -DNO_VLAN)
|
||||||
|
include_directories(SYSTEM /usr/local/include)
|
||||||
|
link_directories(SYSTEM /usr/local/lib)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
|
||||||
|
add_definitions(-DUNIX_SOLARIS -DNO_VLAN)
|
||||||
|
target_link_libraries(mayaqua nsl socket)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
|
||||||
|
add_definitions(-DUNIX_MACOS -DBRIDGE_PCAP)
|
||||||
|
include_directories(SYSTEM /usr/local/opt/openssl/include)
|
||||||
|
link_directories(SYSTEM /usr/local/opt/openssl/lib)
|
||||||
|
target_link_libraries(cedar pcap)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(mayaqua ${LIB_PTHREAD} ${LIB_SSL} ${LIB_CRYPTO} ${LIB_READLINE} ${LIB_NCURSES} ${LIB_Z})
|
||||||
|
|
||||||
|
if(LIB_ICONV)
|
||||||
|
target_link_libraries(mayaqua ${LIB_ICONV})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(hamcorebuilder cedar mayaqua)
|
||||||
|
|
||||||
|
target_link_libraries(vpnserver cedar mayaqua)
|
||||||
|
target_link_libraries(vpnclient cedar mayaqua)
|
||||||
|
target_link_libraries(vpnbridge cedar mayaqua)
|
||||||
|
target_link_libraries(vpncmd cedar mayaqua)
|
||||||
|
|
||||||
|
# hamcore.se2 archive file
|
||||||
|
add_custom_target(hamcore-archive-build
|
||||||
|
ALL
|
||||||
|
COMMAND hamcorebuilder ${CMAKE_SOURCE_DIR}/src/bin/hamcore/ ${CMAKE_SOURCE_DIR}/tmp/hamcore.se2
|
||||||
|
DEPENDS hamcorebuilder
|
||||||
|
COMMENT "Building hamcore.se2 archive file..."
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
# Copy hamcore.se2 to vpnserver's directory
|
||||||
|
add_custom_command(TARGET hamcore-archive-build
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tmp/hamcore.se2 ${VPNSERVER_RUNTIME_OUTPUT_DIRECTORY}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Copy hamcore.se2 to vpnclient's directory
|
||||||
|
add_custom_command(TARGET hamcore-archive-build
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tmp/hamcore.se2 ${VPNCLIENT_RUNTIME_OUTPUT_DIRECTORY}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Copy hamcore.se2 to vpnbridge's directory
|
||||||
|
add_custom_command(TARGET hamcore-archive-build
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tmp/hamcore.se2 ${VPNBRIDGE_RUNTIME_OUTPUT_DIRECTORY}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Copy hamcore.se2 to vpncmd's directory
|
||||||
|
add_custom_command(TARGET hamcore-archive-build
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tmp/hamcore.se2 ${VPNCMD_RUNTIME_OUTPUT_DIRECTORY}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Copy contents of "bin" directory to /usr
|
||||||
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/bin/"
|
||||||
|
DESTINATION "/usr"
|
||||||
|
PATTERN "*"
|
||||||
|
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create wrapper scripts in the user's binaries directory, which is usually "/usr/local/bin".
|
||||||
|
# This is required because symlinks use the folder they are in as working directory.
|
||||||
|
install_wrapper_script("/usr/vpnserver/vpnserver" ${CMAKE_INSTALL_FULL_BINDIR})
|
||||||
|
install_wrapper_script("/usr/vpnclient/vpnclient" ${CMAKE_INSTALL_FULL_BINDIR})
|
||||||
|
install_wrapper_script("/usr/vpnbridge/vpnbridge" ${CMAKE_INSTALL_FULL_BINDIR})
|
||||||
|
install_wrapper_script("/usr/vpncmd/vpncmd" ${CMAKE_INSTALL_FULL_BINDIR})
|
||||||
|
|
||||||
|
# Print message after installing the targets
|
||||||
|
install(CODE "message(\"\n----------------------------------------------------------------------------------------------------------------------------\")")
|
||||||
|
install(CODE "message(\"Build completed successfully.\n\")")
|
||||||
|
install(CODE "message(\"Execute 'vpnserver start' to run the SoftEther VPN Server background service.\")")
|
||||||
|
install(CODE "message(\"Execute 'vpnbridge start' to run the SoftEther VPN Bridge background service.\")")
|
||||||
|
install(CODE "message(\"Execute 'vpnclient start' to run the SoftEther VPN Client background service.\")")
|
||||||
|
install(CODE "message(\"Execute 'vpncmd' to run the SoftEther VPN Command-Line Utility to configure VPN Server, VPN Bridge or VPN Client.\")")
|
||||||
|
install(CODE "message(\"----------------------------------------------------------------------------------------------------------------------------\n\")")
|
Loading…
Reference in New Issue
Block a user