mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Improve crtbegin.o Lookup for Linux Targets (#1975)
* refactor linux crtbegin lookup to use architecture-specific glob paths * Fixed incorrect function call to `get_linux_crt_begin_glob_path` (`get_linux_crt_begin_arch_glob`) * Formatting --------- Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
This commit is contained in:
@@ -327,6 +327,24 @@ static const char *find_arch_glob_path(const char *glob_path, int file_len)
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const char *get_linux_crt_begin_arch_glob(void)
|
||||
{
|
||||
switch (compiler.build.arch_os_target)
|
||||
{
|
||||
case LINUX_X64:
|
||||
return "/usr/lib/gcc/x86_64*linux*/*/crtbegin.o";
|
||||
case LINUX_X86:
|
||||
return "/usr/lib/gcc/i686*linux*/*/crtbegin.o";
|
||||
case LINUX_AARCH64:
|
||||
return "/usr/lib/gcc/aarch64*linux*/*/crtbegin.o";
|
||||
case LINUX_RISCV32:
|
||||
case LINUX_RISCV64:
|
||||
default:
|
||||
return "/usr/lib/gcc/*/*/crtbegin.o";
|
||||
}
|
||||
}
|
||||
|
||||
static const char *find_linux_crt(void)
|
||||
{
|
||||
if (compiler.build.linuxpaths.crt) return compiler.build.linuxpaths.crt;
|
||||
@@ -350,7 +368,8 @@ static const char *find_linux_crt(void)
|
||||
static const char *find_linux_crt_begin(void)
|
||||
{
|
||||
if (compiler.build.linuxpaths.crtbegin) return compiler.build.linuxpaths.crtbegin;
|
||||
const char *path = find_arch_glob_path("/usr/lib/gcc/*/*/crtbegin.o", 10);
|
||||
const char *arch_glob_path = get_linux_crt_begin_arch_glob();
|
||||
const char *path = find_arch_glob_path(arch_glob_path, 10);
|
||||
if (!path)
|
||||
{
|
||||
INFO_LOG("No crtbegin in /usr/lib/gcc/*/*/");
|
||||
|
||||
Reference in New Issue
Block a user