You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							179 lines
						
					
					
						
							4.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							179 lines
						
					
					
						
							4.5 KiB
						
					
					
				
								# FindHwloc
							 | 
						|
								# ----------
							 | 
						|
								#
							 | 
						|
								# Try to find Portable Hardware Locality (hwloc) libraries.
							 | 
						|
								# http://www.open-mpi.org/software/hwloc
							 | 
						|
								#
							 | 
						|
								# You may declare HWLOC_ROOT environment variable to tell where
							 | 
						|
								# your hwloc library is installed. 
							 | 
						|
								#
							 | 
						|
								# Once done this will define::
							 | 
						|
								#
							 | 
						|
								#   Hwloc_FOUND            - True if hwloc was found
							 | 
						|
								#   Hwloc_INCLUDE_DIRS     - include directories for hwloc
							 | 
						|
								#   Hwloc_LIBRARIES        - link against these libraries to use hwloc
							 | 
						|
								#   Hwloc_VERSION          - version
							 | 
						|
								#   Hwloc_CFLAGS           - include directories as compiler flags
							 | 
						|
								#   Hwloc_LDLFAGS          - link paths and libs as compiler flags
							 | 
						|
								#
							 | 
						|
								
							 | 
						|
								#=============================================================================
							 | 
						|
								# Copyright 2014 Mikael Lepistö
							 | 
						|
								#
							 | 
						|
								# Distributed under the OSI-approved BSD License (the "License");
							 | 
						|
								#
							 | 
						|
								# This software is distributed WITHOUT ANY WARRANTY; without even the
							 | 
						|
								# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
							 | 
						|
								# See the License for more information.
							 | 
						|
								#=============================================================================
							 | 
						|
								
							 | 
						|
								if(WIN32)
							 | 
						|
								  find_path(Hwloc_INCLUDE_DIR
							 | 
						|
								    NAMES
							 | 
						|
								      hwloc.h
							 | 
						|
								    PATHS
							 | 
						|
								      ENV "PROGRAMFILES(X86)"
							 | 
						|
								      ENV HWLOC_ROOT
							 | 
						|
								    PATH_SUFFIXES
							 | 
						|
								      include
							 | 
						|
								  )
							 | 
						|
								
							 | 
						|
								  find_library(Hwloc_LIBRARY
							 | 
						|
								    NAMES 
							 | 
						|
								      libhwloc.lib
							 | 
						|
								    PATHS
							 | 
						|
								      ENV "PROGRAMFILES(X86)"
							 | 
						|
								      ENV HWLOC_ROOT
							 | 
						|
								    PATH_SUFFIXES
							 | 
						|
								      lib
							 | 
						|
								  )
							 | 
						|
								
							 | 
						|
								  #
							 | 
						|
								  # Check if the found library can be used to linking 
							 | 
						|
								  #
							 | 
						|
								  SET (_TEST_SOURCE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/linktest.c")
							 | 
						|
								  FILE (WRITE "${_TEST_SOURCE}"
							 | 
						|
								    "
							 | 
						|
								    #include <hwloc.h>
							 | 
						|
								    int main()
							 | 
						|
								    { 
							 | 
						|
								      hwloc_topology_t topology;
							 | 
						|
								      int nbcores;
							 | 
						|
								      hwloc_topology_init(&topology);
							 | 
						|
								      hwloc_topology_load(topology);
							 | 
						|
								      nbcores = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE);
							 | 
						|
								      hwloc_topology_destroy(topology);
							 | 
						|
								      return 0;
							 | 
						|
								    }
							 | 
						|
								    "
							 | 
						|
								  )
							 | 
						|
								
							 | 
						|
								  TRY_COMPILE(_LINK_SUCCESS ${CMAKE_BINARY_DIR} "${_TEST_SOURCE}"
							 | 
						|
								    CMAKE_FLAGS
							 | 
						|
								    "-DINCLUDE_DIRECTORIES:STRING=${Hwloc_INCLUDE_DIR}"
							 | 
						|
								    CMAKE_FLAGS
							 | 
						|
								    "-DLINK_LIBRARIES:STRING=${Hwloc_LIBRARY}"
							 | 
						|
								  )
							 | 
						|
								
							 | 
						|
								  IF(NOT _LINK_SUCCESS)
							 | 
						|
								    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
							 | 
						|
								      message(STATUS "You are building 64bit target.")
							 | 
						|
								    ELSE()
							 | 
						|
								      message(STATUS "You are building 32bit code. If you like to build x64 use e.g. -G 'Visual Studio 12 Win64' generator." )
							 | 
						|
								    ENDIF()
							 | 
						|
								    message(FATAL_ERROR "Library found, but linking test program failed.")
							 | 
						|
								  ENDIF()
							 | 
						|
								
							 | 
						|
								  #
							 | 
						|
								  # Resolve version if some compiled binary found...
							 | 
						|
								  #
							 | 
						|
								  find_program(HWLOC_INFO_EXECUTABLE
							 | 
						|
								    NAMES 
							 | 
						|
								      hwloc-info
							 | 
						|
								    PATHS
							 | 
						|
								      ENV HWLOC_ROOT 
							 | 
						|
								    PATH_SUFFIXES
							 | 
						|
								      bin
							 | 
						|
								  )
							 | 
						|
								  
							 | 
						|
								  if(HWLOC_INFO_EXECUTABLE)
							 | 
						|
								    execute_process(
							 | 
						|
								      COMMAND ${HWLOC_INFO_EXECUTABLE} "--version" 
							 | 
						|
								      OUTPUT_VARIABLE HWLOC_VERSION_LINE 
							 | 
						|
								      OUTPUT_STRIP_TRAILING_WHITESPACE
							 | 
						|
								    )
							 | 
						|
								    string(REGEX MATCH "([0-9]+.[0-9]+)$" 
							 | 
						|
								      Hwloc_VERSION "${HWLOC_VERSION_LINE}")
							 | 
						|
								    unset(HWLOC_VERSION_LINE)
							 | 
						|
								  endif()
							 | 
						|
								  
							 | 
						|
								  #
							 | 
						|
								  # All good
							 | 
						|
								  #
							 | 
						|
								
							 | 
						|
								  set(Hwloc_LIBRARIES ${Hwloc_LIBRARY})
							 | 
						|
								  set(Hwloc_INCLUDE_DIRS ${Hwloc_INCLUDE_DIR})
							 | 
						|
								
							 | 
						|
								  include(FindPackageHandleStandardArgs)
							 | 
						|
								  find_package_handle_standard_args(
							 | 
						|
								    Hwloc
							 | 
						|
								    FOUND_VAR Hwloc_FOUND
							 | 
						|
								    REQUIRED_VARS Hwloc_LIBRARY Hwloc_INCLUDE_DIR
							 | 
						|
								    VERSION_VAR Hwloc_VERSION)
							 | 
						|
								
							 | 
						|
								  mark_as_advanced(
							 | 
						|
								    Hwloc_INCLUDE_DIR
							 | 
						|
								    Hwloc_LIBRARY)
							 | 
						|
								
							 | 
						|
								  foreach(arg ${Hwloc_INCLUDE_DIRS})
							 | 
						|
								    set(Hwloc_CFLAGS "${Hwloc_CFLAGS} /I${arg}")
							 | 
						|
								  endforeach()
							 | 
						|
								
							 | 
						|
								  set(Hwloc_LDFLAGS "${Hwloc_LIBRARY}")
							 | 
						|
								
							 | 
						|
								else()
							 | 
						|
								
							 | 
						|
								  # Find with pkgconfig
							 | 
						|
								  find_package(PkgConfig)
							 | 
						|
								
							 | 
						|
								  if(HWLOC_ROOT)
							 | 
						|
								    set(ENV{PKG_CONFIG_PATH} "${HWLOC_ROOT}/lib/pkgconfig")
							 | 
						|
								  else()
							 | 
						|
								    foreach(PREFIX ${CMAKE_PREFIX_PATH})
							 | 
						|
								      set(PKG_CONFIG_PATH "${PKG_CONFIG_PATH}:${PREFIX}/lib/pkgconfig")
							 | 
						|
								    endforeach()
							 | 
						|
								    set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:$ENV{PKG_CONFIG_PATH}")
							 | 
						|
								  endif()
							 | 
						|
								
							 | 
						|
								  if(hwloc_FIND_REQUIRED)
							 | 
						|
								    set(_hwloc_OPTS "REQUIRED")
							 | 
						|
								  elseif(hwloc_FIND_QUIETLY)
							 | 
						|
								    set(_hwloc_OPTS "QUIET")
							 | 
						|
								  else()
							 | 
						|
								    set(_hwloc_output 1)
							 | 
						|
								  endif()
							 | 
						|
								
							 | 
						|
								  if(hwloc_FIND_VERSION)
							 | 
						|
								    if(hwloc_FIND_VERSION_EXACT)
							 | 
						|
								      pkg_check_modules(Hwloc ${_hwloc_OPTS} hwloc=${hwloc_FIND_VERSION})
							 | 
						|
								    else()
							 | 
						|
								      pkg_check_modules(Hwloc ${_hwloc_OPTS} hwloc>=${hwloc_FIND_VERSION})
							 | 
						|
								    endif()
							 | 
						|
								  else()
							 | 
						|
								    pkg_check_modules(Hwloc ${_hwloc_OPTS} hwloc)
							 | 
						|
								  endif()
							 | 
						|
								
							 | 
						|
								  if(Hwloc_FOUND)
							 | 
						|
								    include(FindPackageHandleStandardArgs)
							 | 
						|
								    find_package_handle_standard_args(Hwloc DEFAULT_MSG Hwloc_LIBRARIES)
							 | 
						|
								
							 | 
						|
								    if(NOT ${Hwloc_VERSION} VERSION_LESS 1.7.0)
							 | 
						|
								      set(Hwloc_GL_FOUND 1)
							 | 
						|
								    endif()
							 | 
						|
								
							 | 
						|
								    if(_hwloc_output)
							 | 
						|
								      message(STATUS
							 | 
						|
								        "Found hwloc ${Hwloc_VERSION} in ${Hwloc_INCLUDE_DIRS}:${Hwloc_LIBRARIES}")
							 | 
						|
								    endif()
							 | 
						|
								  endif()
							 | 
						|
								endif()
							 |