I'd like to adopt the pocl package. - Update to latest upstream release. - Enable CUDA support.
-- Takashi Yano <takashi.y...@nifty.ne.jp>
inherit clang cmake NAME="pocl" VERSION=3.1 RELEASE=1 CATEGORY="Libs" # The entire code is under MIT # include/utlist.h which is under BSD-1-Clause (unbundled) # lib/kernel/vecmath which is under GPL-3.0-or-later OR LGPL-3.0-or-later LICENSE="MIT, BSD-1-Clause, GPL-3.0-or-later OR LGPL-3.0-or-later" SUMMARY="OpenCL backend implementation" DESCRIPTION="Portable Computing Language (pocl) aims to become a MIT-licensed open source implementation of the OpenCL standard which can be easily adapted for new targets and devices, both for homogeneous CPU and heterogenous GPUs/ accelerators. pocl uses Clang as an OpenCL C frontend and LLVM for the kernel compiler implementation, and as a portability layer." HOMEPAGE="http://portablecl.org/" SRC_URI="https://github.com/pocl/pocl/archive/v${VERSION}/pocl-v${VERSION}.tar.gz" PKG_NAMES="libpocl2 libpocl-common libpocl-devel" libpocl2_REQUIRES="clang libpocl-common" libpocl2_CONTENTS=" usr/bin/cygpocl-2.dll usr/bin/libpocl-devices-basic.so usr/bin/libpocl-devices-cuda.so usr/bin/libpocl-devices-pthread.so " libpocl_common_CONTENTS=" etc/OpenCL/vendors/pocl.icd usr/share/doc/pocl/ usr/share/pocl/ " libpocl_devel_OBSOLETES="libpoclu-devel" libpocl_devel_REQUIRES="libpocl-common" libpocl_devel_CONTENTS=" usr/bin/poclcc.exe usr/lib/libpocl.dll.a usr/lib/pkgconfig/pocl.pc usr/lib/pocl/cygllvmopencl.dll usr/lib/libpocl-devices-basic.dll.a usr/lib/libpocl-devices-cuda.dll.a usr/lib/libpocl-devices-pthread.dll.a " DIFF_EXCLUDES="cl.hpp* testsuite" CYGCMAKE_ARGS=" -DPOCL_INSTALL_ICD_VENDORDIR=/etc/OpenCL/vendors -DPOCL_ICD_ABSOLUTE_PATH=OFF -DENABLE_ICD=ON -DENABLE_LIBLLVMOPENCL=ON -DENABLE_CUDA=ON -DCMAKE_INSTALL_PREFIX=/usr "
--- origsrc/pocl-3.1/CMakeLists.txt 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/CMakeLists.txt 2024-01-02 08:55:53.483796100 +0900 @@ -817,9 +819,9 @@ endif() # constant addrspace variables, and stack protector likely slows # down the kernels, so it needs to be determined whether it's worth # the trouble. -set(DEFAULT_KERNEL_CL_FLAGS "-xcl -fno-stack-protector -fPIC ${FLOATCONV_FLAG} ${OPAQUE_PTR_FLAGS}") -set(DEFAULT_KERNEL_C_FLAGS "-xc -std=c11 -D__CBUILD__ -fno-math-errno -fno-stack-protector -fPIC ${FLOATCONV_FLAG} ${OPAQUE_PTR_FLAGS}") -set(DEFAULT_KERNEL_CXX_FLAGS "-xc++ -std=c++11 -fno-stack-protector -fPIC ${FLOATCONV_FLAG} ${OPAQUE_PTR_FLAGS}") +set(DEFAULT_KERNEL_CL_FLAGS "-xcl -fno-stack-protector ${FLOATCONV_FLAG} ${OPAQUE_PTR_FLAGS}") +set(DEFAULT_KERNEL_C_FLAGS "-xc -std=c11 -D__CBUILD__ -fno-math-errno -fno-stack-protector ${FLOATCONV_FLAG} ${OPAQUE_PTR_FLAGS}") +set(DEFAULT_KERNEL_CXX_FLAGS "-xc++ -std=c++11 -fno-stack-protector ${FLOATCONV_FLAG} ${OPAQUE_PTR_FLAGS}") set(EXTRA_KERNEL_FLAGS "" CACHE STRING "Extra arguments to all kernel compilation commands (defaults to empty)") @@ -883,11 +885,12 @@ if(ENABLE_SPIR) endif() # required for the wrapper generator - if(CMAKE_VERSION VERSION_LESS 3.12.0) - find_program(Python3_EXECUTABLE NAMES "python3" REQUIRED) - else() - find_package(Python3 REQUIRED COMPONENTS Interpreter) - endif() + #if(CMAKE_VERSION VERSION_LESS 3.12.0) + # find_program(Python3_EXECUTABLE NAMES "python3" REQUIRED) + #else() + # find_package(Python3 REQUIRED COMPONENTS Interpreter) + #endif() + set(Python3_EXECUTABLE "/usr/bin/python3") endif() --- origsrc/pocl-3.1/cmake/LLVM.cmake 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/cmake/LLVM.cmake 2024-01-02 08:17:57.230897700 +0900 @@ -287,7 +287,7 @@ endforeach() macro(find_program_or_die OUTPUT_VAR PROG_NAME DOCSTRING) find_program(${OUTPUT_VAR} - NAMES "${PROG_NAME}${LLVM_BINARY_SUFFIX}${CMAKE_EXECUTABLE_SUFFIX}" "${PROG_NAME}${CMAKE_EXECUTABLE_SUFFIX}" + NAMES "${PROG_NAME}${LLVM_BINARY_SUFFIX}" "${PROG_NAME}" HINTS "${LLVM_BINDIR}" "${LLVM_CONFIG_LOCATION}" "${LLVM_PREFIX}" "${LLVM_PREFIX_BIN}" DOC "${DOCSTRING}" NO_CMAKE_PATH --- origsrc/pocl-3.1/lib/CL/CMakeLists.txt 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/CL/CMakeLists.txt 2024-01-02 08:17:57.233896100 +0900 @@ -294,9 +294,10 @@ set_target_properties("${POCL_LIBRARY_NA target_link_libraries("${POCL_LIBRARY_NAME}" PRIVATE ${POCL_PRIVATE_LINK_LIST}) install(TARGETS "${POCL_LIBRARY_NAME}" - ARCHIVE DESTINATION ${POCL_INSTALL_PUBLIC_LIBDIR}/static + ARCHIVE DESTINATION ${POCL_INSTALL_PUBLIC_LIBDIR} COMPONENT "dev" LIBRARY DESTINATION ${POCL_INSTALL_PUBLIC_LIBDIR} + RUNTIME DESTINATION ${POCL_INSTALL_PUBLIC_BINDIR} COMPONENT "lib" ) --- origsrc/pocl-3.1/lib/CL/devices/cuda/CMakeLists.txt 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/CL/devices/cuda/CMakeLists.txt 2024-01-02 08:54:26.135685300 +0900 @@ -23,8 +23,11 @@ # #============================================================================= -find_package(CUDA REQUIRED) +find_program(CUDA_EXECUTABLE nvcc REQUIRED) +get_filename_component(CUDA_TOOLKIT_BIN_DIR "${CUDA_EXECUTABLE}" DIRECTORY) +set(CUDA_TOOLKIT_ROOT_DIR "${CUDA_TOOLKIT_BIN_DIR}/..") message(STATUS "CUDA_TOOLKIT_ROOT_DIR = ${CUDA_TOOLKIT_ROOT_DIR}") +set(CUDA_INCLUDE_DIRS "${CUDA_TOOLKIT_ROOT_DIR}/include") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LLVM_CXXFLAGS}") include_directories(${LLVM_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../../../llvmopencl) @@ -32,7 +36,12 @@ include_directories(${LLVM_INCLUDE_DIRS} add_pocl_device_library("pocl-devices-cuda" pocl-cuda.c pocl-cuda.h pocl-ptx-gen.cc pocl-ptx-gen.h) target_compile_definitions("pocl-devices-cuda" PRIVATE "-DCUDA_TOOLKIT_ROOT_DIR=\"${CUDA_TOOLKIT_ROOT_DIR}\"") if(ENABLE_LOADABLE_DRIVERS) - target_link_libraries(pocl-devices-cuda PRIVATE cuda ${POCL_LLVM_LIBS} ${PTHREAD_LIBRARY}) + if (X86_64) + set(CUDA_LIB_ARCH "x64") + else() + set(CUDA_LIB_ARCH "Win32") + endif() + target_link_libraries(pocl-devices-cuda PRIVATE ${CUDA_TOOLKIT_ROOT_DIR}/lib/${CUDA_LIB_ARCH}/cuda.lib ${POCL_LLVM_LIBS} ${PTHREAD_LIBRARY}) endif() if(ENABLE_CUDNN) --- origsrc/pocl-3.1/lib/CL/devices/cuda/pocl-cuda.c 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/CL/devices/cuda/pocl-cuda.c 2024-01-02 08:17:57.239883300 +0900 @@ -73,6 +73,10 @@ cudnnHandle_t cudnn; } \ } +#ifdef __CYGWIN__ +#undef POCL_DEBUG_MESSAGES +#endif + typedef struct pocl_cuda_device_data_s { CUdevice device; @@ -567,6 +571,9 @@ pocl_cuda_init_queue (cl_device_id devic queue_data->use_threads = !pocl_get_bool_option ("POCL_CUDA_DISABLE_QUEUE_THREADS", 1); +#ifdef __CYGWIN__ + queue_data->use_threads = 0; /* Thread does not work in windows CUDA */ +#endif if (queue_data->use_threads) { @@ -2107,7 +2114,8 @@ pocl_cuda_free_event_data (cl_event even { pocl_cuda_event_data_t *event_data = (pocl_cuda_event_data_t *)event->data; - PTHREAD_CHECK (pthread_cond_destroy (&event_data->event_cond)); + if (event_data->event_cond) + PTHREAD_CHECK (pthread_cond_destroy (&event_data->event_cond)); if (event->queue->properties & CL_QUEUE_PROFILING_ENABLE) cuEventDestroy (event_data->start); cuEventDestroy (event_data->end); --- origsrc/pocl-3.1/lib/CL/devices/cuda/pocl-ptx-gen.cc 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/CL/devices/cuda/pocl-ptx-gen.cc 2024-01-02 08:17:57.241882300 +0900 @@ -960,11 +960,19 @@ int pocl_cuda_get_ptr_arg_alignment(cons llvm::dyn_cast<llvm::GetElementPtrInst>(U)) { for (auto UU : GEP->users()) { if (llvm::StoreInst *SI = llvm::dyn_cast<llvm::StoreInst>(UU)) { +#ifdef LLVM_OLDER_THAN_15_0 + Alignments[i] = SI->getAlignment(); +#else Alignments[i] = SI->getAlign().value(); +#endif break; } if (llvm::LoadInst *LI = llvm::dyn_cast<llvm::LoadInst>(UU)) { +#ifdef LLVM_OLDER_THAN_15_0 + Alignments[i] = LI->getAlignment(); +#else Alignments[i] = LI->getAlign().value(); +#endif break; } } --- origsrc/pocl-3.1/lib/CL/devices/topology/pocl_topology.c 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/CL/devices/topology/pocl_topology.c 2024-01-02 08:17:57.244880900 +0900 @@ -205,7 +205,7 @@ exit_destroy: } // #ifdef HWLOC -#elif defined(__linux__) || defined(__ANDROID__) +#elif defined(__linux__) || defined(__ANDROID__) || defined(__CYGWIN__) #define L3_CACHE_SIZE "/sys/devices/system/cpu/cpu0/cache/index3/size" #define L2_CACHE_SIZE "/sys/devices/system/cpu/cpu0/cache/index2/size" --- origsrc/pocl-3.1/lib/CL/pocl_build.c 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/CL/pocl_build.c 2024-01-02 10:47:45.937257900 +0900 @@ -690,6 +690,13 @@ compile_and_link_program(int compile_pro goto ERROR_CLEAN_OPTIONS; } +#ifdef __CYGWIN__ + if (program->compiler_options == NULL) + { + program->compiler_options = (char *)malloc(512); + program->compiler_options[0] = '\0'; + } +#endif POCL_MSG_PRINT_LLVM ("building program with options %s\n", program->compiler_options); --- origsrc/pocl-3.1/lib/CL/pocl_util.c 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/CL/pocl_util.c 2024-01-02 08:17:57.247891900 +0900 @@ -59,8 +59,10 @@ #if defined(__APPLE__) #define _DARWIN_C_SOURCE #endif -#ifdef __linux__ +#if defined(__linux__) || defined(__CYGWIN__) #define _GNU_SOURCE +#undef __GNU_VISIBLE +#define __GNU_VISIBLE 1 #endif #include <dlfcn.h> #endif --- origsrc/pocl-3.1/lib/kernel/host/spir_wrapper32.ll 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/kernel/host/spir_wrapper32.ll 2024-01-02 08:17:57.250886400 +0900 @@ -2663,7 +2663,7 @@ attributes #0 = { nounwind "correctly-ro !0 = !{i32 1, i32 2} !1 = !{!"clang version 6.0.0"} -!2 = !{i32 1, !"wchar_size", i32 4} +!2 = !{i32 1, !"wchar_size", i32 2} !3 = !{i32 7, !"PIC Level", i32 2} --- origsrc/pocl-3.1/lib/kernel/host/spir_wrapper64.ll 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/kernel/host/spir_wrapper64.ll 2024-01-02 08:17:57.255884700 +0900 @@ -14731,7 +14731,7 @@ attributes #0 = { nounwind "correctly-ro !0 = !{i32 1, i32 2} !1 = !{!"clang version 6.0.0"} -!2 = !{i32 1, !"wchar_size", i32 4} +!2 = !{i32 1, !"wchar_size", i32 2} !3 = !{i32 7, !"PIC Level", i32 2} --- origsrc/pocl-3.1/lib/llvmopencl/CMakeLists.txt 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/llvmopencl/CMakeLists.txt 2024-01-02 08:17:57.257883900 +0900 @@ -115,9 +115,10 @@ harden("llvmopencl") # not sure where other platforms get their library linkage list, probably there is # way to make this more consistent on different platforms -if(MSVC) +if(WIN32 OR CYGWIN) + target_link_libraries("llvmopencl" pocl) target_link_libraries("llvmopencl" ${POCL_LLVM_LIBS}) -endif(MSVC) +endif(WIN32 OR CYGWIN) #target_link_libraries("llvmopencl" "${LLVM_SYSLIBS}") endif(ENABLE_LIBLLVMOPENCL) --- origsrc/pocl-3.1/lib/llvmopencl/DebugHelpers.h 2022-12-05 21:36:08.000000000 +0900 +++ src/pocl-3.1/lib/llvmopencl/DebugHelpers.h 2024-01-02 08:17:57.260886300 +0900 @@ -24,7 +24,7 @@ #define _POCL_DEBUG_HELPERS_H #include <string> -#if _MSC_VER +#if _MSC_VER || defined(__CYGWIN__) # include <set> #endif