Windows cmake build updates

This commit is contained in:
joseph.henry
2018-01-31 17:05:23 -08:00
parent 2c5634343a
commit f03f4098c5
6 changed files with 350 additions and 293 deletions

View File

@@ -28,6 +28,7 @@ cmake_minimum_required (VERSION 2.8)
project (libzt)
# --- SETUP
set(CMAKE_SUPPRESS_REGENERATION true)
# Paths
set (PROJ_DIR ${PROJECT_SOURCE_DIR})
@@ -36,14 +37,24 @@ set (EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
if (WIN32)
# get literal paths for Windows libraries
set (WIN_LIB_HINT_PATH "C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.16299.0\\um\\x86")
message (STATUS ${WIN_LIB_HINT_PATH})
find_library(ws2_32_LIBRARY_PATH NAMES WS2_32 HINTS ${WIN_LIB_HINT_PATH})
find_library(lshlwapi_LIBRARY_PATH NAMES ShLwApi HINTS ${WIN_LIB_HINT_PATH})
#find_library(liphlpapi_LIBRARY_PATH NAMES iphlpapi.lib HINTS ${WIN_LIB_HINT_PATH})
set (liphlpapi_LIBRARY_PATH "C:/Program Files (x86)/Windows Kits/10/Lib/10.0.16299.0/um/x86/iphlpapi.Lib")
message (STATUS ${ws2_32_LIBRARY_PATH})
message (STATUS ${lshlwapi_LIBRARY_PATH})
message (STATUS ${liphlpapi_LIBRARY_PATH})
add_definitions(-DSDK=1)
add_definitions(-DZT_SDK=1)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc -DNOMINMAX")
set (LWIP_PORT_DIR ${PROJ_DIR}/ext/lwip-contrib/ports/win32/include)
#set (COMMON_DEBUG_FLAGS "-DLIBZT_TRACE=1 -DLIBZT_DEBUG=1 -DNS_TRACE=1 -DNS_DEBUG=1")
set (LWIP_PORT_DIR ${PROJ_DIR}/ext/lwip-contrib/ports/win32)
set (COMMON_DEBUG_FLAGS "-DLIBZT_TRACE=1 -DLIBZT_DEBUG=1 -DNS_TRACE=1 -DNS_DEBUG=1")
else()
set (CMAKE_C_FLAGS "-fvisibility=hidden -fstack-protector -DZT_SDK=1")
set (LWIP_PORT_DIR ${PROJ_DIR}/ext/lwip-contrib/ports/unix/include)
set (LWIP_PORT_DIR ${PROJ_DIR}/ext/lwip-contrib/ports/unix)
set (COMMON_DEBUG_FLAGS "-g -DLIBZT_TRACE=1 -DLIBZT_DEBUG=1 -DNS_TRACE=1 -DNS_DEBUG=1")
endif()
@@ -70,7 +81,7 @@ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS}")
# lwIP Userspace Networking Stack
set (LWIP_SRC_DIR ${PROJ_DIR}/ext/lwip/src)
include_directories (${LWIP_SRC_DIR}/include)
include_directories (${LWIP_PORT_DIR})
include_directories (${LWIP_PORT_DIR}/include)
file (GLOB lwip_src_glob
${LWIP_SRC_DIR}/netif/*.c
${LWIP_SRC_DIR}/api/*.c
@@ -99,6 +110,9 @@ file (GLOB zto_src_glob
add_library (zto STATIC ${zto_src_glob})
target_link_libraries (zto http)
target_link_libraries (zto zt)
target_link_libraries (zto ws2_32)
target_link_libraries (zto ${lshlwapi_LIBRARY_PATH})
target_link_libraries (zto ${liphlpapi_LIBRARY_PATH})
add_library (zto_pic STATIC ${zto_src_glob})
target_link_libraries (zto_pic http_pic zt)
set_target_properties (zto_pic PROPERTIES POSITION_INDEPENDENT_CODE ON)
@@ -119,7 +133,10 @@ include_directories ("${PROJ_DIR}/include")
file (GLOB libzt_src_glob ${LIBZT_SRC_DIR}/*.cpp)
add_library (zt ${libzt_src_glob})
target_link_libraries (zt lwip zto)
#set_target_properties (zt PROPERTIES OUTPUT_NAME zt)
target_link_libraries (zt ws2_32)
target_link_libraries (zt ${lshlwapi_LIBRARY_PATH})
target_link_libraries (zt ${liphlpapi_LIBRARY_PATH})
set_target_properties (zt PROPERTIES OUTPUT_NAME zt)
# (libzt) Shared Library variant of ZeroTier paired with userspace stack and virtual tap interface
#add_library (ztshared SHARED ${libzt_src_glob})
#target_link_libraries (ztshared zto_pic lwip_pic)
@@ -128,27 +145,31 @@ target_link_libraries (zt lwip zto)
# --- Test applications, examples, etc ---
#file (GLOB APP_SOURCES ${PROJ_DIR}/examples/bindings/cpp/ipv4simple/*
# ${PROJ_DIR}/examples/bindings/cpp/ipv6simple/*
# ${PROJ_DIR}/examples/bindings/cpp/ipv6adhoc/*
# ${PROJ_DIR}/examples/apps/ztproxy/*.cpp
#)
#foreach (testsourcefile ${APP_SOURCES})
# string (REPLACE ".cpp" "" testname ${testsourcefile})
# get_filename_component (testname ${testname} NAME)
# add_executable (${testname} ${testsourcefile})
# target_link_libraries (${testname} lwip zto zt pthread)
#endforeach (testsourcefile ${APP_SOURCES})
file (GLOB APP_SOURCES ${PROJ_DIR}/examples/bindings/cpp/ipv4simple/*
${PROJ_DIR}/examples/bindings/cpp/ipv6simple/*
${PROJ_DIR}/examples/bindings/cpp/ipv6adhoc/*
${PROJ_DIR}/examples/apps/ztproxy/*.cpp
)
foreach (testsourcefile ${APP_SOURCES})
string (REPLACE ".cpp" "" testname ${testsourcefile})
get_filename_component (testname ${testname} NAME)
add_executable (${testname} ${testsourcefile})
target_link_libraries (${testname} lwip zto zt)
endforeach (testsourcefile ${APP_SOURCES})
# selftest
add_executable (selftest ${PROJ_DIR}/test/selftest.cpp)
target_compile_options (selftest PRIVATE -std=c++1 -D__SELFTEST__)
if (WIN32)
target_link_libraries (selftest lwip zto zt ${ws2_32_LIBRARY_PATH} ${lshlwapi_LIBRARY_PATH} ${liphlpapi_LIBRARY_PATH})
else()
target_link_libraries (selftest lwip zto zt)
endif()
# nativetest
#add_executable (nativetest ${PROJ_DIR}/test/selftest.cpp)
#target_compile_options (nativetest PRIVATE -D__NATIVETEST__)
#target_link_libraries (nativetest lwip zto zt pthread)
add_executable (nativetest ${PROJ_DIR}/test/selftest.cpp)
target_compile_options (nativetest PRIVATE -D__NATIVETEST__)
target_link_libraries (nativetest lwip zto zt)
# Clean up intermediate library targets
#file (REMOVE ${LIBRARY_OUTPUT_PATH}/libhttp.a)

View File

@@ -25,10 +25,10 @@
*/
#if defined(__linux__) || defined(__APPLE__)
#include <netdb.h>
#include <netdb.h>
#include <unistd.h>
#endif
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
@@ -43,6 +43,14 @@
#include "RingBuffer.h"
#include "ztproxy.hpp"
#if defined(_WIN32)
#include <time.h>
void sleep(unsigned long ms)
{
Sleep(ms);
}
#endif
namespace ZeroTier {
typedef void PhySocket;
@@ -329,7 +337,11 @@ namespace ZeroTier {
delete conn;
conn = NULL;
}
#if defined(_WIN32)
closesocket(_phy.getDescriptor(sock));
#else
close(_phy.getDescriptor(sock));
#endif
conn_m.unlock();
}

View File

@@ -420,7 +420,7 @@ int zts_start(const char *path, bool blocking = false)
if (path) {
homeDir = path;
}
int err;
int err = 0;
#if defined(_WIN32)
WSAStartup(MAKEWORD(2, 2), &wsaData); // initialize WinSock. Used in Phy for loopback pipe
HANDLE thr = CreateThread(NULL, 0, zts_start_service, NULL, 0, NULL);
@@ -431,6 +431,7 @@ int zts_start(const char *path, bool blocking = false)
if (blocking) { // block to prevent service calls before we're ready
ZT_NodeStatus status;
status.online = 0;
while (zts_core_running() == false || zt1Service->getNode() == NULL) {
api_sleep(ZTO_WRAPPER_CHECK_INTERVAL);
}

View File

@@ -674,14 +674,20 @@ int platform_adjusted_socket_family(int family)
return family == 30 ? AF_INET6 : family; // 10
#endif
#if defined(_WIN32)
return family == 23 ? AF_INET6 : family; // 10
if (family == 23) {
return AF_INET6;
}
if (family == 2) {
return AF_INET;
}
family; // 10
#endif
}
void fix_addr_socket_family(struct sockaddr *addr)
{
#if defined(__linux__)
/* linux's socket.h's sockaddr definition doesn't contain an sa_len field
#if defined(__linux__) || defined(_WIN32)
/* struct sockaddr on Linux and Windows don't contain an sa_len field
so we must adjust it here before feeding it into the stack. */
#if defined(STACK_LWIP)
if (addr->sa_len == 2) {

View File

@@ -118,7 +118,7 @@ static void main_thread(void *arg)
sys_sem_t sem;
LWIP_UNUSED_ARG(arg);
if (sys_sem_new(&sem, 0) != ERR_OK) {
DEBUG_ERROR("failed to create semaphore", 0);
DEBUG_ERROR("failed to create semaphore");
}
tcpip_init(tcpip_init_done, &sem);
sys_sem_wait(&sem);

File diff suppressed because it is too large Load Diff