File: pseudo-swiftc

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (93 lines) | stat: -rwxr-xr-x 3,455 bytes parent folder | download
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
#!/usr/bin/env python3


import argparse
import json
import os
import pipes
import sys

def main():
    parser = argparse.ArgumentParser(description='Fake Swift Compiler.')
    parser.add_argument('--add-dep', type=str, nargs='+')
    parser.add_argument('-module-name', type=str)
    parser.add_argument('-output-file-map', type=str)
    parser.add_argument('-incremental', action='store_true')
    parser.add_argument('-emit-library', dest='emit_library', action='store_true')
    parser.add_argument('-emit-module', action='store_true')
    parser.add_argument('-emit-module-path', type=str)
    parser.add_argument('-emit-dependencies', action='store_true')
    parser.add_argument('-parse-as-library', action='store_true')
    parser.add_argument('-whole-module-optimization', action='store_true')
    parser.add_argument('-num-threads', type=int) 
    parser.add_argument('-I', type=str)
    parser.add_argument('-O', type=str)
    parser.add_argument('-o', dest='output_file', type=str)
    parser.add_argument('-c', dest="compile", action='store_true')
    parser.add_argument('-###', dest="show_commands", action='store_true')
    parser.add_argument('-v', dest="verbose", action='store_true')
    parser.add_argument('--version', dest="version", action='store_true')
    parser.add_argument('sources', type=str, nargs='*')
    args = parser.parse_args()

    # Parse the output file map.
    if args.output_file_map:
        with open(args.output_file_map) as f:
            output_file_map = json.load(f)
    else:
        output_file_map = None

    # If run in verbose mode, print a fake version.
    if args.verbose or args.version:
        print("Pseudo Swift version 1.2.3 (%s)" % (
            os.environ.get("PSEUDO_SWIFT_VERSION", "12.1"),))
        print("Target: bla bla bla")
        if args.version:
            return
    
    # If run in show commands mode, print some dummy output.
    if args.show_commands:
        print(' '.join(map(pipes.quote, [
            sys.argv[0], "-frontend", "...blablabla..."])))
        return
        
    # Write dummy outputs.
    if output_file_map is not None:
        writeAllDeps = True
        deps = None
        if args.whole_module_optimization: 
            # Write only one dep file for entire module.
            writeAllDeps = False
            deps = output_file_map[""]["dependencies"]
            if os.path.exists(deps):
                os.remove(deps)
            # Non-parallel WMO mode.
            if not args.num_threads > 0: 
                # Write only one object file for entiremodule.
                object = output_file_map[""]["object"]
                writeObject(object) 
                writeDeps(object, deps, args.add_dep, False)
                return

        for key,item in list(output_file_map.items()):
            if key == "":
                continue
            object = item["object"]
            writeObject(object) 
            # Write dummy dependencies.
            if writeAllDeps:
                deps = item["dependencies"]
            writeDeps(object, deps, args.add_dep, not writeAllDeps)
    if args.emit_library:
        writeObject(args.output_file)

def writeDeps(object, deps, add_dep, append):
    with open(deps, "a" if append else "w") as f:
        f.write("%s: %s\n" % (object, ' '.join(add_dep or [])))

def writeObject(object):
    with open(object, "w") as f:
        f.write("<dummy>")

if __name__ == '__main__':
    main()