diff options
| author | Man, Jianting (Meco) <[email protected]> | 2022-11-22 21:40:50 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-11-22 21:40:50 -0500 |
| commit | bdd663a33fb0af8864344a7bf568a706669d96d4 (patch) | |
| tree | bae6015a528c29a38a2630670aa382d07322b771 /tools | |
| parent | fc83546cf5b7a412b9f191488cd50c90d22c93c6 (diff) | |
[libc][musl] support arm-linux-musleabi toolchain
目前基本功能已经可以在QEMU上跑起来,但是pthread和内核signal选中会报冲突。先合并一版本,后续解决这些问题。
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/gcc.py | 97 |
1 files changed, 62 insertions, 35 deletions
diff --git a/tools/gcc.py b/tools/gcc.py index 1b31d5d549..78f0b7afc5 100644 --- a/tools/gcc.py +++ b/tools/gcc.py @@ -69,7 +69,6 @@ def CheckHeader(rtconfig, filename): def GetNewLibVersion(rtconfig): version = 'unknown' root = GetGCCRoot(rtconfig) - if CheckHeader(rtconfig, '_newlib_version.h'): # get version from _newlib_version.h file f = open(os.path.join(root, 'include', '_newlib_version.h'), 'r') if f: @@ -86,6 +85,33 @@ def GetNewLibVersion(rtconfig): f.close() return version +# FIXME: it's not very good +def CheckMUSLLibc(rtconfig): + if 'musl' in rtconfig.PREFIX: + return True + return False + +# FIXME: there is no musl version or musl macros can be found officially +def GetMuslVersion(rtconfig): + version = 'unknown' + # root = GetGCCRoot(rtconfig) + # print(root) + return version + +# return libc name and version +def GetGCCLibcNameVersion(rtconfig): + if rtconfig.PLATFORM != 'gcc': + return ('unknown', 'unknown') + + newlib_version = GetNewLibVersion(rtconfig) + if newlib_version != 'unknown': + return ('newlib', newlib_version) # libc: newlib, version: newlib_version + elif CheckMUSLLibc(rtconfig) == True: + GetMuslVersion(rtconfig) + return ('musl', 'unknown') #libc: musl, version: unknown + else: + return ('unknown', 'unknown') # libc: unknown, version: unknown + def GCCResult(rtconfig, str): import subprocess @@ -173,43 +199,44 @@ def GCCResult(rtconfig, str): return result def GenerateGCCConfig(rtconfig): - str = '' - cc_header = '' - cc_header += '#ifndef CCONFIG_H__\n' - cc_header += '#define CCONFIG_H__\n' - cc_header += '/* Automatically generated file; DO NOT EDIT. */\n' - cc_header += '/* compiler configure file for RT-Thread in GCC*/\n\n' + # str = '' + # cc_header = '' + # cc_header += '#ifndef CCONFIG_H__\n' + # cc_header += '#define CCONFIG_H__\n' + # cc_header += '/* Automatically generated file; DO NOT EDIT. */\n' + # cc_header += '/* compiler configure file for RT-Thread in GCC*/\n\n' - if CheckHeader(rtconfig, 'newlib.h'): - str += '#include <newlib.h>\n' - cc_header += '#define HAVE_NEWLIB_H 1\n' - cc_header += '#define LIBC_VERSION "newlib %s"\n\n' % GetNewLibVersion(rtconfig) + # if CheckHeader(rtconfig, 'newlib.h'): + # str += '#include <newlib.h>\n' + # cc_header += '#define HAVE_NEWLIB_H 1\n' + # cc_header += '#define LIBC_VERSION "newlib %s"\n\n' % GetNewLibVersion(rtconfig) - if CheckHeader(rtconfig, 'sys/signal.h'): - str += '#include <sys/signal.h>\n' - cc_header += '#define HAVE_SYS_SIGNAL_H 1\n' - if CheckHeader(rtconfig, 'sys/select.h'): - str += '#include <sys/select.h>\n' - cc_header += '#define HAVE_SYS_SELECT_H 1\n' - if CheckHeader(rtconfig, 'pthread.h'): - str += "#include <pthread.h>\n" - cc_header += '#define HAVE_PTHREAD_H 1\n' + # if CheckHeader(rtconfig, 'sys/signal.h'): + # str += '#include <sys/signal.h>\n' + # cc_header += '#define HAVE_SYS_SIGNAL_H 1\n' + # if CheckHeader(rtconfig, 'sys/select.h'): + # str += '#include <sys/select.h>\n' + # cc_header += '#define HAVE_SYS_SELECT_H 1\n' + # if CheckHeader(rtconfig, 'pthread.h'): + # str += "#include <pthread.h>\n" + # cc_header += '#define HAVE_PTHREAD_H 1\n' - # if CheckHeader(rtconfig, 'sys/dirent.h'): - # str += '#include <sys/dirent.h>\n' + # # if CheckHeader(rtconfig, 'sys/dirent.h'): + # # str += '#include <sys/dirent.h>\n' - # add some common features - str += 'const char* version = __VERSION__;\n' - str += 'const int iso_c_visible = __ISO_C_VISIBLE;\n' - str += '\n#ifdef HAVE_INITFINI_ARRAY\n' - str += 'const int init_fini_array = HAVE_INITFINI_ARRAY;\n' - str += '#endif\n' + # # add some common features + # str += 'const char* version = __VERSION__;\n' + # str += 'const int iso_c_visible = __ISO_C_VISIBLE;\n' + # str += '\n#ifdef HAVE_INITFINI_ARRAY\n' + # str += 'const int init_fini_array = HAVE_INITFINI_ARRAY;\n' + # str += '#endif\n' - cc_header += '\n' - cc_header += GCCResult(rtconfig, str) - cc_header += '\n#endif\n' + # cc_header += '\n' + # cc_header += GCCResult(rtconfig, str) + # cc_header += '\n#endif\n' - cc_file = open('cconfig.h', 'w') - if cc_file: - cc_file.write(cc_header) - cc_file.close() + # cc_file = open('cconfig.h', 'w') + # if cc_file: + # cc_file.write(cc_header) + # cc_file.close() + pass |
