Skip to content

Add toolchain for windows/arm64 #499

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
Apr 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
1629da6
build windows arm64 binaries in CI
scareything Mar 31, 2023
d2a1a69
try context expansion for toolchain file instead of env variable
scareything Mar 31, 2023
d82e85a
use vs2022 to build arm
scareything Apr 1, 2023
6404ef1
regenerate msvc projects in libsodium after fetching
scareything Apr 1, 2023
1455e79
pass generator arg on cmake command line instead of toolchain file
scareything Apr 1, 2023
7bb9947
run process.bat before building libsodium.
scareything Apr 1, 2023
c71802a
ensure build type is set when generating msvc projects. go back to vs…
scareything Apr 1, 2023
a36dd60
run msbuild from libsodium source directory
scareything Apr 1, 2023
ed19654
find msbuild on windows
scareything Apr 2, 2023
b7e7527
quotes
scareything Apr 2, 2023
da31285
comments
scareything Apr 2, 2023
c9ca9cc
change conditionals to build libsodium when the source was fetched, i…
scareything Apr 2, 2023
7469f05
pin msvc toolset version to match libsodium project when building fro…
scareything Apr 3, 2023
e3bc54a
get executable from subdirectory when toolchain is msvc
scareything Apr 3, 2023
54bd0e7
fix brackets
scareything Apr 3, 2023
c095ece
don't reference env context when setting env values.
scareything Apr 3, 2023
845902c
assume msvc if building on windows
scareything Apr 3, 2023
4895c55
update linux runners
scareything Apr 3, 2023
4f26206
install crosstools on new linux runner
scareything Apr 3, 2023
5148676
use env context in integration test step
scareything Apr 3, 2023
acb4083
revert previous change
scareything Apr 3, 2023
9eb8e89
rename toolchain file for consistency
scareything Apr 3, 2023
2d5a6e5
configure libsodium to match cmake build type
scareything Apr 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 16 additions & 8 deletions .github/workflows/cmake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,38 @@ jobs:
fail-fast: false
matrix:
spec:
- { name: 'Linux x86_64', runner: 'ubuntu-18.04' }
- { name: 'Linux ARM', runner: 'ubuntu-18.04', toolchain: 'Linux-arm', no_tests: 'true' }
- { name: 'Linux ARM64', runner: 'ubuntu-18.04', toolchain: 'Linux-arm64', no_tests: 'true' }
- { name: 'Linux x86_64', runner: 'ubuntu-20.04' }
- { name: 'Linux ARM', runner: 'ubuntu-20.04', toolchain: 'Linux-arm', no_tests: 'true' }
- { name: 'Linux ARM64', runner: 'ubuntu-20.04', toolchain: 'Linux-arm64', no_tests: 'true' }
- { name: 'MacOS x86_64', runner: 'macOS-11' }
- { name: 'MacOS arm64', runner: 'macOS-11', toolchain: 'macOS-arm64', no_tests: 'true' }
- { name: 'Windows x86_64', runner: 'windows-2019' }
- { name: 'Windows ARM64', runner: 'windows-2019', toolchain: 'Windows-arm64-msvc', cmake_opts: '-A ARM64', no_tests: 'true' }

steps:
- name: Install Crossbuild tools
if: matrix.spec.runner == 'ubuntu-18.04'
if: matrix.spec.runner == 'ubuntu-20.04'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

switch to startsWith()

run: |
sudo apt update -y
sudo apt install -y crossbuild-essential-armhf crossbuild-essential-arm64

- name: Add msbuild to PATH
if: matrix.spec.runner == 'windows-2019'
uses: microsoft/setup-msbuild@v1.1

- uses: actions/checkout@v3
with:
fetch-depth: 0
- run: |
echo "BUILD_NUMBER = ${BUILD_NUMBER}"
echo "BUILD_NUMBER = ${{ env.BUILD_NUMBER }}"
cmake -E make_directory ${{ runner.workspace }}/build

