6
6
import shutil
7
7
8
8
SUPPORTED_PLATFORMS = {
9
- "ubuntu" : {
10
- "20.04" : [12 ],
11
- "22.04" : [13 , 14 , 15 ],
12
- "24.04" : [14 , 15 , 16 , 17 , 18 ]
13
- }
9
+ "ubuntu" : {"20.04" : [12 ], "22.04" : [13 , 14 , 15 ], "24.04" : [14 , 15 , 16 , 17 , 18 ]}
14
10
}
15
11
16
12
17
13
def cmake (args ):
18
- template_name = f"infrastructure/templates/cmake-presets/{ args .os } .mustache"
19
- template_args = {"LLVM_VERSION" : args .llvm_version }
14
+ os_specific_args = {
15
+ "ubuntu" : {
16
+ "CC" : f"clang-{ args .llvm_version } " ,
17
+ "CXX" : f"clang++-{ args .llvm_version } " ,
18
+ "CMAKE_PREFIX_PATH" : f"/usr/lib/llvm-{ args .llvm_version } /cmake/;/usr/lib/cmake/clang-{ args .llvm_version } /" ,
19
+ },
20
+ "macos" : {
21
+ "CC" : f"/opt/homebrew/opt/llvm@{ args .llvm_version } /bin/clang" ,
22
+ "CXX" : f"/opt/homebrew/opt/llvm@{ args .llvm_version } /bin/clang++" ,
23
+ "CMAKE_PREFIX_PATH" : f"/opt/homebrew/opt/llvm@{ args .llvm_version } /lib/cmake/llvm/;/opt/homebrew/opt/llvm@{ args .llvm_version } /lib/cmake/clang/" ,
24
+ },
25
+ }
26
+ template_name = f"infrastructure/templates/cmake-presets/CMakePresets.json.mustache"
27
+ template_args = os_specific_args [args .os ]
28
+ template_args ["LLVM_VERSION" ] = args .llvm_version
29
+ template_args ["OS_NAME" ] = args .os
20
30
renderer = pystache .Renderer (missing_tags = "strict" )
21
31
with open (template_name , "r" ) as t :
22
32
result = renderer .render (t .read (), template_args )
23
- with open (' CMakePresets.json' , "w" ) as f :
33
+ with open (" CMakePresets.json" , "w" ) as f :
24
34
f .write (result )
25
35
26
36
27
37
def devcontainers (args ):
28
38
shutil .rmtree (".devcontainer" )
29
- for ( os_name , platform ) in SUPPORTED_PLATFORMS .items ():
39
+ for os_name , platform in SUPPORTED_PLATFORMS .items ():
30
40
template_folder = f"infrastructure/templates/devcontainers/{ os_name } "
31
- for ( os_version , llvm_versions ) in platform .items ():
41
+ for os_version , llvm_versions in platform .items ():
32
42
for llvm_version in llvm_versions :
33
- container_folder = f".devcontainer/{ os_name } _{ os_version } _{ llvm_version } "
43
+ container_folder = (
44
+ f".devcontainer/{ os_name } _{ os_version } _{ llvm_version } "
45
+ )
34
46
os .makedirs (container_folder , exist_ok = True )
35
47
36
- template_args = {"LLVM_VERSION" : llvm_version ,
37
- "OS_NAME" : os_name , "OS_VERSION" : os_version }
48
+ template_args = {
49
+ "LLVM_VERSION" : llvm_version ,
50
+ "OS_NAME" : os_name ,
51
+ "OS_VERSION" : os_version ,
52
+ }
38
53
39
54
renderer = pystache .Renderer (missing_tags = "strict" )
40
- for template in [' devcontainer.json' , "Dockerfile" ]:
55
+ for template in [" devcontainer.json" , "Dockerfile" ]:
41
56
template_name = f"{ template_folder } /{ template } .mustache"
42
57
result_filename = f"{ container_folder } /{ template } "
43
58
with open (template_name , "r" ) as t :
@@ -53,13 +68,16 @@ def gh_workflows(args):
53
68
strategies = []
54
69
for os_version in sorted (SUPPORTED_PLATFORMS ["ubuntu" ].keys ()):
55
70
for llvm_version in SUPPORTED_PLATFORMS ["ubuntu" ][os_version ]:
56
- arg = {"OS_NAME" : "ubuntu" , "OS_VERSION" : os_version ,
57
- "LLVM_VERSION" : llvm_version }
71
+ arg = {
72
+ "OS_NAME" : "ubuntu" ,
73
+ "OS_VERSION" : os_version ,
74
+ "LLVM_VERSION" : llvm_version ,
75
+ }
58
76
strategies .append (arg )
59
77
60
78
template_args = {"strategy" : strategies , "OS_NAME" : "Ubuntu" }
61
79
renderer = pystache .Renderer (missing_tags = "strict" )
62
- for template in [' ci-ubuntu.yml' ]:
80
+ for template in [" ci-ubuntu.yml" ]:
63
81
template_name = f"{ template_folder } /{ template } .mustache"
64
82
result_filename = f"{ workflow_folder } /{ template } "
65
83
with open (template_name , "r" ) as t :
@@ -70,21 +88,24 @@ def gh_workflows(args):
70
88
71
89
def main ():
72
90
parser = argparse .ArgumentParser (
73
- prog = 'generator' , description = 'Generates various infra files for Mull' )
91
+ prog = "generator" , description = "Generates various infra files for Mull"
92
+ )
74
93
subparsers = parser .add_subparsers (
75
- title = 'subcommands' , help = 'available subcommands' , dest = "cmd" )
76
-
77
- parser_cmake = subparsers .add_parser (
78
- 'cmake' , help = 'Generates CMake preset file' )
79
- parser_cmake .add_argument ('--os' , choices = ('ubuntu' ,),
80
- help = 'Select OS for which to generate preset' , type = str )
94
+ title = "subcommands" , help = "available subcommands" , dest = "cmd"
95
+ )
96
+
97
+ parser_cmake = subparsers .add_parser ("cmake" , help = "Generates CMake preset file" )
98
+ parser_cmake .add_argument (
99
+ "--os" ,
100
+ choices = ("ubuntu" , "macos" ),
101
+ help = "Select OS for which to generate preset" ,
102
+ type = str ,
103
+ )
81
104
parser_cmake .add_argument ("--llvm_version" , type = int )
82
105
83
- subparsers .add_parser ('devcontainers' , help = 'Generates devcontainer files' )
84
- subparsers .add_parser ('github_workflows' ,
85
- help = 'Generates GitHub workflow files' )
86
- subparsers .add_parser ('all' ,
87
- help = 'Combines devcontainers and github_workflows' )
106
+ subparsers .add_parser ("devcontainers" , help = "Generates devcontainer files" )
107
+ subparsers .add_parser ("github_workflows" , help = "Generates GitHub workflow files" )
108
+ subparsers .add_parser ("all" , help = "Combines devcontainers and github_workflows" )
88
109
89
110
args = parser .parse_args ()
90
111
if args .cmd == "cmake" :
0 commit comments