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