- name: setup/build CMake
env:
TOOLCHAIN: ${{ matrix.spec.toolchain && format('{0}/toolchains/{1}.cmake', github.workspace, matrix.spec.toolchain) || '' }}
run: |
echo cmake -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN}" -S ${{ github.workspace }} -B ${{runner.workspace}}/build
cmake -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN}" -S ${{ github.workspace }} -B ${{runner.workspace}}/build
echo cmake -DCMAKE_TOOLCHAIN_FILE="${{ env.TOOLCHAIN }}" -S ${{ github.workspace }} -B ${{runner.workspace}}/build
cmake -DCMAKE_TOOLCHAIN_FILE=${{ env.TOOLCHAIN }} -S ${{ github.workspace }} -B ${{runner.workspace}}/build ${{matrix.spec.cmake_opts}}
cmake --build ${{runner.workspace}}/build

- name: test
Expand All @@ -67,9 +72,12 @@ jobs:

- name: upload artifacts
uses: actions/upload-artifact@v3
env:
EXE_SUFFIX: ${{ runner.os == 'Windows' && '.exe' || '' }}
BUILD_DIR: ${{ runner.os == 'Windows' && format('{0}/', matrix.spec.build_type && matrix.spec.build_type || 'Debug') || '' }}
with:
name: ziti-prox-c-${{ matrix.spec.toolchain || runner.os }}
path: ${{ runner.workspace }}/build/programs/ziti-prox-c/ziti-prox-c${{ runner.os == 'Windows' && '.exe' || '' }}
path: ${{ runner.workspace }}/build/programs/ziti-prox-c/${{ env.BUILD_DIR }}ziti-prox-c${{ env.EXE_SUFFIX }}
- name: upload SDK artifacts
uses: actions/upload-artifact@v3
with:
Expand Down
135 changes: 81 additions & 54 deletions deps/libsodium.cmake
Original file line number Diff line number Diff line change
@@ -1,72 +1,100 @@
include(FetchContent)

if (WIN32)

