Skip to content

Commit 413f990

Browse files
authored
build windows arm (#124)
* Update opencv-2.4.13.7-newer-msvc.patch * fix windows arm arch detection
1 parent 17c20b3 commit 413f990

File tree

6 files changed

+184
-2
lines changed

6 files changed

+184
-2
lines changed

.github/workflows/release.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ jobs:
6363
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-enable-cxx11.patch
6464
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-link-openmp.patch
6565
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-newer-msvc.patch
66+
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-fix-windows-arm-arch.patch
6667
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-minimal-install.patch
6768
cp ../patches/draw_text.h ../patches/mono_font_data.h modules/core/src/
6869
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-drawing-mono-font.patch
@@ -135,6 +136,8 @@ jobs:
135136
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-no-zlib.patch
136137
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-link-openmp.patch
137138
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-fix-emscripten-include.patch
139+
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-newer-msvc.patch
140+
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-fix-windows-arm-arch.patch
138141
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-minimal-install.patch
139142
cp ../patches/draw_text.h ../patches/mono_font_data.h modules/imgproc/src/
140143
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-drawing-mono-font.patch
@@ -205,6 +208,7 @@ jobs:
205208
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-no-rtti.patch
206209
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-no-zlib.patch
207210
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-link-openmp.patch
211+
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-fix-windows-arm-arch.patch
208212
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-minimal-install.patch
209213
cp ../patches/draw_text.h ../patches/mono_font_data.h modules/imgproc/src/
210214
patch -p1 -i ../patches/opencv-${{ env.opencv-version }}-drawing-mono-font.patch
@@ -1368,14 +1372,44 @@ jobs:
13681372
cmake ${{ env.COMMON_CMAKE_OPTIONS }} -A x64 $(type ../options.txt) -DBUILD_opencv_world=OFF ..
13691373
cmake --build . --config Release -j 4
13701374
cmake --build . --config Release --target install
1375+
- name: build-arm
1376+
if: matrix.os-compiler.msvc-version == 'vs2019' || matrix.os-compiler.msvc-version == 'vs2022'
1377+
run: |
1378+
cd ${{ env.SOURCE_DIR }}
1379+
mkdir build-arm; cd build-arm
1380+
cmake ${{ env.COMMON_CMAKE_OPTIONS }} -A arm -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=ARM $(type ../options.txt) -DBUILD_opencv_world=OFF ..
1381+
cmake --build . --config Release -j 4
1382+
cmake --build . --config Release --target install
1383+
- name: build-arm64
1384+
if: matrix.os-compiler.msvc-version == 'vs2019' || matrix.os-compiler.msvc-version == 'vs2022'
1385+
run: |
1386+
cd ${{ env.SOURCE_DIR }}
1387+
mkdir build-arm64; cd build-arm64
1388+
cmake ${{ env.COMMON_CMAKE_OPTIONS }} -A arm64 -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=ARM64 $(type ../options.txt) -DBUILD_opencv_world=OFF ..
1389+
cmake --build . --config Release -j 4
1390+
cmake --build . --config Release --target install
13711391
- name: package
1392+
if: matrix.os-compiler.msvc-version == 'vs2015' || matrix.os-compiler.msvc-version == 'vs2017'
13721393
run: |
13731394
mkdir ${{ env.PACKAGE_NAME }}
13741395
mkdir ${{ env.PACKAGE_NAME }}/x86
13751396
mkdir ${{ env.PACKAGE_NAME }}/x64
13761397
Copy-Item -Verbose -Recurse -Path "${{ env.SOURCE_DIR }}\build-x86\install\*" -Destination "${{ env.PACKAGE_NAME }}\x86"
13771398
Copy-Item -Verbose -Recurse -Path "${{ env.SOURCE_DIR }}\build-x64\install\*" -Destination "${{ env.PACKAGE_NAME }}\x64"
13781399
7z a -r ${{ env.PACKAGE_NAME }}.zip ${{ env.PACKAGE_NAME }}
1400+
- name: package
1401+
if: matrix.os-compiler.msvc-version == 'vs2019' || matrix.os-compiler.msvc-version == 'vs2022'
1402+
run: |
1403+
mkdir ${{ env.PACKAGE_NAME }}
1404+
mkdir ${{ env.PACKAGE_NAME }}/x86
1405+
mkdir ${{ env.PACKAGE_NAME }}/x64
1406+
mkdir ${{ env.PACKAGE_NAME }}/arm
1407+
mkdir ${{ env.PACKAGE_NAME }}/arm64
1408+
Copy-Item -Verbose -Recurse -Path "${{ env.SOURCE_DIR }}\build-x86\install\*" -Destination "${{ env.PACKAGE_NAME }}\x86"
1409+
Copy-Item -Verbose -Recurse -Path "${{ env.SOURCE_DIR }}\build-x64\install\*" -Destination "${{ env.PACKAGE_NAME }}\x64"
1410+
Copy-Item -Verbose -Recurse -Path "${{ env.SOURCE_DIR }}\build-arm\install\*" -Destination "${{ env.PACKAGE_NAME }}\arm"
1411+
Copy-Item -Verbose -Recurse -Path "${{ env.SOURCE_DIR }}\build-arm64\install\*" -Destination "${{ env.PACKAGE_NAME }}\arm64"
1412+
7z a -r ${{ env.PACKAGE_NAME }}.zip ${{ env.PACKAGE_NAME }}
13791413
- name: test-x86
13801414
run: |
13811415
cd test
@@ -1388,6 +1422,20 @@ jobs:
13881422
mkdir build-x64; cd build-x64
13891423
cmake ${{ env.COMMON_CMAKE_OPTIONS }} -A x64 -DOpenCV_DIR="$env:GITHUB_WORKSPACE\${{ env.PACKAGE_NAME }}\x64" -DOpenCV_STATIC=ON ..
13901424
cmake --build . --config Release -j 4
1425+
- name: test-arm
1426+
if: matrix.os-compiler.msvc-version == 'vs2019' || matrix.os-compiler.msvc-version == 'vs2022'
1427+
run: |
1428+
cd test
1429+
mkdir build-arm; cd build-arm
1430+
cmake ${{ env.COMMON_CMAKE_OPTIONS }} -A arm -DOpenCV_DIR="$env:GITHUB_WORKSPACE\${{ env.PACKAGE_NAME }}\arm" -DOpenCV_STATIC=ON ..
1431+
cmake --build . --config Release -j 4
1432+
- name: test-arm64
1433+
if: matrix.os-compiler.msvc-version == 'vs2019' || matrix.os-compiler.msvc-version == 'vs2022'
1434+
run: |
1435+
cd test
1436+
mkdir build-arm64; cd build-arm64
1437+
cmake ${{ env.COMMON_CMAKE_OPTIONS }} -A arm64 -DOpenCV_DIR="$env:GITHUB_WORKSPACE\${{ env.PACKAGE_NAME }}\arm64" -DOpenCV_STATIC=ON ..
1438+
cmake --build . --config Release -j 4
13911439
- name: upload-zip
13921440
uses: actions/upload-artifact@v4
13931441
with:
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
diff -Nuarp opencv-2.4.13.7.orig/cmake/OpenCVConfig.cmake opencv-2.4.13.7/cmake/OpenCVConfig.cmake
2+
--- opencv-2.4.13.7.orig/cmake/OpenCVConfig.cmake 2018-07-02 20:41:56.000000000 +0800
3+
+++ opencv-2.4.13.7/cmake/OpenCVConfig.cmake 2024-06-10 15:05:13.943493559 +0800
4+
@@ -64,12 +64,17 @@ endif()
5+
if(DEFINED OpenCV_ARCH AND DEFINED OpenCV_RUNTIME)
6+
# custom overrided values
7+
elseif(MSVC)
8+
- if(CMAKE_CL_64)
9+
- set(OpenCV_ARCH x64)
10+
- set(OpenCV_TBB_ARCH intel64)
11+
+ # see Modules/CMakeGenericSystem.cmake
12+
+ if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
13+
+ set(OpenCV_ARCH "x64")
14+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM64|arm64)")
15+
+ set(OpenCV_ARCH "ARM64")
16+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM|arm)")
17+
+ set(OpenCV_ARCH "ARM")
18+
+ elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
19+
+ set(OpenCV_ARCH "x64")
20+
else()
21+
set(OpenCV_ARCH x86)
22+
- set(OpenCV_TBB_ARCH ia32)
23+
endif()
24+
if(MSVC_VERSION EQUAL 1400)
25+
set(OpenCV_RUNTIME vc8)
26+
diff -Nuarp opencv-2.4.13.7.orig/cmake/OpenCVDetectCXXCompiler.cmake opencv-2.4.13.7/cmake/OpenCVDetectCXXCompiler.cmake
27+
--- opencv-2.4.13.7.orig/cmake/OpenCVDetectCXXCompiler.cmake 2018-07-02 20:41:56.000000000 +0800
28+
+++ opencv-2.4.13.7/cmake/OpenCVDetectCXXCompiler.cmake 2024-06-10 15:05:01.441716441 +0800
29+
@@ -85,11 +85,19 @@ endif()
30+
if(DEFINED OpenCV_ARCH AND DEFINED OpenCV_RUNTIME)
31+
# custom overrided values
32+
elseif(MSVC)
33+
- if(CMAKE_CL_64)
34+
- set(OpenCV_ARCH x64)
35+
+ # see Modules/CMakeGenericSystem.cmake
36+
+ if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
37+
+ set(OpenCV_ARCH "x64")
38+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM64|arm64)")
39+
+ set(OpenCV_ARCH "ARM64")
40+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM|arm)")
41+
+ set(OpenCV_ARCH "ARM")
42+
+ elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
43+
+ set(OpenCV_ARCH "x64")
44+
else()
45+
set(OpenCV_ARCH x86)
46+
endif()
47+
+
48+
if(MSVC_VERSION EQUAL 1400)
49+
set(OpenCV_RUNTIME vc8)
50+
elseif(MSVC_VERSION EQUAL 1500)

