Changes in tools/autotool.py [a4a0f1d:2429e4a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/autotool.py
ra4a0f1d r2429e4a 49 49 50 50 PACKAGE_BINUTILS = "usually part of binutils" 51 PACKAGE_GCC = "preferably version 4. 7.0or newer"51 PACKAGE_GCC = "preferably version 4.5.1 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_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)); 79 69 80 70 #define DECLARE_INTSIZE(tag, type, strc, conc) \\ 81 71 AUTOTOOL_DECLARE("intsize", "unsigned", tag, #type, strc, conc, sizeof(unsigned type)); \\ 82 72 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));86 73 87 74 int main(int argc, char *argv[]) … … 197 184 sys.stderr.write("ok\n") 198 185 199 def check_app_alternatives(alts, args, name, details):200 "Check whether an application can be executed (use several alternatives)"201 202 tried = []203 found = None204 205 for alt in alts:206 working = True207 cmdline = [alt] + args208 tried.append(" ".join(cmdline))209 210 try:211 sys.stderr.write("Checking for %s ... " % alt)212 subprocess.Popen(cmdline, stdout = subprocess.PIPE, stderr = subprocess.PIPE).wait()213 except:214 sys.stderr.write("failed\n")215 working = False216 217 if (working):218 sys.stderr.write("ok\n")219 found = alt220 break221 222 if (found is None):223 print_error(["%s is missing." % name,224 "",225 "Please make sure that it is installed in your",226 "system (%s)." % details,227 "",228 "The following alternatives were tried:"] + tried)229 230 return found231 232 186 def check_gcc(path, prefix, common, details): 233 187 "Check for GCC" … … 275 229 return int(value, base) 276 230 277 def probe_compiler(common, intsizes, floatsizes):231 def probe_compiler(common, sizes): 278 232 "Generate, compile and parse probing source" 279 233 … … 283 237 outf.write(PROBE_HEAD) 284 238 285 for typedef in intsizes:239 for typedef in sizes: 286 240 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']))290 241 291 242 outf.write(PROBE_TAIL) … … 331 282 signed_concs = {} 332 283 333 float_tags = {} 334 335 builtin_sizes = {} 336 builtin_signs = {} 284 builtins = {} 337 285 338 286 for j in range(len(lines)): … … 371 319 print_error(["Unexpected keyword \"%s\" in \"%s\" on line %s." % (subcategory, PROBE_OUTPUT, j), COMPILER_FAIL]) 372 320 373 if (category == " floatsize"):321 if (category == "builtin"): 374 322 try: 375 323 value_int = decode_value(value) … … 377 325 print_error(["Integer value expected in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL]) 378 326 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" 327 builtins[tag] = {'name': name, 'value': value_int} 328 329 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} 330 331 def detect_uints(probe, bytes, tags): 332 "Detect correct types for fixed-size integer types" 405 333 406 334 macros = [] … … 409 337 for b in bytes: 410 338 if (not b in probe['unsigned_sizes']): 411 print_error(['Unable to find appropriate unsigned integer type for %u bytes .' % b,339 print_error(['Unable to find appropriate unsigned integer type for %u bytes' % b, 412 340 COMPILER_FAIL]) 413 341 414 342 if (not b in probe['signed_sizes']): 415 print_error(['Unable to find appropriate signed integer type for %u bytes .' % b,343 print_error(['Unable to find appropriate signed integer type for %u bytes' % b, 416 344 COMPILER_FAIL]) 417 345 418 346 if (not b in probe['unsigned_strcs']): 419 print_error(['Unable to find appropriate unsigned printf formatter for %u bytes .' % b,347 print_error(['Unable to find appropriate unsigned printf formatter for %u bytes' % b, 420 348 COMPILER_FAIL]) 421 349 422 350 if (not b in probe['signed_strcs']): 423 print_error(['Unable to find appropriate signed printf formatter for %u bytes .' % b,351 print_error(['Unable to find appropriate signed printf formatter for %u bytes' % b, 424 352 COMPILER_FAIL]) 425 353 426 354 if (not b in probe['unsigned_concs']): 427 print_error(['Unable to find appropriate unsigned literal macro for %u bytes .' % b,355 print_error(['Unable to find appropriate unsigned literal macro for %u bytes' % b, 428 356 COMPILER_FAIL]) 429 357 430 358 if (not b in probe['signed_concs']): 431 print_error(['Unable to find appropriate signed literal macro for %u bytes .' % b,359 print_error(['Unable to find appropriate signed literal macro for %u bytes' % b, 432 360 COMPILER_FAIL]) 433 361 … … 456 384 macros.append({'oldmacro': "c ## %s" % name, 'newmacro': "INT%u_C(c)" % (b * 8)}) 457 385 458 for tag in inttags:386 for tag in tags: 459 387 newmacro = "U%s" % tag 460 388 if (not tag in probe['unsigned_tags']): 461 print_error(['Unable to find appropriate size macro for %s .' % newmacro,389 print_error(['Unable to find appropriate size macro for %s' % newmacro, 462 390 COMPILER_FAIL]) 463 391 … … 465 393 macros.append({'oldmacro': "%s_MIN" % oldmacro, 'newmacro': "%s_MIN" % newmacro}) 466 394 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)})468 395 469 396 newmacro = tag 470 if (not tag in probe[' signed_tags']):397 if (not tag in probe['unsigned_tags']): 471 398 print_error(['Unable to find appropriate size macro for %s' % newmacro, 472 399 COMPILER_FAIL]) … … 475 402 macros.append({'oldmacro': "%s_MIN" % oldmacro, 'newmacro': "%s_MIN" % newmacro}) 476 403 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])493 404 494 405 fnd = True 495 406 496 if (not 'wchar' in probe['builtin _sizes']):407 if (not 'wchar' in probe['builtins']): 497 408 print_warning(['The compiler does not provide the macro __WCHAR_TYPE__', 498 409 'for defining the compiler-native type wchar_t. We are', … … 501 412 fnd = False 502 413 503 if (probe['builtin _sizes']['wchar']['value'] != 4):414 if (probe['builtins']['wchar']['value'] != 4): 504 415 print_warning(['The compiler provided macro __WCHAR_TYPE__ for defining', 505 416 'the compiler-native type wchar_t is not compliant with', … … 514 425 macros.append({'oldmacro': "__WCHAR_TYPE__", 'newmacro': "wchar_t"}) 515 426 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 525 427 fnd = True 526 428 527 if (not 'wint' in probe['builtin _sizes']):429 if (not 'wint' in probe['builtins']): 528 430 print_warning(['The compiler does not provide the macro __WINT_TYPE__', 529 431 'for defining the compiler-native type wint_t. We are', … … 532 434 fnd = False 533 435 534 if (probe['builtin _sizes']['wint']['value'] != 4):436 if (probe['builtins']['wint']['value'] != 4): 535 437 print_warning(['The compiler provided macro __WINT_TYPE__ for defining', 536 438 'the compiler-native type wint_t is not compliant with', … … 545 447 macros.append({'oldmacro': "__WINT_TYPE__", 'newmacro': "wint_t"}) 546 448 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'})555 556 449 return {'macros': macros, 'typedefs': typedefs} 557 450 … … 566 459 567 460 for key, value in common.items(): 568 if (type(value) is list): 569 outmk.write('%s = %s\n' % (key, " ".join(value))) 570 else: 571 outmk.write('%s = %s\n' % (key, value)) 461 outmk.write('%s = %s\n' % (key, value)) 572 462 573 463 outmk.close() … … 645 535 646 536 if (config['CROSS_TARGET'] == "arm32"): 647 gnu_target = "arm-linux-gnu eabi"537 gnu_target = "arm-linux-gnu" 648 538 649 539 if (config['CROSS_TARGET'] == "ia32"): … … 660 550 if (config['PLATFORM'] == "arm32"): 661 551 target = config['PLATFORM'] 662 gnu_target = "arm-linux-gnu eabi"552 gnu_target = "arm-linux-gnu" 663 553 664 554 if (config['PLATFORM'] == "ia32"): … … 734 624 # Platform-specific utilities 735 625 if ((config['BARCH'] == "amd64") or (config['BARCH'] == "ia32") or (config['BARCH'] == "ppc32") or (config['BARCH'] == "sparc64")): 736 c ommon['GENISOIMAGE'] = check_app_alternatives(["mkisofs", "genisoimage"], ["--version"], "ISO 9660 creation utility", "usually part of genisoimage")626 check_app(["mkisofs", "--version"], "ISO 9660 creation utility", "usually part of genisoimage") 737 627 738 628 probe = probe_compiler(common, … … 743 633 {'type': 'short int', 'tag': 'SHORT', 'strc': '"h"', 'conc': '"@"'}, 744 634 {'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'}750 635 ] 751 636 ) 752 637 753 maps = detect_ sizes(probe, [1, 2, 4, 8], ['CHAR', 'SHORT', 'INT', 'LONG', 'LLONG'], ['LONG_DOUBLE', 'DOUBLE', 'FLOAT'])638 maps = detect_uints(probe, [1, 2, 4, 8], ['CHAR', 'SHORT', 'INT', 'LONG', 'LLONG']) 754 639 755 640 finally:
Note:
See TracChangeset
for help on using the changeset viewer.