Чем и как собирать OpenCL?
Уже долгое время пытаюсь собрать OpenCL, но ниче не получается. Сначала я скачиваю исходники https://github.com/KhronosGroup/OpenCL-SDK и с помощью CMake (ничего не настраивая) собираю это всё (предварительно установив в нём компилятор, соответствующей версии). Далее я пытаюсь собрать это с помощью mingw (mingw32-make.exe) версий: 8.1.0 (x64, x32), 10.3.0 (x32, x64)
При этом я получаю следующие ошибки:
Для версии mingw32(и 64) 10.3.0, если собирать в CMake как для mingw32 8.1.0 (см. ниже почему именно так):
C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\build>D:\msys64\mingw32\bi n\mingw32-make.exe [ 2%] Building C object external/OpenCL-ICD-Loader/CMakeFiles/OpenCL.dir/loader /icd.c.obj In file included from C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/sour ce/external/OpenCL-Headers/CL/cl_platform.h:244, from C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/sour ce/external/OpenCL-Headers/CL/cl.h:21, from C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\sour ce\external\OpenCL-ICD-Loader\loader\icd.h:36, from C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\sour ce\external\OpenCL-ICD-Loader\loader\icd.c:19: D:/msys64/mingw32/lib/gcc/i686-w64-mingw32/10.3.0/include/stdint.h:9:16: fatal e rror: stdint.h: No such file or directory 9 | # include_next <stdint.h> | ^~~~~~~~~~ compilation terminated. mingw32-make[2]: *** [external\OpenCL-ICD-Loader\CMakeFiles\OpenCL.dir\build.mak e:76: external/OpenCL-ICD-Loader/CMakeFiles/OpenCL.dir/loader/icd.c.obj] Error 1 mingw32-make[1]: *** [CMakeFiles\Makefile2:295: external/OpenCL-ICD-Loader/CMake Files/OpenCL.dir/all] Error 2 mingw32-make: *** [Makefile:135: all] Error 2
В интернете ничего по поводу этой ошибки я не нашёл.
Для версии mingw32 (и 64) 8.1.0:
C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\build>"D:\mingw64_810\bin
mingw32-make.exe" Consolidate compiler generated dependencies of target OpenCL [ 2%] Building C object external/OpenCL-ICD-Loader/CMakeFiles/OpenCL.dir/loader /windows/icd_windows_hkr.c.obj C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c: In function 'khrIcdOsVendorsEnumerateH KR': C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c:217:21: error: 'CM_GETIDLIST_FILTER_CLA SS' undeclared (first use in this function); did you mean 'CM_GETIDLIST_FILTER_B ITS'? 217 | ULONG ulFlags = CM_GETIDLIST_FILTER_CLASS | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | CM_GETIDLIST_FILTER_BITS C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c:217:21: note: each undeclared identifie r is reported only once for each function it appears in C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c:218:21: error: 'CM_GETIDLIST_FILTER_PRE SENT' undeclared (first use in this function); did you mean 'CM_GETIDLIST_FILTER _BITS'? 218 | CM_GETIDLIST_FILTER_PRESENT; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | CM_GETIDLIST_FILTER_BITS C:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\source\external\OpenCL-ICD -Loader\loader\windows\icd_windows_hkr.c:343:22: error: 'DEVPKEY_Device_ClassGui d' undeclared (first use in this function)
343 | &DEVPKEY_Device_ClassGuid, | ^~~~~~~~~~~~~~~~~~~~~~~~ mingw32-make[2]: *** [external\OpenCL-ICD-Loader\CMakeFiles\OpenCL.dir\build.mak e:166: external/OpenCL-ICD-Loader/CMakeFiles/OpenCL.dir/loader/windows/icd_windo ws_hkr.c.obj] Error 1 mingw32-make[1]: *** [CMakeFiles\Makefile2:295: external/OpenCL-ICD-Loader/CMake Files/OpenCL.dir/all] Error 2 mingw32-make: *** [Makefile:135: all] Error 2
Здесь уже информации побольше. Вот тут https://github.com/KhronosGroup/OpenCL-ICD-Loader/issues/130 советуют установить более новую версию mingw. Но выше я уже пробовал так делать.
Если я пытаюсь конфигурировать проект с помощью mingw32 версии 10.3.0 из под msys2 с установленными пакетами (для 32):
mingw-w64-x86_32-gcc
mingw-w64-x86_32-gcc-libs
mingw-w64-x86_32-make
То CMake ругаца:
Check for working C compiler: D:/msys64/mingw32/bin/gcc.exe - broken CMake Error at D:/Program Files/CMake 3.20.2/share/cmake-3.20/Modules/CMakeTestCCompiler.cmake:66 (message): The C compiler
"D:/msys64/mingw32/bin/gcc.exe"is not able to compile a simple test program.
It fails with the following output:
Change Dir: C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/build/CMakeFiles/CMakeTmp Run Build Command(s):D:/mingw64/bin/mingw32-make.exe -f Makefile cmTC_64f2b/fast && D:/mingw64/bin/mingw32-make.exe -fCMakeFiles\cmTC_64f2b.dir\build.make CMakeFiles/cmTC_64f2b.dir/build
mingw32-make.exe[1]: Entering directory 'C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/build/CMakeFiles/CMakeTmp' Building C object CMakeFiles/cmTC_64f2b.dir/testCCompiler.c.obj D:\msys64\mingw32\bin\gcc.exe -o CMakeFiles\cmTC_64f2b.dir\testCCompiler.c.obj -cC:\Users\Public\Documents\Qt_Projects\warm-up1\opencl\build\CMakeFiles\CMakeTmp\testCCompiler.c
C:\Users\User\AppData\Local\Temp\cc6VTnLT.s: Assembler messages: C:\Users\User\AppData\Local\Temp\cc6VTnLT.s:9: Error: invalid instruction suffix for `push' CMakeFiles\cmTC_64f2b.dir\build.make:76: recipe for target 'CMakeFiles/cmTC_64f2b.dir/testCCompiler.c.obj' failed mingw32-make.exe[1]: *** [CMakeFiles/cmTC_64f2b.dir/testCCompiler.c.obj] Error 1 mingw32-make.exe[1]: Leaving directory 'C:/Users/Public/Documents/Qt_Projects/warm-up1/opencl/build/CMakeFiles/CMakeTmp' Makefile:126: recipe for target 'cmTC_64f2b/fast' failed mingw32-make.exe: *** [cmTC_64f2b/fast] Error 2
Для x64 дополнительно ещё просит libgmp-10.dll. Очень просит. Диалоговое окно нужно протыкать раз десять, чтобы оно исчезло.
Установка пакета mingw-w64-x86_64-gmp ничего не даёт.
Так какой же версией мне это собирать?