Changeset a4a0f1d in mainline
- Timestamp:
- 2012-04-07T17:49:01Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8e893ae
- Parents:
- 4ceef572
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/autotool.py
r4ceef572 ra4a0f1d 49 49 50 50 PACKAGE_BINUTILS = "usually part of binutils" 51 PACKAGE_GCC = "preferably version 4. 5.1or newer"51 PACKAGE_GCC = "preferably version 4.7.0 or newer" 52 52 PACKAGE_CROSS = "use tools/toolchain.sh to build the cross-compiler toolchain" 53 53 … … 66 66 67 67 #define DECLARE_BUILTIN_TYPE(tag, type) \\ 68 AUTOTOOL_DECLARE("builtin", "", tag, STRING(type), "", "", sizeof(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)); 69 79 70 80 #define DECLARE_INTSIZE(tag, type, strc, conc) \\ 71 81 AUTOTOOL_DECLARE("intsize", "unsigned", tag, #type, strc, conc, sizeof(unsigned type)); \\ 72 82 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)); 73 86 74 87 int main(int argc, char *argv[]) … … 262 275 return int(value, base) 263 276 264 def probe_compiler(common, sizes):277 def probe_compiler(common, intsizes, floatsizes): 265 278 "Generate, compile and parse probing source" 266 279 … … 270 283 outf.write(PROBE_HEAD) 271 284 272 for typedef in sizes:285 for typedef in intsizes: 273 286 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'])) 274 290 275 291 outf.write(PROBE_TAIL) … … 315 331 signed_concs = {} 316 332 317 builtins = {} 333 float_tags = {} 334 335 builtin_sizes = {} 336 builtin_signs = {} 318 337 319 338 for j in range(len(lines)): … … 352 371 print_error(["Unexpected keyword \"%s\" in \"%s\" on line %s." % (subcategory, PROBE_OUTPUT, j), COMPILER_FAIL]) 353 372 354 if (category == " builtin"):373 if (category == "floatsize"): 355 374 try: 356 375 value_int = decode_value(value) … … 358 377 print_error(["Integer value expected in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL]) 359 378 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 364 def detect_uints(probe, bytes, tags): 365 "Detect correct types for fixed-size integer types" 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" 366 405 367 406 macros = [] … … 370 409 for b in bytes: 371 410 if (not b in probe['unsigned_sizes']): 372 print_error(['Unable to find appropriate unsigned integer type for %u bytes ' % b,411 print_error(['Unable to find appropriate unsigned integer type for %u bytes.' % b, 373 412 COMPILER_FAIL]) 374 413 375 414 if (not b in probe['signed_sizes']): 376 print_error(['Unable to find appropriate signed integer type for %u bytes ' % b,415 print_error(['Unable to find appropriate signed integer type for %u bytes.' % b, 377 416 COMPILER_FAIL]) 378 417 379 418 if (not b in probe['unsigned_strcs']): 380 print_error(['Unable to find appropriate unsigned printf formatter for %u bytes ' % b,419 print_error(['Unable to find appropriate unsigned printf formatter for %u bytes.' % b, 381 420 COMPILER_FAIL]) 382 421 383 422 if (not b in probe['signed_strcs']): 384 print_error(['Unable to find appropriate signed printf formatter for %u bytes ' % b,423 print_error(['Unable to find appropriate signed printf formatter for %u bytes.' % b, 385 424 COMPILER_FAIL]) 386 425 387 426 if (not b in probe['unsigned_concs']): 388 print_error(['Unable to find appropriate unsigned literal macro for %u bytes ' % b,427 print_error(['Unable to find appropriate unsigned literal macro for %u bytes.' % b, 389 428 COMPILER_FAIL]) 390 429 391 430 if (not b in probe['signed_concs']): 392 print_error(['Unable to find appropriate signed literal macro for %u bytes ' % b,431 print_error(['Unable to find appropriate signed literal macro for %u bytes.' % b, 393 432 COMPILER_FAIL]) 394 433 … … 417 456 macros.append({'oldmacro': "c ## %s" % name, 'newmacro': "INT%u_C(c)" % (b * 8)}) 418 457 419 for tag in tags:458 for tag in inttags: 420 459 newmacro = "U%s" % tag 421 460 if (not tag in probe['unsigned_tags']): 422 print_error(['Unable to find appropriate size macro for %s ' % newmacro,461 print_error(['Unable to find appropriate size macro for %s.' % newmacro, 423 462 COMPILER_FAIL]) 424 463 … … 426 465 macros.append({'oldmacro': "%s_MIN" % oldmacro, 'newmacro': "%s_MIN" % newmacro}) 427 466 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)}) 428 468 429 469 newmacro = tag 430 if (not tag in probe[' unsigned_tags']):470 if (not tag in probe['signed_tags']): 431 471 print_error(['Unable to find appropriate size macro for %s' % newmacro, 432 472 COMPILER_FAIL]) … … 435 475 macros.append({'oldmacro': "%s_MIN" % oldmacro, 'newmacro': "%s_MIN" % newmacro}) 436 476 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]) 437 493 438 494 fnd = True 439 495 440 if (not 'wchar' in probe['builtin s']):496 if (not 'wchar' in probe['builtin_sizes']): 441 497 print_warning(['The compiler does not provide the macro __WCHAR_TYPE__', 442 498 'for defining the compiler-native type wchar_t. We are', … … 445 501 fnd = False 446 502 447 if (probe['builtin s']['wchar']['value'] != 4):503 if (probe['builtin_sizes']['wchar']['value'] != 4): 448 504 print_warning(['The compiler provided macro __WCHAR_TYPE__ for defining', 449 505 'the compiler-native type wchar_t is not compliant with', … … 458 514 macros.append({'oldmacro': "__WCHAR_TYPE__", 'newmacro': "wchar_t"}) 459 515 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 460 525 fnd = True 461 526 462 if (not 'wint' in probe['builtin s']):527 if (not 'wint' in probe['builtin_sizes']): 463 528 print_warning(['The compiler does not provide the macro __WINT_TYPE__', 464 529 'for defining the compiler-native type wint_t. We are', … … 467 532 fnd = False 468 533 469 if (probe['builtin s']['wint']['value'] != 4):534 if (probe['builtin_sizes']['wint']['value'] != 4): 470 535 print_warning(['The compiler provided macro __WINT_TYPE__ for defining', 471 536 'the compiler-native type wint_t is not compliant with', … … 479 544 else: 480 545 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'}) 481 555 482 556 return {'macros': macros, 'typedefs': typedefs} … … 571 645 572 646 if (config['CROSS_TARGET'] == "arm32"): 573 gnu_target = "arm-linux-gnu "647 gnu_target = "arm-linux-gnueabi" 574 648 575 649 if (config['CROSS_TARGET'] == "ia32"): … … 586 660 if (config['PLATFORM'] == "arm32"): 587 661 target = config['PLATFORM'] 588 gnu_target = "arm-linux-gnu "662 gnu_target = "arm-linux-gnueabi" 589 663 590 664 if (config['PLATFORM'] == "ia32"): … … 669 743 {'type': 'short int', 'tag': 'SHORT', 'strc': '"h"', 'conc': '"@"'}, 670 744 {'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'} 671 750 ] 672 751 ) 673 752 674 maps = detect_ uints(probe, [1, 2, 4, 8], ['CHAR', 'SHORT', 'INT', 'LONG', 'LLONG'])753 maps = detect_sizes(probe, [1, 2, 4, 8], ['CHAR', 'SHORT', 'INT', 'LONG', 'LLONG'], ['LONG_DOUBLE', 'DOUBLE', 'FLOAT']) 675 754 676 755 finally:
Note:
See TracChangeset
for help on using the changeset viewer.