diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4cc99930cb..d0a2f14034 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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)
diff --git a/cmake/dotnet.cmake b/cmake/dotnet.cmake
index 94af59ba55..0999253899 100644
--- a/cmake/dotnet.cmake
+++ b/cmake/dotnet.cmake
@@ -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 "netcoreapp3.1;net6.0")
@@ -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()
diff --git a/ortools/dotnet/Google.OrTools-full.csproj.in b/ortools/dotnet/Google.OrTools-full.csproj.in
index 509a04f59a..dc0c43c2f4 100644
--- a/ortools/dotnet/Google.OrTools-full.csproj.in
+++ b/ortools/dotnet/Google.OrTools-full.csproj.in
@@ -3,7 +3,7 @@
Library
9.0
@DOTNET_TFM@
- win-x64;osx-x64;linux-x64
+ linux-x64;osx-x64;win-x64;linux-arm64;osx-arm64
true
@DOTNET_PROJECT@
@PROJECT_VERSION@