Changes in tools/autotool.py [85369b1:9539be6] in mainline


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/autotool.py

    r85369b1 r9539be6  
    4949
    5050PACKAGE_BINUTILS = "usually part of binutils"
    51 PACKAGE_GCC = "preferably version 4.5.1 or newer"
     51PACKAGE_GCC = "preferably version 4.4.3 or newer"
    5252PACKAGE_CROSS = "use tools/toolchain.sh to build the cross-compiler toolchain"
    5353
    5454COMPILER_FAIL = "The compiler is probably not capable to compile HelenOS."
    5555
    56 PROBE_HEAD = """#define AUTOTOOL_DECLARE(category, subcategory, tag, name, strc, conc, value) \\
     56PROBE_HEAD = """#define AUTOTOOL_DECLARE(category, subcategory, tag, name, value) \\
    5757        asm volatile ( \\
    58                 "AUTOTOOL_DECLARE\\t" category "\\t" subcategory "\\t" tag "\\t" name "\\t" strc "\\t" conc "\\t%[val]\\n" \\
     58                "AUTOTOOL_DECLARE\\t" category "\\t" subcategory "\\t" tag "\\t" name "\\t%[val]\\n" \\
    5959                : \\
    6060                : [val] "n" (value) \\
    6161        )
    6262
    63 #define DECLARE_INTSIZE(tag, type, strc, conc) \\
    64         AUTOTOOL_DECLARE("intsize", "unsigned", tag, #type, strc, conc, sizeof(unsigned type)); \\
    65         AUTOTOOL_DECLARE("intsize", "signed", tag, #type, strc, conc, sizeof(signed type));
     63#define DECLARE_INTSIZE(tag, type) \\
     64        AUTOTOOL_DECLARE("intsize", "unsigned", tag, #type, sizeof(unsigned type)); \\
     65        AUTOTOOL_DECLARE("intsize", "signed", tag, #type, sizeof(signed type))
    6666
    6767int main(int argc, char *argv[])
     
    7575        "Read HelenOS build configuration"
    7676       
    77         inf = open(fname, 'r')
     77        inf = file(fname, 'r')
    7878       
    7979        for line in inf:
     
    191191        check_common(common, "CC")
    192192       
    193         outf = open(PROBE_SOURCE, 'w')
     193        outf = file(PROBE_SOURCE, 'w')
    194194        outf.write(PROBE_HEAD)
    195195       
    196196        for typedef in sizes:
    197                 outf.write("\tDECLARE_INTSIZE(\"%s\", %s, %s, %s);\n" % (typedef['tag'], typedef['type'], typedef['strc'], typedef['conc']))
     197                outf.write("\tDECLARE_INTSIZE(\"%s\", %s);\n" % (typedef['tag'], typedef['type']))
    198198       
    199199        outf.write(PROBE_TAIL)
     
    212212        if (not os.path.isfile(PROBE_OUTPUT)):
    213213                sys.stderr.write("failed\n")
    214                 print(output[1])
     214                print output[1]
    215215                print_error(["Error executing \"%s\"." % " ".join(args),
    216216                             "The compiler did not produce the output file \"%s\"." % PROBE_OUTPUT,
     
    221221        sys.stderr.write("ok\n")
    222222       
    223         inf = open(PROBE_OUTPUT, 'r')
     223        inf = file(PROBE_OUTPUT, 'r')
    224224        lines = inf.readlines()
    225225        inf.close()
     
    231231        signed_tags = {}
    232232       
    233         unsigned_strcs = {}
    234         signed_strcs = {}
    235        
    236         unsigned_concs = {}
    237         signed_concs = {}
    238        
    239233        for j in range(len(lines)):
    240234                tokens = lines[j].strip().split("\t")
     
    242236                if (len(tokens) > 0):
    243237                        if (tokens[0] == "AUTOTOOL_DECLARE"):
    244                                 if (len(tokens) < 7):
     238                                if (len(tokens) < 5):
    245239                                        print_error(["Malformed declaration in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL])
    246240                               
     
    249243                                tag = tokens[3]
    250244                                name = tokens[4]
    251                                 strc = tokens[5]
    252                                 conc = tokens[6]
    253                                 value = tokens[7]
     245                                value = tokens[5]
    254246                               
    255247                                if (category == "intsize"):
     
    271263                                                unsigned_sizes[name] = value_int
    272264                                                unsigned_tags[tag] = value_int
    273                                                 unsigned_strcs[strc] = value_int
    274                                                 unsigned_concs[conc] = value_int
    275265                                        elif (subcategory == "signed"):
    276266                                                signed_sizes[name] = value_int
    277267                                                signed_tags[tag] = value_int
    278                                                 signed_strcs[strc] = value_int
    279                                                 signed_concs[conc] = value_int
    280268                                        else:
    281269                                                print_error(["Unexpected keyword \"%s\" in \"%s\" on line %s." % (subcategory, PROBE_OUTPUT, j), COMPILER_FAIL])
    282270       
    283         return {'unsigned_sizes': unsigned_sizes, 'signed_sizes': signed_sizes, 'unsigned_tags': unsigned_tags, 'signed_tags': signed_tags, 'unsigned_strcs': unsigned_strcs, 'signed_strcs': signed_strcs, 'unsigned_concs': unsigned_concs, 'signed_concs': signed_concs}
     271        return {'unsigned_sizes' : unsigned_sizes, 'signed_sizes' : signed_sizes, 'unsigned_tags': unsigned_tags, 'signed_tags': signed_tags}
    284272
    285273def detect_uints(probe, bytes):
     
    291279        for b in bytes:
    292280                fnd = False
     281                newtype = "uint%s_t" % (b * 8)
     282               
    293283                for name, value in probe['unsigned_sizes'].items():
    294284                        if (value == b):
    295                                 typedefs.append({'oldtype': "unsigned %s" % name, 'newtype': "uint%u_t" % (b * 8)})
     285                                oldtype = "unsigned %s" % name
     286                                typedefs.append({'oldtype' : oldtype, 'newtype' : newtype})
    296287                                fnd = True
    297288                                break
    298289               
    299290                if (not fnd):
    300                         print_error(['Unable to find appropriate unsigned integer type for %u bytes' % b,
     291                        print_error(['Unable to find appropriate integer type for %s' % newtype,
    301292                                     COMPILER_FAIL])
    302293               
    303294               
    304295                fnd = False
     296                newtype = "int%s_t" % (b * 8)
     297               
    305298                for name, value in probe['signed_sizes'].items():
    306299                        if (value == b):
    307                                 typedefs.append({'oldtype': "signed %s" % name, 'newtype': "int%u_t" % (b * 8)})
     300                                oldtype = "signed %s" % name
     301                                typedefs.append({'oldtype' : oldtype, 'newtype' : newtype})
    308302                                fnd = True
    309303                                break
    310304               
    311305                if (not fnd):
    312                         print_error(['Unable to find appropriate signed integer type for %u bytes' % b,
    313                                      COMPILER_FAIL])
    314                
    315                
    316                 fnd = False
    317                 for name, value in probe['unsigned_strcs'].items():
    318                         if (value == b):
    319                                 macros.append({'oldmacro': "\"%so\"" % name, 'newmacro': "PRIo%u" % (b * 8)})
    320                                 macros.append({'oldmacro': "\"%su\"" % name, 'newmacro': "PRIu%u" % (b * 8)})
    321                                 macros.append({'oldmacro': "\"%sx\"" % name, 'newmacro': "PRIx%u" % (b * 8)})
    322                                 macros.append({'oldmacro': "\"%sX\"" % name, 'newmacro': "PRIX%u" % (b * 8)})
    323                                 fnd = True
    324                                 break
    325                
    326                 if (not fnd):
    327                         print_error(['Unable to find appropriate unsigned printf formatter for %u bytes' % b,
    328                                      COMPILER_FAIL])
    329                
    330                
    331                 fnd = False
    332                 for name, value in probe['signed_strcs'].items():
    333                         if (value == b):
    334                                 macros.append({'oldmacro': "\"%sd\"" % name, 'newmacro': "PRId%u" % (b * 8)})
    335                                 fnd = True
    336                                 break
    337                
    338                 if (not fnd):
    339                         print_error(['Unable to find appropriate signed printf formatter for %u bytes' % b,
    340                                      COMPILER_FAIL])
    341                
    342                
    343                 fnd = False
    344                 for name, value in probe['unsigned_concs'].items():
    345                         if (value == b):
    346                                 if ((name.startswith('@')) or (name == "")):
    347                                         macros.append({'oldmacro': "c ## U", 'newmacro': "UINT%u_C(c)" % (b * 8)})
    348                                 else:
    349                                         macros.append({'oldmacro': "c ## U%s" % name, 'newmacro': "UINT%u_C(c)" % (b * 8)})
    350                                 fnd = True
    351                                 break
    352                
    353                 if (not fnd):
    354                         print_error(['Unable to find appropriate unsigned literal macro for %u bytes' % b,
    355                                      COMPILER_FAIL])
    356                
    357                
    358                 fnd = False
    359                 for name, value in probe['signed_concs'].items():
    360                         if (value == b):
    361                                 if ((name.startswith('@')) or (name == "")):
    362                                         macros.append({'oldmacro': "c", 'newmacro': "INT%u_C(c)" % (b * 8)})
    363                                 else:
    364                                         macros.append({'oldmacro': "c ## %s" % name, 'newmacro': "INT%u_C(c)" % (b * 8)})
    365                                 fnd = True
    366                                 break
    367                
    368                 if (not fnd):
    369                         print_error(['Unable to find appropriate unsigned literal macro for %u bytes' % b,
     306                        print_error(['Unable to find appropriate integer type for %s' % newtype,
    370307                                     COMPILER_FAIL])
    371308       
     
    406343        "Create makefile output"
    407344       
    408         outmk = open(mkname, 'w')
     345        outmk = file(mkname, 'w')
    409346       
    410347        outmk.write('#########################################\n')
     
    420357        "Create header output"
    421358       
    422         outhd = open(hdname, 'w')
     359        outhd = file(hdname, 'w')
    423360       
    424361        outhd.write('/***************************************\n')
     
    571508                probe = probe_compiler(common,
    572509                        [
    573                                 {'type': 'char', 'tag': 'CHAR', 'strc': '"hh"', 'conc': '"@@"'},
    574                                 {'type': 'short int', 'tag': 'SHORT', 'strc': '"h"', 'conc': '"@"'},
    575                                 {'type': 'int', 'tag': 'INT', 'strc': '""', 'conc': '""'},
    576                                 {'type': 'long int', 'tag': 'LONG', 'strc': '"l"', 'conc': '"L"'},
    577                                 {'type': 'long long int', 'tag': 'LLONG', 'strc': '"ll"', 'conc': '"LL"'}
     510                                {'type': 'char', 'tag': 'CHAR'},
     511                                {'type': 'short int', 'tag': 'SHORT'},
     512                                {'type': 'int', 'tag': 'INT'},
     513                                {'type': 'long int', 'tag': 'LONG'},
     514                                {'type': 'long long int', 'tag': 'LLONG'}
    578515                        ]
    579516                )
Note: See TracChangeset for help on using the changeset viewer.