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
|
#!/usr/bin/env python
Import("env")
def build_lexy(env):
env.Append(CPPDEFINES=["LEXY_HAS_UNICODE_DATABASE=1"])
lexy_env = env.Clone()
# Require C++20
if lexy_env.get("is_msvc", False):
lexy_env.Append(CXXFLAGS=["/std:c++20"])
lexy_env.Append(CXXFLAGS=["/WX", "/W3", "/D", "_CRT_SECURE_NO_WARNINGS"])
if not lexy_env.get("use_clang_cl"):
lexy_env.Append(CXXFLAGS=["/wd5105"])
else:
lexy_env.Append(CXXFLAGS=["-std=c++20"])
lexy_env.Append(CXXFLAGS=["-pedantic-errors", "-Werror", "-Wall", "-Wextra", "-Wconversion", "-Wsign-conversion"])
if lexy_env["CXX"] == "clang++":
lexy_env.Append(CXXFLAGS=["-Wno-shift-op-parentheses", "-Wno-parentheses-equality"])
else:
lexy_env.Append(CXXFLAGS=[
"-Wno-parentheses", "-Wno-unused-local-typedefs", "-Wno-array-bounds" #, "-Wno-maybe-uninitialized", "-Wno-restrict"
])
paths = ["lexy/include", "lexy/src"]
lexy_env.Append(CPPPATH=[[lexy_env.Dir(p) for p in paths]])
sources = env.GlobRecursive("*.cpp", paths)
env.lexy_sources = sources
library_name = "liblexy_file" + env["LIBSUFFIX"]
library = lexy_env.StaticLibrary(target="lexy/src/" + library_name, source=sources)
Default(library)
env.Append(CPPPATH=[lexy_env.Dir("lexy/include")])
if env.get("is_msvc", False):
env.Append(CXXFLAGS=["/external:I", lexy_env.Dir("lexy/include"), "/external:W0"])
else:
env.Append(CXXFLAGS=["-isystem", lexy_env.Dir("lexy/include")])
env.Append(CXXFLAGS=[""])
env.Append(LIBPATH=[lexy_env.Dir("lexy/src")])
env.Prepend(LIBS=[library_name])
def build_dryad(env):
paths = ["dryad/include"]
sources = env.GlobRecursive("*.cpp", paths)
env.dryad_sources = sources
env.Append(CPPPATH=[env.Dir("dryad/include")])
if env.get("is_msvc", False):
env.Append(CXXFLAGS=["/external:I", env.Dir("dryad/include"), "/external:W0"])
else:
env.Append(CXXFLAGS=["-isystem", env.Dir("dryad/include")])
def build_fmt(env):
fmt_env = env.Clone()
# Require C++20
if fmt_env.get("is_msvc", False):
fmt_env.Append(CXXFLAGS=["/std:c++20"])
fmt_env.Append(CXXFLAGS=["/WX", "/W3", "/D", "_CRT_SECURE_NO_WARNINGS"])
else:
fmt_env.Append(CXXFLAGS=["-std=c++20"])
fmt_env.Append(CXXFLAGS=[
"-Werror", "-Wall", "-Wextra", "-pedantic", "-Wconversion", "-Wundef"
])
if fmt_env["CXX"] == "clang++":
fmt_env.Append(CXXFLAGS=[
"-Wweak-vtables", "-Wshadow",
"-Wno-gnu-zero-variadic-macro-arguments"
])
else:
fmt_env.Append(CXXFLAGS=[
"-Wsign-conversion", "-Wold-style-cast",
"-Wundef", "-Wredundant-decls", "-Wwrite-strings",
"-Wpointer-arith", "-Wcast-qual", "-Wformat=2",
"-Wmissing-include-dirs", "-Wcast-align", "-Wctor-dtor-privacy",
"-Wdisabled-optimization", "-Winvalid-pch", "-Woverloaded-virtual",
"-Wconversion", "-Wundef", "-Wno-ctor-dtor-privacy", "-Wno-format-nonliteral",
"-Wno-dangling-else", "-Wno-unused-local-typedefs", "-Wdouble-promotion",
"-Wtrampolines", "-Wzero-as-null-pointer-constant", "-Wuseless-cast",
"-Wvector-operation-performance", "-Wsized-deallocation", "-Wshadow",
"-Wshift-overflow=2", "-Wnull-dereference", "-Wduplicated-cond"
])
paths = ["fmt/include", "fmt/src"]
fmt_env.Append(CPPPATH=[[fmt_env.Dir(p) for p in paths]])
sources = env.GlobRecursive("*.cc", paths, "fmt.cc")
env.lexy_sources = sources
library_name = "libfmt" + env["LIBSUFFIX"]
library = fmt_env.StaticLibrary(target="fmt/src/" + library_name, source=sources)
Default(library)
env.Append(CPPPATH=[fmt_env.Dir("fmt/include")])
if env.get("is_msvc", False):
env.Append(CXXFLAGS=["/external:I", fmt_env.Dir("fmt/include"), "/external:W0"])
else:
env.Append(CXXFLAGS=["-isystem", fmt_env.Dir("fmt/include")])
env.Append(CXXFLAGS=[""])
env.Append(LIBPATH=[fmt_env.Dir("fmt/src")])
env.Prepend(LIBS=[library_name])
def build_range_v3(env):
paths = ["range-v3/include"]
sources = env.GlobRecursive("*.cpp", paths)
env.range_v3_sources = sources
env.Append(CPPPATH=[env.Dir("range-v3/include")])
if env.get("is_msvc", False):
env.Append(CXXFLAGS=["/external:I", env.Dir("range-v3/include"), "/external:W0"])
else:
env.Append(CXXFLAGS=["-isystem", env.Dir("range-v3/include")])
build_dryad(env)
build_fmt(env)
build_lexy(env)
build_range_v3(env)
|