dotnet: Add support for linux-arm64 and osx-arm64 (#2724)
This commit is contained in:
@@ -229,7 +229,12 @@ if(BUILD_DOTNET)
|
||||
option(UNIVERSAL_DOTNET_PACKAGE "Build a .Net multi OS Package" OFF)
|
||||
message(STATUS ".Net: Create multiple os package: ${UNIVERSAL_DOTNET_PACKAGE}")
|
||||
|
||||
option(USE_DOTNET_TFM_31 "Use .Net Core 3.1 LTS support" ON)
|
||||
# .Net Core 3.1 LTS is not available for osx arm64
|
||||
if(APPLE AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)")
|
||||
set(USE_DOTNET_TFM_31 OFF)
|
||||
else()
|
||||
option(USE_DOTNET_TFM_31 "Use .Net Core 3.1 LTS support" ON)
|
||||
endif()
|
||||
message(STATUS ".Net: Use .Net Core 3.1 LTS support: ${USE_DOTNET_TFM_31}")
|
||||
|
||||
option(USE_DOTNET_TFM_60 "Use .Net 6.0 LTS support" ON)
|
||||
|
||||
@@ -33,9 +33,17 @@ set(DOTNET_PACKAGES_DIR "${PROJECT_BINARY_DIR}/dotnet/packages")
|
||||
|
||||
# see: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
|
||||
if(APPLE)
|
||||
set(RUNTIME_IDENTIFIER osx-x64)
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)")
|
||||
set(RUNTIME_IDENTIFIER osx-arm64)
|
||||
else()
|
||||
set(RUNTIME_IDENTIFIER osx-x64)
|
||||
endif()
|
||||
elseif(UNIX)
|
||||
set(RUNTIME_IDENTIFIER linux-x64)
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)")
|
||||
set(RUNTIME_IDENTIFIER linux-arm64)
|
||||
else()
|
||||
set(RUNTIME_IDENTIFIER linux-x64)
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
set(RUNTIME_IDENTIFIER win-x64)
|
||||
else()
|
||||
@@ -46,6 +54,13 @@ message(STATUS ".Net runtime project: ${DOTNET_NATIVE_PROJECT}")
|
||||
set(DOTNET_NATIVE_PROJECT_DIR ${PROJECT_BINARY_DIR}/dotnet/${DOTNET_NATIVE_PROJECT})
|
||||
message(STATUS ".Net runtime project build path: ${DOTNET_NATIVE_PROJECT_DIR}")
|
||||
|
||||
# see: Platform
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)")
|
||||
set(DOTNET_PLATFORM arm64)
|
||||
else()
|
||||
set(DOTNET_PLATFORM x64)
|
||||
endif()
|
||||
|
||||
# see: https://docs.microsoft.com/en-us/dotnet/standard/frameworks
|
||||
if(USE_DOTNET_TFM_31 AND USE_DOTNET_TFM_60)
|
||||
set(DOTNET_TFM "<TargetFrameworks>netcoreapp3.1;net6.0</TargetFrameworks>")
|
||||
@@ -204,7 +219,7 @@ add_custom_command(
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${DOTNET_NATIVE_PROJECT_DIR}/timestamp
|
||||
COMMAND ${DOTNET_EXECUTABLE} build -c Release /p:Platform=x64 ${DOTNET_NATIVE_PROJECT}.csproj
|
||||
COMMAND ${DOTNET_EXECUTABLE} build -c Release /p:Platform=${DOTNET_PLATFORM} ${DOTNET_NATIVE_PROJECT}.csproj
|
||||
COMMAND ${DOTNET_EXECUTABLE} pack -c Release ${DOTNET_NATIVE_PROJECT}.csproj
|
||||
COMMAND ${CMAKE_COMMAND} -E touch ${DOTNET_NATIVE_PROJECT_DIR}/timestamp
|
||||
DEPENDS
|
||||
@@ -247,7 +262,7 @@ add_custom_command(
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${DOTNET_PROJECT_DIR}/timestamp
|
||||
COMMAND ${DOTNET_EXECUTABLE} build -c Release /p:Platform=x64 ${DOTNET_PROJECT}.csproj
|
||||
COMMAND ${DOTNET_EXECUTABLE} build -c Release /p:Platform=${DOTNET_PLATFORM} ${DOTNET_PROJECT}.csproj
|
||||
COMMAND ${DOTNET_EXECUTABLE} pack -c Release ${DOTNET_PROJECT}.csproj
|
||||
COMMAND ${CMAKE_COMMAND} -E touch ${DOTNET_PROJECT_DIR}/timestamp
|
||||
DEPENDS
|
||||
@@ -383,13 +398,13 @@ function(add_dotnet_sample FILE_NAME)
|
||||
if(BUILD_TESTING)
|
||||
if(USE_DOTNET_TFM_31)
|
||||
add_test(
|
||||
NAME dotnet_${COMPONENT_NAME}_${SAMPLE_NAME}
|
||||
NAME dotnet_${COMPONENT_NAME}_${SAMPLE_NAME}_netcoreapp31
|
||||
COMMAND ${DOTNET_EXECUTABLE} run --no-build --framework netcoreapp3.1 -c Release
|
||||
WORKING_DIRECTORY ${DOTNET_SAMPLE_DIR})
|
||||
endif()
|
||||
if(USE_DOTNET_TFM_60)
|
||||
add_test(
|
||||
NAME dotnet_${COMPONENT_NAME}_${SAMPLE_NAME}
|
||||
NAME dotnet_${COMPONENT_NAME}_${SAMPLE_NAME}_net60
|
||||
COMMAND ${DOTNET_EXECUTABLE} run --no-build --framework net6.0 -c Release
|
||||
WORKING_DIRECTORY ${DOTNET_SAMPLE_DIR})
|
||||
endif()
|
||||
@@ -454,13 +469,13 @@ function(add_dotnet_example FILE_NAME)
|
||||
if(BUILD_TESTING)
|
||||
if(USE_DOTNET_TFM_31)
|
||||
add_test(
|
||||
NAME dotnet_${COMPONENT_NAME}_${EXAMPLE_NAME}
|
||||
NAME dotnet_${COMPONENT_NAME}_${EXAMPLE_NAME}_netcoreapp31
|
||||
COMMAND ${DOTNET_EXECUTABLE} run --no-build --framework netcoreapp3.1 -c Release
|
||||
WORKING_DIRECTORY ${DOTNET_EXAMPLE_DIR})
|
||||
endif()
|
||||
if(USE_DOTNET_TFM_60)
|
||||
add_test(
|
||||
NAME dotnet_${COMPONENT_NAME}_${EXAMPLE_NAME}
|
||||
NAME dotnet_${COMPONENT_NAME}_${EXAMPLE_NAME}_net60
|
||||
COMMAND ${DOTNET_EXECUTABLE} run --no-build --framework net6.0 -c Release
|
||||
WORKING_DIRECTORY ${DOTNET_EXAMPLE_DIR})
|
||||
endif()
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<OutputType>Library</OutputType>
|
||||
<LangVersion>9.0</LangVersion>
|
||||
@DOTNET_TFM@
|
||||
<RuntimeIdentifiers>win-x64;osx-x64;linux-x64</RuntimeIdentifiers>
|
||||
<RuntimeIdentifiers>linux-x64;osx-x64;win-x64;linux-arm64;osx-arm64</RuntimeIdentifiers>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<AssemblyName>@DOTNET_PROJECT@</AssemblyName>
|
||||
<Version>@PROJECT_VERSION@</Version>
|
||||
|
||||
Reference in New Issue
Block a user