-
Notifications
You must be signed in to change notification settings - Fork 0
/
wscript
155 lines (119 loc) · 4.93 KB
/
wscript
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
149
150
151
152
153
154
APPNAME = 'Pluto'
VERSION = '0.0.1'
SUBFOLDERS = ['Source', 'Tests', 'External/qtextra']
top = '.'
out = 'Build'
import os, shutil
from waflib import Utils, Task
from waflib.TaskGen import extension, before_method, after_method, feature
from waflib.Configure import conf
from waflib.Node import Node
CONFIGURATIONS = ['debug', 'release']
PLATFORMS = {
'win32' : ['win64'],
'linux' : ['linux_x64_gcc', 'linux_x64_clang']
}
def supported_platforms():
p = Utils.unversioned_sys_platform()
return PLATFORMS[p]
QT5_MODULES = ['Qt5Core', 'Qt5Gui', 'Qt5Widgets']
def options(opt):
opt.load('compiler_cxx python qt5 msvs')
opt.load('compile_settings', tooldir='Tools/WafLib')
opt.load('msvs_gen', tooldir='Tools/WafLib')
def configure(conf):
v = conf.env
v.MSVC_VERSIONS = ['msvc 14.0']# 'msvc 12.0']
conf.load('compiler_cxx python msvs')
conf.load('compile_settings', tooldir='Tools/WafLib')
conf.load('msvs_gen', tooldir='Tools/WafLib')
# Qt5
conf.load('qt5')
v.LIB_QT5 = []
v.LIB_QT5_DEBUG = []
v.LIBPATH_QT5 = []
v.LIBPATH_QT5_DEBUG = []
v.INCLUDES_QT5 = []
v.INCLUDES_QT5_DEBUG = []
v.DEFINES_QT5 = []
v.DEFINES_QT5_DEBUG = []
for m in QT5_MODULES:
v.LIB_QT5 += v['LIB_%s' % m.upper()]
v.LIB_QT5_DEBUG += v['LIB_%s_DEBUG' % m.upper()]
v.INCLUDES_QT5 += v['INCLUDES_%s' % m.upper()]
v.INCLUDES_QT5_DEBUG += v.INCLUDES_QT5 # v['INCLUDES_%s' % m.upper()]
v.DEFINES_QT5 += v['DEFINES_%s' % m.upper()]
v.DEFINES_QT5_DEBUG += v['DEFINES_%s_DEBUG' % m.upper()]
v.LIBPATH_QT5 += v['LIBPATH_%s' % m.upper()]
v.LIBPATH_QT5_DEBUG += v['LIBPATH_%s_DEBUG' % m.upper()]
v.RPATH += ['.']
v.RPATH += v.LIBPATH_QT5
# Python
# Finds the installed python version, ideally through anaconda
conf.check_python_version()
conf.check_python_headers('pyembed')
# TODO: waf-tools doesn't play well with debug build of python, we should clean this up,
# however, a lot of this will be invalid when we move to distributing python ourself.
# Use our own-built python lib
#v.LIBPATH_PYEMBED.insert(0, r'C:\dev\cpython\PCbuild\amd64')
#v.INCLUDES_PYEMBED.insert(0, r'C:\dev\cpython\PC')
#v.INCLUDES_PYEMBED.insert(0, r'C:\dev\cpython\Include')
# Python header imports lib, no need to do it twice
v.LIB_PYEMBED = []
# Numpy
numpy_inc_path = ''
for p in [__import__('numpy').get_include(), os.path.join(v.PYTHONDIR, 'numpy', 'core', 'include')]:
if os.path.isfile(os.path.join(p, 'numpy', 'arrayobject.h')):
numpy_inc_path = p
if numpy_inc_path == '':
conf.fatal('Failed to determine include path for numpy.')
v.INCLUDES_NUMPY = [numpy_inc_path]
v.LIBPATH_NUMPY = v.LIBPATH_PYEMBED
# Platform specific setup
variant_configure = {
'win64_debug': conf.configure_msvc_x64_debug,
'win64_release': conf.configure_msvc_x64_release,
'linux_x64_gcc_release': conf.configure_gcc_x64_release,
'linux_x64_clang_release': conf.configure_clang_x64_release,
}
for p in supported_platforms():
for c in CONFIGURATIONS:
v = p + '_' + c
conf.setenv(v, env=conf.env.derive().detach()) # Make sure to make a deep copy of base env
if v in variant_configure:
variant_configure[v]()
else:
print('No configuration set for variant %s' % v)
conf.setenv('')
conf.load('build_utils', tooldir='Tools/WafLib')
conf.recurse(SUBFOLDERS, mandatory=False)
def build(bld):
v = bld.env
if bld.cmd in ['msvs2013', 'msvs2015']:
print('Generating MSVS files')
bld.solution_name = APPNAME + '.sln'
bld.configurations = [bld.configuration_waf_to_vs(c) for c in CONFIGURATIONS]
bld.platforms = ['x64']
bld.projects_dir = bld.srcnode.make_node('.depproj')
bld.projects_dir.mkdir()
bld.platform = v.PLATFORM = 'msvs'
bld.configuration = v.CONFIGURATION = ''
else:
if not bld.variant:
# A variant needs to be specified, the variant is of the form "<platform>_<configuration>"
bld.fatal('No variant specified, read the comments in the wscript file!')
v.PLATFORM = bld.platform
v.CONFIGURATION = bld.configuration
print('Variant: %s' % bld.variant)
bld.recurse(SUBFOLDERS, mandatory=False)
def init(ctx):
from waflib.Build import BuildContext, CleanContext, InstallContext, UninstallContext
for p in supported_platforms():
for c in CONFIGURATIONS:
for x in (BuildContext, CleanContext, InstallContext, UninstallContext):
name = x.__name__.replace('Context','').lower()
class tmp(x):
cmd = name + '_' + p + '_' + c
variant = p + '_' + c
platform = p
configuration = c