@@ -45,6 +45,61 @@ def build_std_function(env):
4545 env .Append (CPPPATH = env .std_function ["INCPATH" ])
4646 env .exposed_includes += env .std_function ["INCPATH" ]
4747
48+ def build_lauf (env ):
49+ import os
50+
51+ if env .get ("use_clang_cl" , False ) or env ["CXX" ] == "clang++" or (not env .get ("is_msvc" , False ) and env ["optimize" ] != "none" ):
52+ env .Append (CPPDEFINES = ["LAUF_HAS_TAIL_CALL_ELIMINATION=1" ])
53+
54+ lauf_env = env .Clone ()
55+
56+ if lauf_env .get ("is_msvc" , False ):
57+ lauf_env .Append (CXXFLAGS = ["/WX" , "/W3" , "/D" , "_CRT_SECURE_NO_WARNINGS" ])
58+ if lauf_env .get ("use_clang_cl" ):
59+ lauf_env .Append (CXXFLAGS = ["-Wno-return-type-c-linkage" , "-fomit-frame-pointer" ])
60+ lauf_env .Append (CXXFLAGS = ["/wd5105" ])
61+ else :
62+ lauf_env .Append (CXXFLAGS = ["/Oy" ])
63+ else :
64+ lauf_env .Append (CXXFLAGS = ["-pedantic-errors" , "-Werror" , "-Wall" , "-Wextra" , "-Wconversion" , "-Wsign-conversion" , "-fomit-frame-pointer" ])
65+ if lauf_env ["CXX" ] == "clang++" :
66+ lauf_env .Append (CXXFLAGS = ["-Wno-return-type-c-linkage" ])
67+ lauf_env .Append (CXXFLAGS = ["-Wno-shift-op-parentheses" , "-Wno-parentheses-equality" ])
68+ else :
69+ lauf_env .Append (
70+ CXXFLAGS = [
71+ "-Wno-parentheses" ,
72+ "-Wno-unused-local-typedefs" ,
73+ "-Wno-array-bounds" , # , "-Wno-maybe-uninitialized", "-Wno-restrict"
74+ ]
75+ )
76+
77+ lexy_include_path = "openvic-dataloader/deps/lexy/include"
78+ include_path = "lauf/include"
79+ source_path = "lauf/src"
80+ lauf_env .Append (CPPPATH = [[lauf_env .Dir (p ) for p in [lexy_include_path , source_path , include_path ]]])
81+ sources = lauf_env .GlobRecursive ("*.cpp" , [source_path ])
82+ env .lauf_sources = sources
83+
84+ library_name = "liblauf" + env ["LIBSUFFIX" ]
85+ library = lauf_env .StaticLibrary (target = os .path .join (source_path , library_name ), source = sources )
86+ Default (library )
87+
88+ include_dir = lauf_env .Dir (include_path )
89+ source_dir = lauf_env .Dir (source_path )
90+
91+ env .lauf = {}
92+ env .lauf ["INCPATH" ] = [env .Dir (include_path )]
93+
94+ env .Append (CPPPATH = env .lauf ["INCPATH" ])
95+ if env .get ("is_msvc" , False ):
96+ env .Append (CXXFLAGS = ["/external:I" , include_dir , "/external:W0" ])
97+ else :
98+ env .Append (CXXFLAGS = ["-isystem" , include_dir ])
99+ env .Append (LIBPATH = [source_dir ])
100+ env .Prepend (LIBS = [library_name ])
101+ env .exposed_includes += env .lauf ["INCPATH" ]
102+
48103def link_tbb (env ):
49104 import sys
50105 if not env .get ("is_msvc" , False ) and not env .get ("use_mingw" , False ) and sys .platform != "darwin" :
@@ -56,4 +111,5 @@ build_ordered_map(env)
56111build_colony (env )
57112build_function2 (env )
58113build_std_function (env )
114+ build_lauf (env )
59115link_tbb (env )
0 commit comments