patches/opencv-2.4.13.7-newer-msvc.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ diff -Nuarp opencv-2.4.13.7.orig/cmake/OpenCVConfig.cmake opencv-2.4.13.7/cmake/
77
set(OpenCV_RUNTIME vc15)
88
+ elseif(MSVC_VERSION MATCHES "^192[0-9]$")
99
+ set(OpenCV_RUNTIME vc16)
10-
+ elseif(MSVC_VERSION MATCHES "^193[0-9]$")
10+
+ elseif(MSVC_VERSION MATCHES "^19[34][0-9]$")
1111
+ set(OpenCV_RUNTIME vc17)
1212
endif()
1313
elseif(MINGW)
@@ -21,7 +21,7 @@ diff -Nuarp opencv-2.4.13.7.orig/cmake/OpenCVDetectCXXCompiler.cmake opencv-2.4.
2121
set(OpenCV_RUNTIME vc15)
2222
+ elseif(MSVC_VERSION MATCHES "^192[0-9]$")
2323
+ set(OpenCV_RUNTIME vc16)
24-
+ elseif(MSVC_VERSION MATCHES "^193[0-9]$")
24+
+ elseif(MSVC_VERSION MATCHES "^19[34][0-9]$")
2525
+ set(OpenCV_RUNTIME vc17)
2626
endif()
2727
elseif(MINGW)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
diff -Nuarp opencv-3.4.20.orig/cmake/OpenCVDetectCXXCompiler.cmake opencv-3.4.20/cmake/OpenCVDetectCXXCompiler.cmake
2+
--- opencv-3.4.20.orig/cmake/OpenCVDetectCXXCompiler.cmake 2023-06-27 19:29:13.000000000 +0800
3+
+++ opencv-3.4.20/cmake/OpenCVDetectCXXCompiler.cmake 2024-06-10 14:54:29.392187073 +0800
4+
@@ -143,9 +143,9 @@ elseif(MSVC)
5+
# see Modules/CMakeGenericSystem.cmake
6+
if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
7+
set(OpenCV_ARCH "x64")
8+
- elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
9+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM64|arm64)")
10+
set(OpenCV_ARCH "ARM64")
11+
- elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
12+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM|arm)")
13+
set(OpenCV_ARCH "ARM")
14+
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
15+
set(OpenCV_ARCH "x64")
16+
diff -Nuarp opencv-3.4.20.orig/cmake/templates/OpenCVConfig.root-WIN32.cmake.in opencv-3.4.20/cmake/templates/OpenCVConfig.root-WIN32.cmake.in
17+
--- opencv-3.4.20.orig/cmake/templates/OpenCVConfig.root-WIN32.cmake.in 2023-06-27 19:29:13.000000000 +0800
18+
+++ opencv-3.4.20/cmake/templates/OpenCVConfig.root-WIN32.cmake.in 2024-06-10 14:54:43.583157025 +0800
19+
@@ -99,9 +99,9 @@ elseif(MSVC)
20+
# see Modules/CMakeGenericSystem.cmake
21+
if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
22+
set(OpenCV_ARCH "x64")
23+
- elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
24+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM64|arm64)")
25+
set(OpenCV_ARCH "ARM64")
26+
- elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
27+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM|arm)")
28+
set(OpenCV_ARCH "ARM")
29+
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
30+
set(OpenCV_ARCH "x64")
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
diff -Nuarp opencv-3.4.20.orig/cmake/OpenCVDetectCXXCompiler.cmake opencv-3.4.20/cmake/OpenCVDetectCXXCompiler.cmake
2+
--- opencv-3.4.20.orig/cmake/OpenCVDetectCXXCompiler.cmake 2023-06-27 19:29:13.000000000 +0800
3+
+++ opencv-3.4.20/cmake/OpenCVDetectCXXCompiler.cmake 2024-06-10 14:47:05.286016469 +0800
4+
@@ -169,7 +169,7 @@ elseif(MSVC)
5+
set(OpenCV_RUNTIME vc15)
6+
elseif(MSVC_VERSION MATCHES "^192[0-9]$")
7+
set(OpenCV_RUNTIME vc16)
8+
- elseif(MSVC_VERSION MATCHES "^193[0-9]$")
9+
+ elseif(MSVC_VERSION MATCHES "^19[34][0-9]$")
10+
set(OpenCV_RUNTIME vc17)
11+
else()
12+
message(WARNING "OpenCV does not recognize MSVC_VERSION \"${MSVC_VERSION}\". Cannot set OpenCV_RUNTIME")
13+
diff -Nuarp opencv-3.4.20.orig/cmake/templates/OpenCVConfig.root-WIN32.cmake.in opencv-3.4.20/cmake/templates/OpenCVConfig.root-WIN32.cmake.in
14+
--- opencv-3.4.20.orig/cmake/templates/OpenCVConfig.root-WIN32.cmake.in 2023-06-27 19:29:13.000000000 +0800
15+
+++ opencv-3.4.20/cmake/templates/OpenCVConfig.root-WIN32.cmake.in 2024-06-10 14:46:17.345712729 +0800
16+
@@ -137,7 +137,7 @@ elseif(MSVC)
17+
set(OpenCV_RUNTIME vc14) # selecting previous compatible runtime version
18+
endif()
19+
endif()
20+
- elseif(MSVC_VERSION MATCHES "^193[0-9]$")
21+
+ elseif(MSVC_VERSION MATCHES "^19[34][0-9]$")
22+
set(OpenCV_RUNTIME vc17)
23+
check_one_config(has_VS2022)
24+
if(NOT has_VS2022)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
diff -Nuarp opencv-4.10.0.orig/cmake/OpenCVDetectCXXCompiler.cmake opencv-4.10.0/cmake/OpenCVDetectCXXCompiler.cmake
2+
--- opencv-4.10.0.orig/cmake/OpenCVDetectCXXCompiler.cmake 2024-06-02 19:41:07.000000000 +0800
3+
+++ opencv-4.10.0/cmake/OpenCVDetectCXXCompiler.cmake 2024-06-10 14:58:22.061466618 +0800
4+
@@ -150,9 +150,9 @@ elseif(MSVC)
5+
# see Modules/CMakeGenericSystem.cmake
6+
if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
7+
set(OpenCV_ARCH "x64")
8+
- elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
9+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM64|arm64)")
10+
set(OpenCV_ARCH "ARM64")
11+
- elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
12+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM|arm)")
13+
set(OpenCV_ARCH "ARM")
14+
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
15+
set(OpenCV_ARCH "x64")
16+
diff -Nuarp opencv-4.10.0.orig/cmake/templates/OpenCVConfig.root-WIN32.cmake.in opencv-4.10.0/cmake/templates/OpenCVConfig.root-WIN32.cmake.in
17+
--- opencv-4.10.0.orig/cmake/templates/OpenCVConfig.root-WIN32.cmake.in 2024-06-02 19:41:07.000000000 +0800
18+
+++ opencv-4.10.0/cmake/templates/OpenCVConfig.root-WIN32.cmake.in 2024-06-10 14:58:43.470327117 +0800
19+
@@ -99,9 +99,9 @@ elseif(MSVC)
20+
# see Modules/CMakeGenericSystem.cmake
21+
if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
22+
set(OpenCV_ARCH "x64")
23+
- elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
24+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM64|arm64)")
25+
set(OpenCV_ARCH "ARM64")
26+
- elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
27+
+ elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "(ARM|arm)")
28+
set(OpenCV_ARCH "ARM")
29+
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
30+
set(OpenCV_ARCH "x64")

0 commit comments

Comments
 (0)