-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSConstruct
More file actions
executable file
·114 lines (83 loc) · 3.37 KB
/
SConstruct
File metadata and controls
executable file
·114 lines (83 loc) · 3.37 KB
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
import os
import sys
###############################################
# Options
###############################################
AddOption('--verbose', action='store_true', dest='verbose', default=False, help='Enable print statements')
AddOption('--cuda', dest='cuda', help='Compile gpu components')
AddOption('--openmp', action='store_true', dest='openmp', help='Compile openmp components')
###############################################
# Core
###############################################
VariantDir('build/core', 'core')
envCore = Environment()
envCore.Append(CCFLAGS=' -Ofast')
envCore.Append(CCFLAGS=' -std=c99')
envCore.Replace(LIBS=[])
envCore.Append(CCFLAGS=' -DSILENCE='+str(0 if GetOption('verbose') else 1))
# Library compile defines/paths
if GetOption('openmp'):
envCore.Append(CCFLAGS=' -DOPENMP')
envCore.Append(CCFLAGS=' -fopenmp')
envCore.Append(LINKFLAGS=' -fopenmp')
# Platform-dependent build
# (may require library-specific changes)
objects = []
if sys.platform == 'darwin':
envCore.Append(CCFLAGS=' -DMAC_OS')
envCore.Replace(CC='clang')
envCore.Append(CCFLAGS=' -Wno-incompatible-pointer-types')
envCore.Append(LINKFLAGS=' -framework Accelerate')
objects.append(envCore.SharedObject('build/core/paradmm-host', Glob('build/core/*.c')))
else:
envCore.Replace(CC='gfortran')
envCore.Append(CCFLAGS=' -Wno-implicit')
envCore.Append(CCFLAGS=' -Wno-unused-result')
objects.append(envCore.SharedObject('build/core/paradmm-host', Glob('build/core/*.c')))
envCore.SharedLibrary('out/lib/paradmm', objects)
###############################################
# Cuda
###############################################
envNVCC = None
o = None
if GetOption('cuda'):
envNVCC = Environment()
envNVCC['CUDA_TOOLKIT_PATH'] = GetOption('cuda')
envNVCC['CUDA_SDK_PATH'] = GetOption('cuda')
envNVCC.Tool('cuda','.')
if GetOption('openmp'):
envNVCC.Append(NVCCFLAGS=' -DOPENMP')
envNVCC.Append(NVCCFLAGS=' -Xcompiler -fopenmp')
envNVCC.Append(LINKFLAGS=' -Xcompiler -fopenmp')
envNVCC.Append(NVCCFLAGS=' -Xcompiler -Ofast')
envNVCC.Append(NVCCFLAGS=' -Xcompiler -fPIC')
envNVCC.Append(NVCCFLAGS=' --use_fast_math -m64 --shared -dc')
envNVCC.Append(NVCCFLAGS=' -DSILENCE='+str(0 if GetOption('verbose') else 1))
envNVCC.Append(NVCCFLAGS=' -Ibuild/core')
envNVCC.Append(NVCCFLAGS=' -DNEEDS_EXTERN_C')
envNVCC.Replace(CC='nvcc')
envNVCC['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME']=1
o = envNVCC.Object('out/lib/paradmm-gpu', Glob('build/core/*.cu'))
# envNVCC.SharedLibrary('out/lib/paradmm-gpu', o)
###############################################
# Includes
###############################################
envCore.Install('out/include', Glob('build/core/*.h'))
###############################################
# Packing Demo
###############################################
VariantDir('build/packing', 'packing')
envPacking = envCore.Clone()
envPacking.Append(CPPPATH=['#out/include'])
envPacking.Append(LIBPATH=['#out/lib'])
envPacking.Append(LIBS='paradmm')
envPacking.Program('#out/packing', Glob('build/packing/*.c'))
##
if envNVCC is not None:
envPackingNVCC = envNVCC.Clone()
envPackingNVCC.Append(LIBPATH=['#out/lib'])
# envPackingNVCC.Append(LIBS=['paradmm', 'paradmm-gpu'])
envPackingNVCC.Append(LIBS=['paradmm'])
o2 = envPackingNVCC.Object(Glob('build/packing/*.cu'))
# envPackingNVCC.Program('#out/packing-gpu', [o2])
envPackingNVCC.Program('#out/packing-gpu', [o, o2])