Hi, I would like to propose two new modules for inclusion in CMake: FindOpenCL to find OpenCL and FindHg for Mercurial (see attached.) FindOpenCL is written in similar spirit to FindOpenGL, while FindHg is basically the equivalent of FindSubversion for Mercurial.
The modules have been tested on Windows, Linux, and Mac, using a variety of OpenCL runtimes. I would be happy to be the maintainer of these modules, if they get accepted into the CMake distribution. Cheers, Matthäus
#.rst: # FindOpenCL # ---------- # # Try to find OpenCL # # Once done this will define # # :: # # OPENCL_FOUND - system has OpenCL # OPENCL_INCLUDE_DIR - the OpenCL include directory # OPENCL_LIBRARY - Link against this library to use OpenCL # OPENCL_VERSION - OpenCL version (eg. 1.0) # # FUNCTION(_FIND_OPENCL_VERSION) INCLUDE(CheckSymbolExists) INCLUDE(CMakePushCheckState) CMAKE_PUSH_CHECK_STATE() FOREACH(VERSION "2_0" "1_2" "1_1" "1_0") SET(CMAKE_REQUIRED_INCLUDES "${OPENCL_INCLUDE_DIR}") IF(APPLE) CHECK_SYMBOL_EXISTS( CL_VERSION_${VERSION} "${OPENCL_INCLUDE_DIR}/OpenCL/cl.h" OPENCL_VERSION_${VERSION}) ELSE() CHECK_SYMBOL_EXISTS( CL_VERSION_${VERSION} "${OPENCL_INCLUDE_DIR}/CL/cl.h" OPENCL_VERSION_${VERSION}) ENDIF() IF(OPENCL_VERSION_${VERSION}) STRING(REPLACE "_" "." VERSION "${VERSION}") SET(OPENCL_VERSION_FOUND ${VERSION} CACHE STRING "Highest supported OpenCL version") BREAK() ENDIF() ENDFOREACH() CMAKE_POP_CHECK_STATE() ENDFUNCTION() FIND_PATH(OPENCL_INCLUDE_DIR NAMES CL/cl.h OpenCL/cl.h PATHS "$ENV{PROGRAMFILES(X86)}/AMD APP/include" $ENV{AMDAPPSDKROOT}/include $ENV{INTELOCLSDKROOT}/include $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/inc $ENV{CUDA_PATH}/include # Legacy Stream SDK $ENV{ATISTREAMSDKROOT}/include) IF(CMAKE_SIZEOF_VOID_P EQUAL 4) SET(OPENCL_LIB_SEARCH_PATH ${OPENCL_LIB_SEARCH_PATH} "$ENV{PROGRAMFILES(X86)}/AMD APP/lib/x86" $ENV{AMDAPPSDKROOT}/lib/x86 $ENV{INTELOCLSDKROOT}/lib/x86 $ENV{CUDA_PATH}/lib/Win32 $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/lib/Win32 # Legacy Stream SDK $ENV{ATISTREAMSDKROOT}/lib/x86) ELSEIF(CMAKE_SIZEOF_VOID_P EQUAL 8) SET(OPENCL_LIB_SEARCH_PATH ${OPENCL_LIB_SEARCH_PATH} "$ENV{PROGRAMFILES(X86)}/AMD APP/lib/x86_64" $ENV{AMDAPPSDKROOT}/lib/x86_64 $ENV{INTELOCLSDKROOT}/lib/x64 $ENV{CUDA_PATH}/lib/x64 $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/lib/x64 # Legacy stream SDK $ENV{ATISTREAMSDKROOT}/lib/x86_64) ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 4) FIND_LIBRARY( OPENCL_LIBRARY NAMES OpenCL PATHS ${OPENCL_LIB_SEARCH_PATH}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( OpenCL DEFAULT_MSG OPENCL_LIBRARY OPENCL_INCLUDE_DIR) if(OPENCL_FOUND) set(OPENCL_LIBRARIES ${OPENCL_LIBRARY}) _FIND_OPENCL_VERSION() else(OPENCL_FOUND) set(OPENCL_LIBRARIES) endif(OPENCL_FOUND) mark_as_advanced( OPENCL_INCLUDE_DIR OPENCL_LIBRARY )
#.rst: # FindHg # ------ # # Extract information from a mercurial working copy # # The module defines the following variables: # # :: # # Hg_EXECUTABLE - path to mercurial command line client # Hg_FOUND - true if the command line client was found # # # If the command line client executable is found the following macro is defined: # # :: # # Hg_WC_INFO(<dir> <var-prefix>) # # Hg_WC_INFO extracts information of a mercurial working copy # at a given location. This macro defines the following variables: # # :: # # <var-prefix>_WC_CHANGESET - current changeset # <var-prefix>_WC_REVISION - current revision # # Example usage: # # :: # # find_package(Hg) # if(Hg_FOUND) # Hg_WC_INFO(${PROJECT_SOURCE_DIR} Project) # message("Current revision is ${Project_WC_REVISION}") # message("Current changeset is ${Project_WC_CHANGESET}") # endif() SET(Hg_FOUND FALSE) FIND_PROGRAM(Hg_EXECUTABLE NAMES hg hg.exe HINTS /usr/bin PATHS [HKEY_LOCAL_MACHINE\\Software\\TortoiseHg] [HKEY_LOCAL_MACHINE\\Software\\Wow6432Node\\TortoiseHg] DOC "hg command line client") MARK_AS_ADVANCED(Hg_EXECUTABLE) IF(Hg_EXECUTABLE) SET(Hg_FOUND TRUE) MACRO(Hg_WC_INFO dir prefix) EXECUTE_PROCESS(COMMAND ${Hg_EXECUTABLE} id -i -n WORKING_DIRECTORY ${dir} ERROR_VARIABLE Hg_error OUTPUT_VARIABLE ${prefix}_WC_DATA OUTPUT_STRIP_TRAILING_WHITESPACE) IF(NOT ${Hg_error} EQUAL 0) MESSAGE(SEND_ERROR "Command \"${Hg_EXECUTBALE} id -n\" in directory ${dir} failed with output:\n${Hg_error}") ENDIF(NOT ${Hg_error} EQUAL 0) STRING(REPLACE " " ";" ${prefix}_WC_DATA ${${prefix}_WC_DATA}) LIST(GET ${prefix}_WC_DATA 0 ${prefix}_WC_CHANGESET) LIST(GET ${prefix}_WC_DATA 1 ${prefix}_WC_REVISION) STRING(REGEX REPLACE "\\+$" "" ${prefix}_WC_REVISION ${${prefix}_WC_REVISION}) STRING(REGEX REPLACE "\\+$" "" ${prefix}_WC_CHANGESET ${${prefix}_WC_CHANGESET}) ENDMACRO(Hg_WC_INFO) ENDIF(Hg_EXECUTABLE) IF(NOT Hg_FOUND) IF(NOT Hg_FIND_QUIETLY) MESSAGE(STATUS "Mercurial was not found") ELSE(NOT Hg_FIND_QUIETLY) IF(Hg_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Mercurial was not found") ENDIF(Hg_FIND_REQUIRED) ENDIF(NOT Hg_FIND_QUIETLY) ENDIF(NOT Hg_FOUND)
-- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers