-
Notifications
You must be signed in to change notification settings - Fork 217
/
Copy pathgen_install_headers.py
105 lines (80 loc) · 4.35 KB
/
gen_install_headers.py
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
#!/usr/bin/env python3
import argparse
import re
from pathlib import Path
def write_openblas_config_header(dest_dir, version, config_last_path, template_path):
config_h_path = dest_dir / "openblas_config.h"
with config_h_path.open('w') as f:
f.write("#ifndef OPENBLAS_CONFIG_H\n")
f.write("#define OPENBLAS_CONFIG_H\n")
with config_last_path.open('r') as config_last:
for line in config_last:
if line.strip():
defines = line.split('#define ')
for define in defines:
if define.strip():
parts = define.split(maxsplit=1)
if len(parts) > 0:
macro_name = parts[0]
rest_of_line = " ".join(parts[1:]) if len(parts) > 1 else ""
line_to_write = f"#define OPENBLAS_{macro_name} {rest_of_line}"
f.write(f"{line_to_write.strip()}\n")
f.write(f'#define OPENBLAS_VERSION " OpenBLAS {version} "\n')
with template_path.open('r') as template:
f.write(template.read())
f.write("#endif /* OPENBLAS_CONFIG_H */\n")
print(f"Generated openblas_config.h in {dest_dir}")
def write_f77blas_header(dest_dir, common_interface_path):
f77blas_h_path = dest_dir / "f77blas.h"
with f77blas_h_path.open('w') as f:
f.write("#ifndef OPENBLAS_F77BLAS_H\n")
f.write("#define OPENBLAS_F77BLAS_H\n")
f.write('#include "openblas_config.h"\n')
with common_interface_path.open('r') as common_interface:
f.write(common_interface.read())
f.write("#endif\n")
print(f"Generated f77blas.h in {dest_dir}")
def write_cblas_header(dest_dir, cblas_path, symbol_prefix, symbol_suffix):
cblas_h_path = dest_dir / "cblas.h"
with cblas_path.open('r') as cblas_file:
content = cblas_file.read()
if symbol_prefix:
content = re.sub(r'\bcblas', f'{symbol_prefix}cblas', content)
content = re.sub(r'\bopenblas', f'{symbol_prefix}openblas', content)
content = re.sub(f'{symbol_prefix}openblas_complex', 'openblas_complex', content)
content = re.sub(r'\bgoto', f'{symbol_prefix}goto', content)
if symbol_suffix:
content = re.sub(r'\bcblas(\w*)', r'cblas\1' + symbol_suffix, content)
content = re.sub(r'\bopenblas(\w*)', r'openblas\1' + symbol_suffix, content)
content = re.sub(r'\bgoto(\w*)', r'goto\1' + symbol_suffix, content)
content = re.sub(r'openblas_complex_(\w*)' + symbol_suffix, r'openblas_complex_\1', content)
content = content.replace('common', 'openblas_config')
with cblas_h_path.open('w') as f:
f.write(content)
print(f"Generated cblas.h in {dest_dir}")
def main():
parser = argparse.ArgumentParser(description="Generate OpenBLAS headers")
parser.add_argument('--dest-dir', required=True, help="Destination directory for headers")
parser.add_argument('--version', required=True, help="OpenBLAS version")
parser.add_argument('--config-last', required=True, help="Path to config_last.h")
parser.add_argument('--template', required=True, help="Path to openblas_config_template.h")
parser.add_argument('--common-interface', required=True, help="Path to common_interface.h")
parser.add_argument('--cblas', required=True, help="Path to cblas.h")
parser.add_argument('--symbol-prefix', default="", help="Symbol prefix for cblas.h")
parser.add_argument('--symbol-suffix', default="", help="Symbol suffix for cblas.h")
parser.add_argument('--generate-f77blas', action='store_true', help="Generate f77blas.h")
parser.add_argument('--generate-cblas', action='store_true', help="Generate cblas.h")
args = parser.parse_args()
dest_dir = Path(args.dest_dir)
dest_dir.mkdir(parents=True, exist_ok=True)
config_last_path = Path(args.config_last)
template_path = Path(args.template)
common_interface_path = Path(args.common_interface)
cblas_path = Path(args.cblas)
write_openblas_config_header(dest_dir, args.version, config_last_path, template_path)
if args.generate_f77blas:
write_f77blas_header(dest_dir, common_interface_path)
if args.generate_cblas:
write_cblas_header(dest_dir, cblas_path, args.symbol_prefix, args.symbol_suffix)
if __name__ == "__main__":
main()