1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#-------------------------------------------------------------------------------
# GraphBLAS/GraphBLAS_JIT_configure.cmake: configure the JIT
#-------------------------------------------------------------------------------
# SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2025, All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0.
#-------------------------------------------------------------------------------
# construct the JIT compiler/link strings
if ( MINGW )
execute_process ( COMMAND cygpath -u "${CMAKE_C_COMPILER}"
OUTPUT_VARIABLE C_COMPILER_BINARY OUTPUT_STRIP_TRAILING_WHITESPACE )
else ( )
set ( C_COMPILER_BINARY "${CMAKE_C_COMPILER}" )
endif ( )
set ( GB_C_COMPILER "${C_COMPILER_BINARY}" )
set ( GB_C_FLAGS "${CMAKE_C_FLAGS}" )
set ( GB_C_LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" )
set ( GB_LIB_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}" )
set ( GB_LIB_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}" )
# construct the C flags and link flags
if ( APPLE )
# MacOS
set ( GB_C_FLAGS "${GB_C_FLAGS} -fPIC " )
if ( NOT GBMATLAB )
# MATLAB on the Mac is not a native application
set ( GB_C_FLAGS "${GB_C_FLAGS} -arch ${CMAKE_HOST_SYSTEM_PROCESSOR} " )
endif ( )
set ( GB_C_FLAGS "${GB_C_FLAGS} -isysroot ${CMAKE_OSX_SYSROOT} " )
set ( GB_C_LINK_FLAGS "${GB_C_LINK_FLAGS} -dynamiclib " )
set ( GB_OBJ_SUFFIX ".o" )
elseif ( MSVC )
# Microsoft compiler
set ( GB_OBJ_SUFFIX ".obj" )
else ( )
# Linux / Unix
set ( GB_C_FLAGS "${GB_C_FLAGS} -fPIC " )
set ( GB_C_LINK_FLAGS "${GB_C_LINK_FLAGS} -shared " )
set ( GB_OBJ_SUFFIX ".o" )
endif ( )
string ( REPLACE "\"" "\\\"" GB_C_FLAGS ${GB_C_FLAGS} )
# construct the -I list for OpenMP
if ( OpenMP_C_FOUND )
set ( GB_OMP_INC_DIRS ${OpenMP_C_INCLUDE_DIRS} )
set ( GB_OMP_INC ${OpenMP_C_INCLUDE_DIRS} )
list ( TRANSFORM GB_OMP_INC PREPEND " -I" )
else ( )
set ( GB_OMP_INC_DIRS "" )
set ( GB_OMP_INC "" )
endif ( )
# construct the library list
if ( APPLE )
set ( default_jit_enable_relocate OFF )
else ( )
set ( default_jit_enable_relocate ON )
endif ( )
option ( GRAPHBLAS_JIT_ENABLE_RELOCATE
"ON: Enable relocation of libraries for JIT. OFF: Keep libraries with full path for JIT."
${default_jit_enable_relocate} )
if ( GRAPHBLAS_JIT_ENABLE_RELOCATE )
# This might be something like:
# /usr/lib/libgomp.so;/usr/lib/libpthread.a;m
# convert to -l flags to avoid relocation issues, i.e.: "-lgomp -lpthread -lm"
set ( GB_C_LIBRARIES "" )
foreach ( _lib ${GB_CMAKE_LIBRARIES} )
string ( FIND ${_lib} "." _pos REVERSE )
if ( ${_pos} EQUAL "-1" )
set ( GB_C_LIBRARIES "${GB_C_LIBRARIES} -l${_lib}" )
continue ()
endif ( )
set ( _kinds "SHARED" "STATIC" )
if ( WIN32 )
list ( PREPEND _kinds "IMPORT" )
endif ( )
foreach ( _kind IN LISTS _kinds )
set ( _regex ".*\\/(lib)?([^\\.]*)(${CMAKE_${_kind}_LIBRARY_SUFFIX})" )
if ( ${_lib} MATCHES ${_regex} )
string ( REGEX REPLACE ${_regex} "\\2" _libname ${_lib} )
if ( NOT "${_libname}" STREQUAL "" )
set ( GB_C_LIBRARIES "${GB_C_LIBRARIES} -l${_libname}" )
break ()
endif ( )
endif ( )
endforeach ( )
endforeach ( )
else ( )
# keep full paths to libraries
string ( REPLACE "." "\\." LIBSUFFIX1 ${GB_LIB_SUFFIX} )
string ( REPLACE "." "\\." LIBSUFFIX2 ${CMAKE_STATIC_LIBRARY_SUFFIX} )
set ( GB_C_LIBRARIES "" )
foreach ( LIB_NAME ${GB_CMAKE_LIBRARIES} )
if (( LIB_NAME MATCHES ${LIBSUFFIX1} ) OR ( LIB_NAME MATCHES ${LIBSUFFIX2} ))
string ( APPEND GB_C_LIBRARIES " " ${LIB_NAME} )
else ( )
string ( APPEND GB_C_LIBRARIES " -l" ${LIB_NAME} )
endif ( )
endforeach ( )
endif ( )
if ( GRAPHBLAS_USE_JIT OR GRAPHBLAS_USE_CUDA )
message ( STATUS "------------------------------------------------------------------------" )
message ( STATUS "JIT configuration:" )
message ( STATUS "------------------------------------------------------------------------" )
# one or both JITs are enabled; make sure the cache path exists
message ( STATUS "JIT C compiler: ${GB_C_COMPILER}" )
message ( STATUS "JIT C flags: ${GB_C_FLAGS} ${GB_OPENMP_C_FLAGS}" )
message ( STATUS "JIT link flags: ${GB_C_LINK_FLAGS}" )
message ( STATUS "JIT lib prefix: ${GB_LIB_PREFIX}" )
message ( STATUS "JIT lib suffix: ${GB_LIB_SUFFIX}" )
message ( STATUS "JIT obj suffix: ${GB_OBJ_SUFFIX}" )
message ( STATUS "JIT cache: ${GRAPHBLAS_CACHE_PATH}" )
message ( STATUS "JIT openmp inc: ${GB_OMP_INC}" )
message ( STATUS "JIT openmp dirs ${GB_OMP_INC_DIRS}" )
message ( STATUS "JIT libraries: ${GB_C_LIBRARIES}" )
message ( STATUS "JIT cmake libs: ${GB_CMAKE_LIBRARIES}" )
endif ( )
# create the JIT cache directories
file ( MAKE_DIRECTORY ${GRAPHBLAS_CACHE_PATH} )
file ( MAKE_DIRECTORY "${GRAPHBLAS_CACHE_PATH}/src" )
file ( MAKE_DIRECTORY "${GRAPHBLAS_CACHE_PATH}/lib" )
file ( MAKE_DIRECTORY "${GRAPHBLAS_CACHE_PATH}/tmp" )
file ( MAKE_DIRECTORY "${GRAPHBLAS_CACHE_PATH}/lock" )
file ( MAKE_DIRECTORY "${GRAPHBLAS_CACHE_PATH}/c" )
|