diff --git a/CMakeLists.txt b/CMakeLists.txt index b7da2bfb0..42cbb545e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,17 +61,22 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") add_definitions(-DZT_DEBUG) endif(CMAKE_BUILD_TYPE STREQUAL "Debug") -set(GOFLAGS - -trimpath - -buildmode=pie -) - if(WIN32) message("++ Setting Windows Compiler Flags ${CMAKE_BUILD_TYPE}") add_definitions(-DNOMINMAX) + set(GOFLAGS + -trimpath + ) + else(WIN32) + + set(GOFLAGS + -trimpath + -buildmode=pie + ) + if(APPLE) message("++ Setting MacOS Compiler Flags ${CMAKE_BUILD_TYPE}") @@ -183,16 +188,23 @@ file(GLOB go_src ${CMAKE_SOURCE_DIR}/cmd/cmd/*.go ${CMAKE_SOURCE_DIR}/pkg/zerotier/*.go) -set(CXX_CORE_LIBRARIES "-lc++") -if(CMAKE_SYSTEM_NAME MATCHES "Linux") - set(CXX_CORE_LIBRARIES "-lstdc++") -endif(CMAKE_SYSTEM_NAME MATCHES "Linux") +if(WIN32) + set(GO_EXE_NAME "zerotier.exe") + set(GO_EXTRA_LIBRARIES "-lstdc++ -lwsock32 -lws2_32 -liphlpapi -lole32 -loleaut32 -lrpcrt4 -luuid") +else(WIN32) + set(GO_EXE_NAME "zerotier") + if(CMAKE_SYSTEM_NAME MATCHES "Linux") + set(GO_EXTRA_LIBRARIES "-lstdc++") + else() + set(GO_EXTRA_LIBRARIES "-lc++") + endif() +endif(WIN32) add_custom_target( zerotier ALL BYPRODUCTS ${CMAKE_BINARY_DIR}/zerotier SOURCES ${go_src} - COMMAND ${GOARCH} CGO_ENABLED=1 CGO_CFLAGS=\"-O3\" CGO_LDFLAGS=\"$ $ $ $ ${CXX_CORE_LIBRARIES}\" ${GO} build ${GOFLAGS} -o ${CMAKE_BINARY_DIR}/zerotier ${CMAKE_SOURCE_DIR}/cmd/zerotier/zerotier.go + COMMAND ${CMAKE_COMMAND} -E env "${GOARCH} CGO_ENABLED=1 CGO_CFLAGS=\"-O3\" CGO_LDFLAGS=\"$ $ $ $ ${GO_EXTRA_LIBRARIES}\"" ${GO} build ${GOFLAGS} -o ${CMAKE_BINARY_DIR}/${GO_EXE_NAME} ${CMAKE_SOURCE_DIR}/cmd/zerotier/zerotier.go COMMENT "Compiling Go Code..." ) add_dependencies(zerotier zt_osdep zt_core zt_controller zt_service_io_core) diff --git a/build.bat b/build.bat index 4f1ea6bab..bfefefef1 100644 --- a/build.bat +++ b/build.bat @@ -2,3 +2,4 @@ echo off mkdir build cd build cmake .. -G "MinGW Makefiles" +make -j4 diff --git a/cmd/zerotier/cli/service.go b/cmd/zerotier/cli/service.go index 0318ecd04..5b8dc3f9a 100644 --- a/cmd/zerotier/cli/service.go +++ b/cmd/zerotier/cli/service.go @@ -39,8 +39,7 @@ func Service(basePath, authToken string, args []string) { fmt.Println("FATAL: error initializing node: " + err.Error()) } else { osSignalChannel := make(chan os.Signal, 2) - signal.Notify(osSignalChannel, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGSTOP) - signal.Ignore(syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGPIPE, syscall.SIGHUP) + signal.Notify(osSignalChannel, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGINT) <-osSignalChannel node.Close() } diff --git a/osdep/EthernetTap.cpp b/osdep/EthernetTap.cpp index f46c362c8..a49233147 100644 --- a/osdep/EthernetTap.cpp +++ b/osdep/EthernetTap.cpp @@ -14,9 +14,6 @@ #include "EthernetTap.hpp" #include "OSUtils.hpp" -#include -#include - #ifdef ZT_SDK #include "../controller/EmbeddedNetworkController.hpp" diff --git a/osdep/WindowsEthernetTap.cpp b/osdep/WindowsEthernetTap.cpp index c29760d2c..a2d36d68f 100644 --- a/osdep/WindowsEthernetTap.cpp +++ b/osdep/WindowsEthernetTap.cpp @@ -829,7 +829,8 @@ void WindowsEthernetTap::setFriendlyName(const char *dn) if (hr != S_OK) return; INetSharingManager *nsm; - hr = CoCreateInstance(__uuidof(NetSharingManager), NULL, CLSCTX_ALL, __uuidof(INetSharingManager), (void**)&nsm); + //hr = CoCreateInstance(__uuidof(NetSharingManager), NULL, CLSCTX_ALL, __uuidof(INetSharingManager), (void**)&nsm); + hr = CoCreateInstance(CLSID_NetSharingManager, NULL, CLSCTX_ALL, IID_INetSharingManager, (void**)&nsm); if (hr != S_OK) return; bool found = false; @@ -844,7 +845,8 @@ void WindowsEthernetTap::setFriendlyName(const char *dn) IUnknown *unk = nullptr; hr = nsecc->get__NewEnum(&unk); if (unk) { - hr = unk->QueryInterface(__uuidof(IEnumVARIANT), (void**)&ev); + //hr = unk->QueryInterface(__uuidof(IEnumVARIANT), (void**)&ev); + hr = unk->QueryInterface(IID_IEnumVARIANT, (void**)&ev); unk->Release(); } if (ev) { @@ -854,7 +856,8 @@ void WindowsEthernetTap::setFriendlyName(const char *dn) while ((S_OK == ev->Next(1, &v, NULL)) && found == FALSE) { if (V_VT(&v) == VT_UNKNOWN) { INetConnection *nc = nullptr; - V_UNKNOWN(&v)->QueryInterface(__uuidof(INetConnection), (void**)&nc); + //V_UNKNOWN(&v)->QueryInterface(__uuidof(INetConnection), (void**)&nc); + V_UNKNOWN(&v)->QueryInterface(IID_INetConnection, (void**)&nc); if (nc) { NETCON_PROPERTIES *ncp = nullptr; nc->GetProperties(&ncp); diff --git a/pkg/zerotier/osdep-windows.go b/pkg/zerotier/osdep-windows.go index fcf0c0784..ecfca458f 100644 --- a/pkg/zerotier/osdep-windows.go +++ b/pkg/zerotier/osdep-windows.go @@ -17,6 +17,7 @@ package zerotier import ( "net" + "net/http" winio "github.com/Microsoft/go-winio" ) @@ -24,7 +25,7 @@ import ( const windowsAPISocketPathPrefix = "\\\\.\\pipe\\zerotier_" func createNamedSocketListener(basePath, name string) (net.Listener, error) { - winio.ListenPipe(windowsAPISocketPathPrefix+name, nil) + return winio.ListenPipe(windowsAPISocketPathPrefix+name, nil) } func createNamedSocketHTTPClient(basePath, name string) (*http.Client, error) {