Changes in tools/autotool.py [a4a0f1d:7174403] in mainline


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/autotool.py

    ra4a0f1d r7174403  
    4949
    5050PACKAGE_BINUTILS = "usually part of binutils"
    51 PACKAGE_GCC = "preferably version 4.7.0 or newer"
     51PACKAGE_GCC = "preferably version 4.5.1 or newer"
    5252PACKAGE_CROSS = "use tools/toolchain.sh to build the cross-compiler toolchain"
    5353
     
    6666
    6767#define DECLARE_BUILTIN_TYPE(tag, type) \\
    68         AUTOTOOL_DECLARE("builtin_size", "", tag, STRING(type), "", "", sizeof(type)); \\
    69         AUTOTOOL_DECLARE("builtin_sign", "unsigned long long int", tag, STRING(type), "unsigned", "", __builtin_types_compatible_p(type, unsigned long long int)); \\
    70         AUTOTOOL_DECLARE("builtin_sign", "unsigned long int", tag, STRING(type), "unsigned", "", __builtin_types_compatible_p(type, unsigned long int)); \\
    71         AUTOTOOL_DECLARE("builtin_sign", "unsigned int", tag, STRING(type), "unsigned", "", __builtin_types_compatible_p(type, unsigned int)); \\
    72         AUTOTOOL_DECLARE("builtin_sign", "unsigned short int", tag, STRING(type), "unsigned", "", __builtin_types_compatible_p(type, unsigned short int)); \\
    73         AUTOTOOL_DECLARE("builtin_sign", "unsigned char", tag, STRING(type), "unsigned", "", __builtin_types_compatible_p(type, unsigned char)); \\
    74         AUTOTOOL_DECLARE("builtin_sign", "signed long long int", tag, STRING(type), "signed", "", __builtin_types_compatible_p(type, signed long long int)); \\
    75         AUTOTOOL_DECLARE("builtin_sign", "signed long int", tag, STRING(type), "signed", "", __builtin_types_compatible_p(type, signed long int)); \\
    76         AUTOTOOL_DECLARE("builtin_sign", "signed int", tag, STRING(type), "signed", "", __builtin_types_compatible_p(type, signed int)); \\
    77         AUTOTOOL_DECLARE("builtin_sign", "signed short int", tag, STRING(type), "signed", "", __builtin_types_compatible_p(type, signed short int)); \\
    78         AUTOTOOL_DECLARE("builtin_sign", "signed char", tag, STRING(type), "signed", "", __builtin_types_compatible_p(type, signed char));
     68        AUTOTOOL_DECLARE("builtin", "", tag, STRING(type), "", "", sizeof(type));
    7969
    8070#define DECLARE_INTSIZE(tag, type, strc, conc) \\
    8171        AUTOTOOL_DECLARE("intsize", "unsigned", tag, #type, strc, conc, sizeof(unsigned type)); \\
    8272        AUTOTOOL_DECLARE("intsize", "signed", tag, #type, strc, conc, sizeof(signed type));
    83 
    84 #define DECLARE_FLOATSIZE(tag, type) \\
    85         AUTOTOOL_DECLARE("floatsize", "", tag, #type, "", "", sizeof(type));
    8673
    8774int main(int argc, char *argv[])
     
    275262        return int(value, base)
    276263
    277 def probe_compiler(common, intsizes, floatsizes):
     264def probe_compiler(common, sizes):
    278265        "Generate, compile and parse probing source"
    279266       
     
    283270        outf.write(PROBE_HEAD)
    284271       
    285         for typedef in intsizes:
     272        for typedef in sizes:
    286273                outf.write("\tDECLARE_INTSIZE(\"%s\", %s, %s, %s);\n" % (typedef['tag'], typedef['type'], typedef['strc'], typedef['conc']))
    287        
    288         for typedef in floatsizes:
    289                 outf.write("\nDECLARE_FLOATSIZE(\"%s\", %s);\n" % (typedef['tag'], typedef['type']))
    290274       
    291275        outf.write(PROBE_TAIL)
     
    331315        signed_concs = {}
    332316       
    333         float_tags = {}
    334        
    335         builtin_sizes = {}
    336         builtin_signs = {}
     317        builtins = {}
    337318       
    338319        for j in range(len(lines)):
     
    371352                                                print_error(["Unexpected keyword \"%s\" in \"%s\" on line %s." % (subcategory, PROBE_OUTPUT, j), COMPILER_FAIL])
    372353                               
    373                                 if (category == "floatsize"):
     354                                if (category == "builtin"):
    374355                                        try:
    375356                                                value_int = decode_value(value)
     
    377358                                                print_error(["Integer value expected in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL])
    378359                                       
    379                                         float_tags[tag] = value_int
    380                                
    381                                 if (category == "builtin_size"):
    382                                         try:
    383                                                 value_int = decode_value(value)
    384                                         except:
    385                                                 print_error(["Integer value expected in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL])
    386                                        
    387                                         builtin_sizes[tag] = {'name': name, 'value': value_int}
    388                                
    389                                 if (category == "builtin_sign"):
    390                                         try:
    391                                                 value_int = decode_value(value)
    392                                         except:
    393                                                 print_error(["Integer value expected in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL])
    394                                        
    395                                         if (value_int == 1):
    396                                                 if (not tag in builtin_signs):
    397                                                         builtin_signs[tag] = strc;
    398                                                 elif (builtin_signs[tag] != strc):
    399                                                         print_error(["Inconsistent builtin type detection in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL])
    400        
    401         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, 'float_tags': float_tags, 'builtin_sizes': builtin_sizes, 'builtin_signs': builtin_signs}
    402 
    403 def detect_sizes(probe, bytes, inttags, floattags):
    404         "Detect correct types for fixed-size types"
     360                                        builtins[tag] = {'name': name, 'value': value_int}
     361       
     362        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, 'builtins': builtins}
     363
     364def detect_uints(probe, bytes, tags):
     365        "Detect correct types for fixed-size integer types"
    405366       
    406367        macros = []
     
    409370        for b in bytes:
    410371                if (not b in probe['unsigned_sizes']):
    411                         print_error(['Unable to find appropriate unsigned integer type for %u bytes.' % b,
     372                        print_error(['Unable to find appropriate unsigned integer type for %u bytes' % b,
    412373                                     COMPILER_FAIL])
    413374               
    414375                if (not b in probe['signed_sizes']):
    415                         print_error(['Unable to find appropriate signed integer type for %u bytes.' % b,
     376                        print_error(['Unable to find appropriate signed integer type for %u bytes' % b,
    416377                                     COMPILER_FAIL])
    417378               
    418379                if (not b in probe['unsigned_strcs']):
    419                         print_error(['Unable to find appropriate unsigned printf formatter for %u bytes.' % b,
     380                        print_error(['Unable to find appropriate unsigned printf formatter for %u bytes' % b,
    420381                                     COMPILER_FAIL])
    421382               
    422383                if (not b in probe['signed_strcs']):
    423                         print_error(['Unable to find appropriate signed printf formatter for %u bytes.' % b,
     384                        print_error(['Unable to find appropriate signed printf formatter for %u bytes' % b,
    424385                                     COMPILER_FAIL])
    425386               
    426387                if (not b in probe['unsigned_concs']):
    427                         print_error(['Unable to find appropriate unsigned literal macro for %u bytes.' % b,
     388                        print_error(['Unable to find appropriate unsigned literal macro for %u bytes' % b,
    428389                                     COMPILER_FAIL])
    429390               
    430391                if (not b in probe['signed_concs']):
    431                         print_error(['Unable to find appropriate signed literal macro for %u bytes.' % b,
     392                        print_error(['Unable to find appropriate signed literal macro for %u bytes' % b,
    432393                                     COMPILER_FAIL])
    433394               
     
    456417                        macros.append({'oldmacro': "c ## %s" % name, 'newmacro': "INT%u_C(c)" % (b * 8)})
    457418       
    458         for tag in inttags:
     419        for tag in tags:
    459420                newmacro = "U%s" % tag
    460421                if (not tag in probe['unsigned_tags']):
    461                         print_error(['Unable to find appropriate size macro for %s.' % newmacro,
     422                        print_error(['Unable to find appropriate size macro for %s' % newmacro,
    462423                                     COMPILER_FAIL])
    463424               
     
    465426                macros.append({'oldmacro': "%s_MIN" % oldmacro, 'newmacro': "%s_MIN" % newmacro})
    466427                macros.append({'oldmacro': "%s_MAX" % oldmacro, 'newmacro': "%s_MAX" % newmacro})
    467                 macros.append({'oldmacro': "1", 'newmacro': 'U%s_SIZE_%s' % (tag, probe['unsigned_tags'][tag] * 8)})
    468428               
    469429                newmacro = tag
    470                 if (not tag in probe['signed_tags']):
     430                if (not tag in probe['unsigned_tags']):
    471431                        print_error(['Unable to find appropriate size macro for %s' % newmacro,
    472432                                     COMPILER_FAIL])
     
    475435                macros.append({'oldmacro': "%s_MIN" % oldmacro, 'newmacro': "%s_MIN" % newmacro})
    476436                macros.append({'oldmacro': "%s_MAX" % oldmacro, 'newmacro': "%s_MAX" % newmacro})
    477                 macros.append({'oldmacro': "1", 'newmacro': '%s_SIZE_%s' % (tag, probe['signed_tags'][tag] * 8)})
    478        
    479         for tag in floattags:
    480                 if (not tag in probe['float_tags']):
    481                         print_error(['Unable to find appropriate size macro for %s' % tag,
    482                                      COMPILER_FAIL])
    483                
    484                 macros.append({'oldmacro': "1", 'newmacro': '%s_SIZE_%s' % (tag, probe['float_tags'][tag] * 8)})
    485        
    486         if (not 'size' in probe['builtin_signs']):
    487                 print_error(['Unable to determine whether size_t is signed or unsigned.',
    488                              COMPILER_FAIL])
    489        
    490         if (probe['builtin_signs']['size'] != 'unsigned'):
    491                 print_error(['The type size_t is not unsigned.',
    492                              COMPILER_FAIL])
    493437       
    494438        fnd = True
    495439       
    496         if (not 'wchar' in probe['builtin_sizes']):
     440        if (not 'wchar' in probe['builtins']):
    497441                print_warning(['The compiler does not provide the macro __WCHAR_TYPE__',
    498442                               'for defining the compiler-native type wchar_t. We are',
     
    501445                fnd = False
    502446       
    503         if (probe['builtin_sizes']['wchar']['value'] != 4):
     447        if (probe['builtins']['wchar']['value'] != 4):
    504448                print_warning(['The compiler provided macro __WCHAR_TYPE__ for defining',
    505449                               'the compiler-native type wchar_t is not compliant with',
     
    514458                macros.append({'oldmacro': "__WCHAR_TYPE__", 'newmacro': "wchar_t"})
    515459       
    516         if (not 'wchar' in probe['builtin_signs']):
    517                 print_error(['Unable to determine whether wchar_t is signed or unsigned.',
    518                              COMPILER_FAIL])
    519        
    520         if (probe['builtin_signs']['wchar'] == 'unsigned'):
    521                 macros.append({'oldmacro': "1", 'newmacro': 'WCHAR_IS_UNSIGNED'})
    522         if (probe['builtin_signs']['wchar'] == 'signed'):
    523                 macros.append({'oldmacro': "1", 'newmacro': 'WCHAR_IS_SIGNED'})
    524        
    525460        fnd = True
    526461       
    527         if (not 'wint' in probe['builtin_sizes']):
     462        if (not 'wint' in probe['builtins']):
    528463                print_warning(['The compiler does not provide the macro __WINT_TYPE__',
    529464                               'for defining the compiler-native type wint_t. We are',
     
    532467                fnd = False
    533468       
    534         if (probe['builtin_sizes']['wint']['value'] != 4):
     469        if (probe['builtins']['wint']['value'] != 4):
    535470                print_warning(['The compiler provided macro __WINT_TYPE__ for defining',
    536471                               'the compiler-native type wint_t is not compliant with',
     
    544479        else:
    545480                macros.append({'oldmacro': "__WINT_TYPE__", 'newmacro': "wint_t"})
    546        
    547         if (not 'wint' in probe['builtin_signs']):
    548                 print_error(['Unable to determine whether wint_t is signed or unsigned.',
    549                              COMPILER_FAIL])
    550        
    551         if (probe['builtin_signs']['wint'] == 'unsigned'):
    552                 macros.append({'oldmacro': "1", 'newmacro': 'WINT_IS_UNSIGNED'})
    553         if (probe['builtin_signs']['wint'] == 'signed'):
    554                 macros.append({'oldmacro': "1", 'newmacro': 'WINT_IS_SIGNED'})
    555481       
    556482        return {'macros': macros, 'typedefs': typedefs}
     
    645571                               
    646572                                if (config['CROSS_TARGET'] == "arm32"):
    647                                         gnu_target = "arm-linux-gnueabi"
     573                                        gnu_target = "arm-linux-gnu"
    648574                               
    649575                                if (config['CROSS_TARGET'] == "ia32"):
     
    660586                        if (config['PLATFORM'] == "arm32"):
    661587                                target = config['PLATFORM']
    662                                 gnu_target = "arm-linux-gnueabi"
     588                                gnu_target = "arm-linux-gnu"
    663589                       
    664590                        if (config['PLATFORM'] == "ia32"):
     
    743669                                {'type': 'short int', 'tag': 'SHORT', 'strc': '"h"', 'conc': '"@"'},
    744670                                {'type': 'char', 'tag': 'CHAR', 'strc': '"hh"', 'conc': '"@@"'}
    745                         ],
    746                         [
    747                                 {'type': 'long double', 'tag': 'LONG_DOUBLE'},
    748                                 {'type': 'double', 'tag': 'DOUBLE'},
    749                                 {'type': 'float', 'tag': 'FLOAT'}
    750671                        ]
    751672                )
    752673               
    753                 maps = detect_sizes(probe, [1, 2, 4, 8], ['CHAR', 'SHORT', 'INT', 'LONG', 'LLONG'], ['LONG_DOUBLE', 'DOUBLE', 'FLOAT'])
     674                maps = detect_uints(probe, [1, 2, 4, 8], ['CHAR', 'SHORT', 'INT', 'LONG', 'LLONG'])
    754675               
    755676        finally:
Note: See TracChangeset for help on using the changeset viewer.