if(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
FetchContent_Declare (
libsodium
URL https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-msvc.zip
)
if(CMAKE_EXE_LINKER_FLAGS MATCHES "/machine:x64")
set(arch "x64")
else()
set(arch "Win32")
endif()
if(CMAKE_BUILD_TYPE)
set(build_type ${CMAKE_BUILD_TYPE})
else()
set(build_type "Debug")
endif()

set(libsodium_include_path include)
set(libsodium_lib_path ${arch}/${build_type}/v${MSVC_TOOLSET_VERSION}/static/libsodium${CMAKE_STATIC_LIBRARY_SUFFIX})
message("libsodium = ${libsodium_lib_path}")
if(CMAKE_EXE_LINKER_FLAGS MATCHES "/machine:x64")
set(arch "x64")
else()
set(arch "Win32")
endif()
if(CMAKE_BUILD_TYPE)
set(build_type ${CMAKE_BUILD_TYPE})
else()
set(build_type "Debug")
endif()
if (NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
FetchContent_Declare (
libsodium
URL https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-msvc.zip
)
set(libsodium_include_path include)
set(libsodium_lib_path ${arch}/${build_type}/v${MSVC_TOOLSET_VERSION}/static/libsodium${CMAKE_STATIC_LIBRARY_SUFFIX})
else()
# arm builds are not included in libsodium release tarballs (yet?), so we need to build it.
# windows/arm build support has been added to master, but not stable. See https://github.com/jedisct1/libsodium/pull/1130
set(arch "ARM64")
FetchContent_Declare (
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all of this will be moot once we start building with vcpkg

libsodium
GIT_REPOSITORY http://github.com/jedisct1/libsodium
GIT_TAG master
)
set(libsodium_include_path src/libsodium/include)
# v142 matches toolset version that's used in libsodium.sln below. vs2019 --> v142.
set(libsodium_lib_path bin/${arch}/${build_type}/v142/static/libsodium${CMAKE_STATIC_LIBRARY_SUFFIX})
endif()
else()
FetchContent_Declare (
libsodium
URL https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-mingw.tar.gz
)
set(libsodium_include_path libsodium-win64/include)
set(libsodium_lib_path libsodium-win64/lib/libsodium.a)
endif()
FetchContent_Declare (
libsodium
URL https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-mingw.tar.gz
)
set(libsodium_include_path libsodium-win64/include)
set(libsodium_lib_path libsodium-win64/lib/libsodium.a)
endif()
message("libsodium = ${libsodium_lib_path}")
else()
FetchContent_Declare (
libsodium
GIT_REPOSITORY http://github.com/jedisct1/libsodium
GIT_TAG stable
)
FetchContent_Declare (
libsodium
GIT_REPOSITORY http://github.com/jedisct1/libsodium
GIT_TAG stable
)
endif()

FetchContent_GetProperties(libsodium)

if(NOT libsodium_POPULATED)
FetchContent_Populate(libsodium)
if (NOT EXISTS ${libsodium_BINARY_DIR})
file(MAKE_DIRECTORY ${libsodium_BINARY_DIR})
file(MAKE_DIRECTORY ${libsodium_BINARY_DIR})
endif ()
if (NOT WIN32)
# perform the build if the source was fetched.
if (EXISTS ${libsodium_SOURCE_DIR}/src)
if (NOT EXISTS ${libsodium_BINARY_DIR}/config.status)
# first build on macos fails because CMake picks up xcode
if (APPLE)
unset(ENV{CC})
unset(ENV{CXX})
if (NOT CMAKE_C_COMPILER_ID STREQUAL "MSVC")
# first build on macos fails because CMake picks up xcode
if (APPLE)
unset(ENV{CC})
unset(ENV{CXX})
endif()
execute_process(
COMMAND "${libsodium_SOURCE_DIR}/configure" "--prefix=${libsodium_BINARY_DIR}"
--disable-opt --without-pthreads --with-pic --host=${triple}
--with-sysroot=${CMAKE_SYSROOT}
COMMAND_ECHO STDOUT
COMMAND_ERROR_IS_FATAL ANY
WORKING_DIRECTORY ${libsodium_BINARY_DIR}
)
execute_process(
COMMAND make -j4
COMMAND_ECHO STDOUT
COMMAND_ERROR_IS_FATAL ANY
WORKING_DIRECTORY ${libsodium_BINARY_DIR}
)
execute_process(
COMMAND make install
COMMAND_ECHO STDOUT
COMMAND_ERROR_IS_FATAL ANY
WORKING_DIRECTORY ${libsodium_BINARY_DIR}
)
else()
execute_process(
COMMAND msbuild ${libsodium_SOURCE_DIR}/builds/msvc/vs2019/libsodium.sln -property:Configuration=Static${build_type} -property:Platform=${arch}
COMMAND_ECHO STDOUT
COMMAND_ERROR_IS_FATAL ANY
WORKING_DIRECTORY ${libsodium_BINARY_DIR}
)
endif()
execute_process(
COMMAND "${libsodium_SOURCE_DIR}/configure" "--prefix=${libsodium_BINARY_DIR}"
--disable-opt --without-pthreads --with-pic --host=${triple}
--with-sysroot=${CMAKE_SYSROOT}
WORKING_DIRECTORY ${libsodium_BINARY_DIR}
)
endif()
execute_process(
COMMAND make -j4
WORKING_DIRECTORY ${libsodium_BINARY_DIR}
)
execute_process(
COMMAND make install
WORKING_DIRECTORY ${libsodium_BINARY_DIR}
)
endif ()
endif()
endif ()

add_library(sodium IMPORTED STATIC GLOBAL)
Expand All @@ -75,9 +103,8 @@ if (WIN32)
target_include_directories(sodium INTERFACE ${libsodium_SOURCE_DIR}/${libsodium_include_path})
target_compile_definitions(sodium INTERFACE SODIUM_STATIC)
#target_link_directories(sodium INTERFACE ${libsodium_SOURCE_DIR})
set_target_properties(sodium PROPERTIES IMPORTED_LOCATION ${libsodium_SOURCE_DIR}/${libsodium_lib_path})
set_target_properties(sodium PROPERTIES IMPORTED_LOCATION ${libsodium_SOURCE_DIR}/${libsodium_lib_path})
else()
target_include_directories(sodium INTERFACE ${libsodium_BINARY_DIR}/include)
set_target_properties(sodium PROPERTIES IMPORTED_LOCATION ${libsodium_BINARY_DIR}/lib/libsodium.a)
endif()

8 changes: 8 additions & 0 deletions toolchains/Windows-arm64-msvc.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# cross-compile for windows/arm64 on windows/x64 host with visual studio
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR ARM64)
# setting CMAKE_GENERATOR_PLATFORM should be sufficient if you believe the doc, it results in build files
# that cause msbuild to that the ZERO_CHECK project doesn't contain the "Debug|x64" platform/config
# combination. running cmake with '-A ARCH64' avoids the msbuild failure.
set(CMAKE_GENERATOR_PLATFORM ARM64)
set(CMAKE_C_COMPILER cl.exe)