forked from hpc-maths/LightweightAutoDiff
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproject.py
More file actions
95 lines (88 loc) · 3.23 KB
/
Copy pathproject.py
File metadata and controls
95 lines (88 loc) · 3.23 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
import symgen
import sys
import os
compileOptions = [
"-fopenmp-simd",
"-Wundef",
"-Wvarargs",
"-Wall",
"-Wextra",
"-Winit-self",
"-Wpedantic",
"-Werror",
"-Wconversion",
"-Wuninitialized",
"-Wmissing-declarations",
"-Wsign-conversion",
"-Wshadow",
"-Wcast-align",
"-Wnull-dereference",
"-Wformat=2",
"-flax-vector-conversions",
"-pedantic",
"-pedantic-errors",
"-Wno-error=array-bounds",
"-Wno-c99-extensions",
"-Wdouble-promotion",
"-Wswitch-enum",
"-Wrange-loop-construct",
"-Wnon-virtual-dtor",
"-Wold-style-cast",
"-Woverloaded-virtual",
"-Wvexing-parse"]
project = symgen.Project("LightweightAutoDiff", "0.1.0") \
.set_cmake_prefix("LAD") \
.set_description("LAD: Lightweight Automatic Differentiation - a small autodiff tool. Support reverse mode thought a Taper that records instruction an then performs back-propagation WRT a given variable.") \
.add_language(symgen.Language.CXX) \
.add_standard(symgen.Language.CXX, 20) \
\
.add_compile_options(symgen.Language.CXX, [symgen.Compiler.GNU, symgen.Compiler.CLANG], compileOptions) \
\
.add_dependency(symgen.Package("fmt") \
.set_version("12.1.0") \
.set_git("https://github.com/fmtlib/fmt.git", "12.1.0")) \
\
.add_library(symgen.Library("LAD") \
.add_source("src/LAD/Tape.cpp") \
.add_source("src/LAD/Variable.cpp") \
.add_source("src/LAD/Dual.cpp") \
.add_source("src/LAD/DualVariable.cpp") \
.add_public_dependency("fmt")) \
tests = symgen.SubDirectory("tests") \
.add_dependency(symgen.Package("GTest")) \
.add_executable(symgen.Executable("testReverse") \
.add_source("src/testReverse.cpp") \
.add_dependency("LAD") \
.add_dependency("GTest::gtest_main"))\
.add_executable(symgen.Executable("testDual") \
.add_source("src/testDual.cpp") \
.add_dependency("LAD") \
.add_dependency("GTest::gtest_main"))\
.add_executable(symgen.Executable("testForwardOverReverse") \
.add_source("src/testForwardOverReverse.cpp") \
.add_dependency("LAD") \
.add_dependency("GTest::gtest_main")) \
.add_test(symgen.Test("test_reverse", "testReverse")) \
.add_test(symgen.Test("test_dual", "testDual")) \
.add_test(symgen.Test("test_forward_over_reverse", "testForwardOverReverse")) \
demos = symgen.SubDirectory("demos") \
.add_executable(symgen.Executable("demoDual") \
.add_source("src/demoDual.cpp") \
.add_dependency("LAD")) \
.add_executable(symgen.Executable("demoReverse") \
.add_source("src/demoReverse.cpp") \
.add_dependency("LAD")) \
.add_executable(symgen.Executable("demoRosenbrock") \
.add_source("src/demoRosenbrock.cpp") \
.add_dependency("LAD")) \
.add_executable(symgen.Executable("demoForwardOverReverse") \
.add_source("src/demoForwardOverReverse.cpp") \
.add_dependency("LAD")) \
project.add_optional_sub_directory(tests, symgen.Option(project.get_cmake_prefix() + "_BUILD_TESTS", "Build tests for LAD", symgen.OFF))
project.add_optional_sub_directory(demos, symgen.Option(project.get_cmake_prefix() + "_BUILD_DEMOS", "Build demos for LAD", symgen.OFF))
project.to_cmake_lists("CMakeLists.txt")
for subdir in project.get_sub_directories():
if not os.path.exists(subdir.get_name()):
os.makedirs(subdir.get_name())
print("creating subdirectory " + subdir.get_name())
subdir.to_cmake_lists(subdir.get_name() + "/CMakeLists.txt")