Coverage for python/lsst/sconsUtils/tools/cuda.py: 64%
32 statements
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-14 21:20 +0000
« prev ^ index » next coverage.py v7.2.5, created at 2023-05-14 21:20 +0000
1"""
2cuda
4CUDA Tool for SCons
6"""
8import os
9import SCons.Tool
10import SCons.Scanner.C
11import SCons.Defaults
13CUDAScanner = SCons.Scanner.C.CScanner()
16# this object emitters add '.linkinfo' suffixed files as extra targets
17# these files are generated by nvcc. The reason to do this is to remove
18# the extra .linkinfo files when calling scons -c
19def CUDANVCCStaticObjectEmitter(target, source, env):
20 tgt, src = SCons.Defaults.StaticObjectEmitter(target, source, env)
21 for file in src:
22 lifile = os.path.splitext(src[0].rstr())[0] + '.linkinfo' # noqa F841
23 # tgt.append(lifile)
24 return tgt, src
27def CUDANVCCSharedObjectEmitter(target, source, env):
28 tgt, src = SCons.Defaults.SharedObjectEmitter(target, source, env)
29 for file in src:
30 lifile = os.path.splitext(src[0].rstr())[0] + '.linkinfo' # noqa F841
31 # tgt.append(lifile)
32 return tgt, src
35def generate(env):
36 staticObjBuilder, sharedObjBuilder = SCons.Tool.createObjBuilders(env)
37 staticObjBuilder.add_action('.cu', '$STATICNVCCCMD')
38 staticObjBuilder.add_emitter('.cu', CUDANVCCStaticObjectEmitter)
39 sharedObjBuilder.add_action('.cu', '$SHAREDNVCCCMD')
40 sharedObjBuilder.add_emitter('.cu', CUDANVCCSharedObjectEmitter)
41 SCons.Tool.SourceFileScanner.add_scanner('.cu', CUDAScanner)
43 # default compiler
44 env['NVCC'] = 'nvcc'
46 # default flags for the NVCC compiler
47 env['NVCCFLAGS'] = ''
48 env['STATICNVCCFLAGS'] = ''
49 env['SHAREDNVCCFLAGS'] = ''
50 env['ENABLESHAREDNVCCFLAG'] = '-shared'
51 env['NVCCCMDLINE'] = ''
53 # default NVCC commands
54 env['STATICNVCCCMD'] = \
55 '$NVCC -o $TARGET -c $NVCCFLAGS $_CPPINCFLAGS $STATICNVCCFLAGS $NVCCCMDLINE $SOURCES'
56 env['SHAREDNVCCCMD'] = '$NVCC -o $TARGET -c $NVCCFLAGS $_CPPINCFLAGS $SHAREDNVCCFLAGS' \
57 ' $ENABLESHAREDNVCCFLAG $NVCCCMDLINE $SOURCES'
60def exists(env):
61 return env.Detect('nvcc')