diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3493c1b22..abbc2387e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -64,6 +64,20 @@ build:linux_debug: - build/daemon/lokinet - build/daemon/lokinetctl + +build:win32: + image: ubuntu:bionic + tags: + - win32 + stage: build + before_script: + - apt-get update && apt-get install -y build-essential cmake nsis git g++-mingw-w64 + script: + - DOWNLOAD_SODIUM=ON IS_NOTIFICATION=1 STATIC_LINK=ON WINDOWS_ARCH=32 make windows + artifacts: + paths: + build/lokinet-*.exe + # needs libuv and libcurl #build:freebsd: # tags: diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e3316c81..2b9860b8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,8 +9,8 @@ set(PROJECT_NAME lokinet) project(${PROJECT_NAME} C CXX) set(LLARP_VERSION_MAJOR 0) -set(LLARP_VERSION_MINOR 6) -set(LLARP_VERSION_PATCH 2) +set(LLARP_VERSION_MINOR 7) +set(LLARP_VERSION_PATCH 0) add_definitions(-DLLARP_VERSION_MAJOR=${LLARP_VERSION_MAJOR}) add_definitions(-DLLARP_VERSION_MINOR=${LLARP_VERSION_MINOR}) @@ -54,12 +54,6 @@ if (STATIC_LINK) message(STATUS "setting static library suffix search") endif() -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") - -# No in-source building -include(MacroEnsureOutOfSourceBuild) -macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out-of-source build. Create a build directory and run 'cmake ${CMAKE_SOURCE_DIR} [options]'.") - include(cmake/basic_definitions.cmake) if(MSVC_VERSION) @@ -74,6 +68,14 @@ include(cmake/solaris.cmake) include(cmake/unix.cmake) include(cmake/win32.cmake) # try detecting the target arch and set the flags needed here +message(STATUS "${CMAKE_SYSTEM_VERSION}") + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + +# No in-source building +include(MacroEnsureOutOfSourceBuild) +macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out-of-source build. Create a build directory and run 'cmake ${CMAKE_SOURCE_DIR} [options]'.") + if(NOT WIN32) if(IOS OR ANDROID) set(NON_PC_TARGET ON) @@ -232,7 +234,7 @@ endif(JEMALLOC) find_package(PkgConfig QUIET) -if(PKG_CONFIG_FOUND) +if(PKG_CONFIG_FOUND AND LINUX) pkg_check_modules(SD libsystemd) # Default WITH_SYSTEMD to true if we found it option(WITH_SYSTEMD "enable systemd integration for sd_notify" ${SD_FOUND}) diff --git a/Makefile b/Makefile index cad85da99..71fbd1d4b 100644 --- a/Makefile +++ b/Makefile @@ -80,6 +80,10 @@ JAVA_HOME ?= /usr/lib/jvm/default-java TOOLCHAIN ?= +# 64 for 64bit windows, 32 for 32bit windows +# defaults to 64 bit for now +WINDOWS_ARCH ?= 64 + # native avx2 code AVX2 ?= OFF # statically link everything @@ -132,7 +136,7 @@ ANALYZE_CONFIG_CMD = $(shell gecho -n "cd '$(BUILD_ROOT)' && " ; gecho -n "$(SCA COVERAGE_CONFIG_CMD = $(shell gecho -n "cd '$(BUILD_ROOT)' && " ; gecho -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DWITH_COVERAGE=yes $(COMMON_CMAKE_OPTIONS) '$(REPO)'") else CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DUSE_SHELLHOOKS=$(SHELL_HOOKS) -DTRACY_ROOT=$(TRACY_ROOT) $(COMMON_CMAKE_OPTIONS) '$(REPO)'") -CONFIG_CMD_WINDOWS = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=ON -DUSE_SHELLHOOKS=$(SHELL_HOOKS) $(COMMON_CMAKE_OPTIONS) '$(REPO)'") +CONFIG_CMD_WINDOWS = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=ON -DUSE_SHELLHOOKS=$(SHELL_HOOKS) $(COMMON_CMAKE_OPTIONS)") ANALYZE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "$(SCAN_BUILD) cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) $(COMMON_CMAKE_OPTIONS) '$(REPO)'") @@ -271,7 +275,7 @@ android: android-gradle windows-debug-configure: $(LIBUV_PREFIX) mkdir -p '$(BUILD_ROOT)' - $(CONFIG_CMD_WINDOWS) -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw.cmake' -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)' -DLIBUV_ROOT=$(LIBUV_PREFIX) + $(CONFIG_CMD_WINDOWS) -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw$(WINDOWS_ARCH).cmake' -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)' -DLIBUV_ROOT=$'(LIBUV_PREFIX)' '$(REPO)' windows-debug: windows-debug-configure $(MAKE) -C '$(BUILD_ROOT)' @@ -279,7 +283,7 @@ windows-debug: windows-debug-configure windows-release-configure: $(LIBUV_PREFIX) mkdir -p '$(BUILD_ROOT)' - $(CONFIG_CMD_WINDOWS) -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw.cmake' -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)' -DLIBUV_ROOT=$(LIBUV_PREFIX) -DWITH_TESTS=OFF + $(CONFIG_CMD_WINDOWS) -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw$(WINDOWS_ARCH).cmake' -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)' -DLIBUV_ROOT='$(LIBUV_PREFIX)' -DWITH_TESTS=OFF '$(REPO)' windows-release: windows-release-configure $(MAKE) -C '$(BUILD_ROOT)' diff --git a/cmake/win32.cmake b/cmake/win32.cmake index 8fb03f702..fac9e6191 100644 --- a/cmake/win32.cmake +++ b/cmake/win32.cmake @@ -14,15 +14,13 @@ if(NOT MSVC_VERSION) # to .r[o]data section one after the other! add_compile_options(-fno-ident -Wa,-mbig-obj) link_libraries( -lws2_32 -lshlwapi -ldbghelp -luser32 -liphlpapi -lpsapi -luserenv ) - add_definitions(-DWINVER=0x0500 -D_WIN32_WINNT=0x0500) if (CMAKE_C_COMPILER_AR AND STATIC_LINK_RUNTIME) - add_compile_options(-flto) set(CMAKE_AR ${CMAKE_C_COMPILER_AR}) set(CMAKE_C_ARCHIVE_CREATE " qcs ") set(CMAKE_C_ARCHIVE_FINISH "true") set(CMAKE_CXX_ARCHIVE_CREATE " qcs ") set(CMAKE_CXX_ARCHIVE_FINISH "true") - link_libraries( -flto -static-libstdc++ -static-libgcc -static ${CMAKE_CXX_FLAGS} ${CRYPTO_FLAGS} ) + link_libraries( -static-libstdc++ -static-libgcc -static ${CMAKE_CXX_FLAGS} ${CRYPTO_FLAGS} ) endif() endif() diff --git a/contrib/cross/mingw32.cmake b/contrib/cross/mingw32.cmake index 2ec3510e3..cb2e35950 100644 --- a/contrib/cross/mingw32.cmake +++ b/contrib/cross/mingw32.cmake @@ -1,6 +1,6 @@ set(CMAKE_SYSTEM_NAME Windows) set(TOOLCHAIN_PREFIX i686-w64-mingw32) -set(TOOLCHAIN_SUFFIX "") +set(TOOLCHAIN_SUFFIX "-posix") set(WOW64_CROSS_COMPILE ON) set(LIBSODIUM_CROSS_TARGET i686-w64-mingw32) diff --git a/contrib/cross/mingw.cmake b/contrib/cross/mingw64.cmake similarity index 100% rename from contrib/cross/mingw.cmake rename to contrib/cross/mingw64.cmake diff --git a/contrib/cross/mingw_core.cmake b/contrib/cross/mingw_core.cmake index c636e7ba5..3c1dc8b71 100644 --- a/contrib/cross/mingw_core.cmake +++ b/contrib/cross/mingw_core.cmake @@ -1,3 +1,5 @@ +set(CMAKE_SYSTEM_VERSION 6.0) + # target environment on the build host system # second one is for non-root installs set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PATHS})