From b21c895ca59f3e7260c3a2a81ad88820fe9c1b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nagy-Egri=20M=C3=A1t=C3=A9=20Ferenc?= Date: Thu, 1 Mar 2018 17:08:53 +0100 Subject: [PATCH] Add OpenCL SDK and clMath ports (#2837) * initial clFFT porting * OpenCL SDK half baked * Tried fixing Debug/Release * Remove DLL deployment * OpenCL SDK installs * clFFT installs * clFFT properly depends on OpenCL * OpenCL SDK fixes and clFFT patches * [clfft][opencl] Simplification, use patches instead of full files. --- ports/clfft/CONTROL | 4 ++ ports/clfft/portfile.cmake | 37 ++++++++++++++ ports/clfft/tweak-install.patch | 28 ++++++++++ ports/opencl/CONTROL | 3 ++ ports/opencl/portfile.cmake | 90 +++++++++++++++++++++++++++++++++ ports/opencl/usage | 7 +++ 6 files changed, 169 insertions(+) create mode 100644 ports/clfft/CONTROL create mode 100644 ports/clfft/portfile.cmake create mode 100644 ports/clfft/tweak-install.patch create mode 100644 ports/opencl/CONTROL create mode 100644 ports/opencl/portfile.cmake create mode 100644 ports/opencl/usage diff --git a/ports/clfft/CONTROL b/ports/clfft/CONTROL new file mode 100644 index 000000000..0a109ac14 --- /dev/null +++ b/ports/clfft/CONTROL @@ -0,0 +1,4 @@ +Source: clfft +Version: 2.12.2 +Build-Depends: opencl +Description: clFFT is an OpenCL 1.2 accelerated Fast Fourier Transform library. diff --git a/ports/clfft/portfile.cmake b/ports/clfft/portfile.cmake new file mode 100644 index 000000000..4e314b5d9 --- /dev/null +++ b/ports/clfft/portfile.cmake @@ -0,0 +1,37 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO clMathLibraries/clFFT + REF v2.12.2 + SHA512 19e9a4e06f76ae7c7808d1188677d5553c43598886a75328b7801ab2ca68e35206839a58fe2f958a44a6f7c83284dc9461cd0e21c37d1042bf82e24aad066be8 + HEAD_REF master +) + +vcpkg_apply_patches( + SOURCE_PATH ${SOURCE_PATH} + PATCHES ${CMAKE_CURRENT_LIST_DIR}/tweak-install.patch +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH}/src + PREFER_NINJA + OPTIONS + -DBUILD_LOADLIBRARIES=OFF + -DBUILD_EXAMPLES=OFF + -DSUFFIX_LIB= +) + +vcpkg_install_cmake() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) + +file(INSTALL + "${SOURCE_PATH}/LICENSE" + DESTINATION + ${CURRENT_PACKAGES_DIR}/share/clfft/copyright +) + +vcpkg_fixup_cmake_targets(CONFIG_PATH "CMake") + +vcpkg_copy_pdbs() \ No newline at end of file diff --git a/ports/clfft/tweak-install.patch b/ports/clfft/tweak-install.patch new file mode 100644 index 000000000..45952032f --- /dev/null +++ b/ports/clfft/tweak-install.patch @@ -0,0 +1,28 @@ +diff --git a/src/clFFTConfig.cmake.in b/src/clFFTConfig.cmake.in +index 5b58c35..ee749a2 100644 +--- a/src/clFFTConfig.cmake.in ++++ b/src/clFFTConfig.cmake.in +@@ -1,3 +1,3 @@ + include(${CMAKE_CURRENT_LIST_DIR}/clFFTTargets.cmake) +-get_filename_component(CLFFT_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/@reldir@/include ABSOLUTE) ++get_filename_component(CLFFT_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/@reldir@/../include ABSOLUTE) + set(CLFFT_LIBRARIES clFFT) +diff --git a/src/library/CMakeLists.txt b/src/library/CMakeLists.txt +index 132ef86..12ba905 100644 +--- a/src/library/CMakeLists.txt ++++ b/src/library/CMakeLists.txt +@@ -90,6 +90,7 @@ target_link_libraries( clFFT ${OPENCL_LIBRARIES} ${CMAKE_DL_LIBS} ) + set_target_properties( clFFT PROPERTIES VERSION ${CLFFT_VERSION} ) + set_target_properties( clFFT PROPERTIES SOVERSION ${CLFFT_SOVERSION} ) + set_target_properties( clFFT PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/staging" ) ++set_target_properties( clFFT PROPERTIES INTERFACE_INCLUDE_DIRECTORIES $ ) + + if( CMAKE_COMPILER_IS_GNUCC ) + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/clFFT.pc.in +@@ -104,5 +105,5 @@ install( TARGETS clFFT + EXPORT Library + RUNTIME DESTINATION bin${SUFFIX_BIN} + LIBRARY DESTINATION lib${SUFFIX_LIB} +- ARCHIVE DESTINATION lib${SUFFIX_LIB}/import ++ ARCHIVE DESTINATION lib${SUFFIX_LIB} + ) diff --git a/ports/opencl/CONTROL b/ports/opencl/CONTROL new file mode 100644 index 000000000..89d4ad0e1 --- /dev/null +++ b/ports/opencl/CONTROL @@ -0,0 +1,3 @@ +Source: opencl +Version: 2.2 (2017.07.18) +Description: C/C++ headers and ICD loader (Installable Client Driver) for OpenCL diff --git a/ports/opencl/portfile.cmake b/ports/opencl/portfile.cmake new file mode 100644 index 000000000..f7e1bdd2f --- /dev/null +++ b/ports/opencl/portfile.cmake @@ -0,0 +1,90 @@ +include(vcpkg_common_functions) + +# OpenCL C headers +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO KhronosGroup/OpenCL-Headers + REF f039db6764d52388658ef15c30b2237bbda49803 + SHA512 5909a85f96477d731059528303435f06255e98ed8df9d4cd2b62c744b5fe41408c69c0d4068421a2813eb9ad9d70d7f1bace9ebf0db19cc09e71bb8066127c5f + HEAD_REF master +) + +file(INSTALL + "${SOURCE_PATH}/opencl22/CL" + DESTINATION + ${CURRENT_PACKAGES_DIR}/include +) + +# OpenCL C++ headers +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO KhronosGroup/OpenCL-CLHPP + REF 5dd8bb9e32a8e2f72621566b296ac8143a554270 + SHA512 2909fe2b979b52724ef8d285180d8bfd30bdd56cb79da4effc9e03b576ec7edb5497c99a9fa30541fe63037c84ddef21d4a73e7927f3813baab2a2afeecd55ab + HEAD_REF master +) + +vcpkg_find_acquire_program(PYTHON3) + +vcpkg_execute_required_process( + COMMAND "${PYTHON3}" "${SOURCE_PATH}/gen_cl_hpp.py" + -i ${SOURCE_PATH}/input_cl.hpp + -o ${CURRENT_PACKAGES_DIR}/include/CL/cl.hpp + WORKING_DIRECTORY ${SOURCE_PATH} + LOGNAME generate_clhpp-${TARGET_TRIPLET} +) + +vcpkg_execute_required_process( + COMMAND "${PYTHON3}" "${SOURCE_PATH}/gen_cl_hpp.py" + -i ${SOURCE_PATH}/input_cl2.hpp + -o ${CURRENT_PACKAGES_DIR}/include/CL/cl2.hpp + WORKING_DIRECTORY ${SOURCE_PATH} + LOGNAME generate_cl2hpp-${TARGET_TRIPLET} +) +message(STATUS "Generating OpenCL C++ headers done") + +# OpenCL ICD loader +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO KhronosGroup/OpenCL-ICD-Loader + REF 26a38983cbe5824fd5be03eab8d037758fc44360 + SHA512 3029f758ff0c39b57aa10d881af68e73532fd179c54063ed1d4529b7d6e27a5219e3c24b7fb5598d790ebcdc2441e00001a963671dc90fef2fc377c76d724f54 + HEAD_REF master +) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + message(STATUS "Building the ICD loader as a static library is not supported. Building as DLLs instead.") + set(VCPKG_LIBRARY_LINKAGE "dynamic") +endif() + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -DOPENCL_INCLUDE_DIRS=${CURRENT_PACKAGES_DIR}/include +) + +vcpkg_build_cmake(TARGET OpenCL) + +file(INSTALL + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/OpenCL.lib" + DESTINATION + ${CURRENT_PACKAGES_DIR}/lib +) + +file(INSTALL + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/OpenCL.lib" + DESTINATION + ${CURRENT_PACKAGES_DIR}/debug/lib +) + +file(INSTALL + "${SOURCE_PATH}/LICENSE.txt" + DESTINATION + ${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright +) +file(COPY + ${CMAKE_CURRENT_LIST_DIR}/usage + DESTINATION + ${CURRENT_PACKAGES_DIR}/share/${PORT} +) diff --git a/ports/opencl/usage b/ports/opencl/usage new file mode 100644 index 000000000..699ff0170 --- /dev/null +++ b/ports/opencl/usage @@ -0,0 +1,7 @@ +The package opencl is compatible with built-in CMake targets: + + find_package(OpenCL REQUIRED) + target_link_libraries(main PRIVATE ${OpenCL_LIBRARIES}) + target_include_directories(main PRIVATE ${OpenCL_INCLUDE_DIRS}) + +You will also need to install an appropriate driver package from your CPU/GPU manufacturer.