Coverage for python/lsst/sconsUtils/tools/cuda.py: 64%

32 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2022-11-08 21:43 -0800

1""" 

2cuda 

3 

4CUDA Tool for SCons 

5 

6""" 

7 

8import os 

9import SCons.Tool 

10import SCons.Scanner.C 

11import SCons.Defaults 

12 

13CUDAScanner = SCons.Scanner.C.CScanner() 

14 

15 

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 

25 

26 

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 

33 

34 

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) 

42 

43 # default compiler 

44 env['NVCC'] = 'nvcc' 

45 

46 # default flags for the NVCC compiler 

47 env['NVCCFLAGS'] = '' 

48 env['STATICNVCCFLAGS'] = '' 

49 env['SHAREDNVCCFLAGS'] = '' 

50 env['ENABLESHAREDNVCCFLAG'] = '-shared' 

51 env['NVCCCMDLINE'] = '' 

52 

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' 

58 

59 

60def exists(env): 

61 return env.Detect('nvcc')