-
Notifications
You must be signed in to change notification settings - Fork 344
Expand file tree
/
Copy pathSConscript
More file actions
148 lines (112 loc) · 5 KB
/
SConscript
File metadata and controls
148 lines (112 loc) · 5 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
"""Build DAOS components"""
import os
HEADERS = ['daos_api.h', 'daos_types.h', 'daos_errno.h', 'daos_kv.h',
'daos_event.h', 'daos_mgmt.h', 'daos_types.h', 'daos_array.h',
'daos_task.h', 'daos_fs.h', 'daos_uns.h', 'daos_security.h',
'daos_prop.h', 'daos_obj_class.h', 'daos_obj.h', 'daos_pool.h',
'daos_cont.h', 'daos_version.h', 'daos_fs_sys.h', 'daos_s3.h', 'daos_pipeline.h',
'daos.h']
HEADERS_GURT = ['dlog.h', 'debug.h', 'common.h', 'hash.h', 'list.h',
'heap.h', 'fault_inject.h', 'debug_setup.h',
'types.h', 'atomic.h', 'slab.h',
'telemetry_consumer.h', 'telemetry_common.h']
HEADERS_CART = ['api.h', 'iv.h', 'types.h', 'swim.h']
# Keep versioned libs for now to avoid any conflict with 1.0
CART_VERSION = "4.9.0"
API_VERSION_MAJOR = "2"
API_VERSION_MINOR = "7"
API_VERSION_FIX = "0"
API_VERSION = f'{API_VERSION_MAJOR}.{API_VERSION_MINOR}.{API_VERSION_FIX}'
def read_and_save_version(env):
"""Read version from VERSION file and update daos_version.h"""
env.Append(CCFLAGS=['-DAPI_VERSION=\\"' + API_VERSION + '\\"'])
with open(os.path.join(Dir('#').abspath, "VERSION"), "r") as version_file:
version = version_file.read().rstrip()
(major, minor, fix) = version.split('.')
env.Append(CCFLAGS=['-DDAOS_VERSION=\\"' + version + '\\"'])
if GetOption('help'):
return version
tmpl_hdr_in = os.path.join('include', 'daos_version.h.in')
subst_dict = {'@TMPL_MAJOR@': API_VERSION_MAJOR,
'@TMPL_MINOR@': API_VERSION_MINOR,
'@TMPL_FIX@': API_VERSION_FIX,
'@TMPL_PKG_MAJOR@': major,
'@TMPL_PKG_MINOR@': minor,
'@TMPL_PKG_FIX@': fix,
'@Template for @': ''}
out = env.Substfile(tmpl_hdr_in, SUBST_DICT=subst_dict)
if not GetOption('silent'):
print(f'generated daos version header file: {out[0].abspath}')
return version
def scons():
"""Execute build"""
Import('env', 'base_env', 'base_env_mpi', 'prereqs')
daos_version = read_and_save_version(env)
Export('daos_version', 'API_VERSION')
# For Common library and headers.
env.Install(os.path.join('$PREFIX', 'include/daos'), 'include/daos/tse.h')
# Generic DAOS includes
env.AppendUnique(CPPPATH=[Dir('include').srcnode()])
env.AppendUnique(CPPPATH=[Dir('include')])
base_env.AppendUnique(CPPPATH=[Dir('include').srcnode()])
base_env.AppendUnique(CPPPATH=[Dir('include')])
if base_env_mpi:
base_env_mpi.AppendUnique(CPPPATH=[Dir('include').srcnode()])
base_env_mpi.AppendUnique(CPPPATH=[Dir('include')])
if not env.GetOption('clean') and not env.GetOption('help'):
conf = env.Clone().Configure()
# Detect if we have explicit_bzero
if not conf.CheckFunc('explicit_bzero'):
env.Append(CCFLAGS=['-DNEED_EXPLICIT_BZERO'])
base_env.Append(CCFLAGS=['-DNEED_EXPLICIT_BZERO'])
conf.Finish()
for header in HEADERS:
env.Install(os.path.join('$PREFIX', 'include'), os.path.join('include', header))
for header in HEADERS_GURT:
env.Install(os.path.join("$PREFIX", "include", "gurt"),
os.path.join("include", "gurt", header))
for header in HEADERS_CART:
env.Install(os.path.join("$PREFIX", "include", "cart"),
os.path.join("include", "cart", header))
env.Append(CCFLAGS=['-DCART_VERSION=\\"' + CART_VERSION + '\\"'])
libdaos_tgts = []
Export('env', 'CART_VERSION', 'libdaos_tgts')
# Generate common libraries used by multiple components
SConscript('gurt/SConscript')
SConscript('cart/SConscript')
SConscript('common/SConscript')
SConscript('bio/SConscript')
SConscript('vea/SConscript')
SConscript('vos/SConscript')
# Build each DAOS component
SConscript('rsvc/SConscript')
SConscript('chk/SConscript')
SConscript('mgmt/SConscript')
SConscript('pool/SConscript')
SConscript('container/SConscript')
SConscript('placement/SConscript')
SConscript('dtx/SConscript')
SConscript('object/SConscript')
SConscript('rebuild/SConscript')
SConscript('security/SConscript')
SConscript('pipeline/SConscript')
# Build DAOS client libraries
SConscript('client/SConscript')
# rdb unit test rdbt depends on libdaos
SConscript('rdb/SConscript')
# Then the DAOS I/O Engine executable
SConscript('engine/SConscript')
# Build utilities
SConscript('utils/SConscript')
# Build ddb
SConscript('ddb/SConscript')
# Build the control plane components
SConscript('control/SConscript')
# Build test
SConscript('placement/tests/SConscript')
SConscript('tests/SConscript')
if prereqs.client_requested():
api_version = env.Command('API_VERSION', "SConscript", f"echo {API_VERSION} > $TARGET")
env.Install("$PREFIX/lib64/daos", api_version)
if __name__ == "SCons.Script":
scons()