Toolchain update (GCC 13.1.1, binutils 2.40) (#226)
[helenos.git] / tools / jobfile.py
blobbd28161ecae9ca0f81dc9f3ab03c42e6d6d98391
1 #!/usr/bin/env python
3 # Copyright (c) 2009 Martin Decky
4 # All rights reserved.
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
10 # - Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # - Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
15 # - The name of the author may not be used to endorse or promote products
16 # derived from this software without specific prior written permission.
18 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 """
31 Add a source/object file pair to a checker jobfile
32 """
34 import sys
35 import os
36 import fcntl
38 def usage(prname):
39 "Print usage syntax"
40 print(prname + " <JOBFILE> <CC> <INPUT> -o <OUTPUT> [CC_ARGUMENTS ...]")
42 def main():
43 if (len(sys.argv) < 6):
44 usage(sys.argv[0])
45 return
47 jobfname = sys.argv[1]
48 ccname = sys.argv[2]
49 srcfname = sys.argv[3]
50 assert(not srcfname.startswith("-"))
51 assert(sys.argv[4] == "-o")
52 tgtfname = sys.argv[5]
53 options = " ".join(sys.argv[6:])
54 cwd = os.getcwd()
56 if srcfname.endswith(".c"):
57 toolname = "cc"
58 category = "core"
60 if srcfname.endswith(".s"):
61 toolname = "as"
62 category = "asm"
64 if srcfname.endswith(".S"):
65 toolname = "as"
66 category = "asm/preproc"
68 jobfile = open(jobfname, "a")
69 fcntl.lockf(jobfile, fcntl.LOCK_EX)
70 jobfile.write("{%s},{%s},{%s},{%s},{%s},{%s}\n" % (srcfname, tgtfname, toolname, category, cwd, options))
71 fcntl.lockf(jobfile, fcntl.LOCK_UN)
72 jobfile.close()
74 # Run the compiler proper.
75 os.execvp(ccname, sys.argv[2:])
77 if __name__ == '__main__':
78 main()