File: GraphBLAS_JIT_configure.cmake

package info (click to toggle)
suitesparse 1%3A7.10.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 254,920 kB
  • sloc: ansic: 1,134,743; cpp: 46,133; makefile: 4,875; fortran: 2,087; java: 1,826; sh: 996; ruby: 725; python: 495; asm: 371; sed: 166; awk: 44
file content (136 lines) | stat: -rw-r--r-- 5,314 bytes parent folder | download
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" )