linuxcross-compilinggnu-toolchain

Downloading gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu from source, failed building libc


I am currently taking this course from Coursera about Linux system programming, and during assignment 2, I was required to download the cross compiler toolchain, as stated in the title, from source. Additionally, I was required to download the downgraded 10.2 version due to assignment grading purposes.

Having downloaded the gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz file and its .asc counterpart, as well as the gcc-arm-aarch64-none-linux-gnu-abe-manifest.txt, I blindly followed the installation instructions written in the release note.

For reference, I am currently using the ASUS TUF Dash F15 laptop with Windows 11 installed, and using the WSL2 feature to run Ubuntu 20.04 LTS. The kernel version is 5.10.16.3-microsoft-standard-WSL2.

On the final step, which is to run the command

../abe/abe.sh --manifest gcc-arm-aarch64-none-linux-gnu-abe-manifest.txt --build all

it returns the following error message:

make[1]: *** [Makefile:470: csu/subdir_lib] Error 2
make[1]: Leaving directory '/home/pingpingy/SysProgramming/CrossCompiler/build/snapshots/glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256'
make: *** [Makefile:9: all] Error 2
make: Leaving directory '/home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256'
WARNING: Previous command failed
WARNING: Make had failures!
ERROR (#115): build_all (Failed building libc.)
ERROR (#118): perform_build_steps (Step BUILD failed)
ERROR (#309): build_failure (Build process failed after 0 minutes)

I would like to learn how to successfully build the cross compiler. Thank you.

(Please pardon me if a minute fraction of this information is actually relavent or if hardly any relavent information was provided. I will promptly provide any information needed.)

EDIT:Here is more error message.

Traceback (most recent call last):
File "../scripts/gen-as-const.py", line 120, in <module>
main()
File "../scripts/gen-as-const.py", line 116, in main
consts = glibcextract.compute_c_consts(sym_data, args.cc)
File "/home/pingpingy/SysProgramming/CrossCompiler/build/snapshots/glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/scripts/glibcextract.py", line 62, in compute_c_consts
subprocess.check_call(cmd, shell=True)
File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'aarch64-none-linux-gnu-gcc -std=gnu11 -fgnu89-inline  -g -O2 -Wall -Wwrite-strings -Wundef -fmerge-all-constants -frounding-math -fno-stack-protector -Wstrict-prototypes -Wold-style-definition -fmath-errno     -ftls-model=initial-exec      -I../include -I/home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/csu  -I/home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256  -I../sysdeps/unix/sysv/linux/aarch64  -I../sysdeps/aarch64/nptl  -I../sysdeps/unix/sysv/linux/generic  -I../sysdeps/unix/sysv/linux/wordsize-64  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/aarch64/fpu  -I../sysdeps/aarch64/multiarch  -I../sysdeps/aarch64  -I../sysdeps/wordsize-64  -I../sysdeps/ieee754/ldbl-128  -I../sysdeps/ieee754/dbl-64/wordsize-64  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754/flt-32  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I. -nostdinc -isystem /home/pingpingy/SysProgramming/CrossCompiler/build/builds/destdir/x86_64-pc-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/include -isystem /home/pingpingy/SysProgramming/CrossCompiler/build/builds/destdir/x86_64-pc-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/include-fixed -isystem /usr/include  -D_LIBC_REENTRANT -include /home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h       -DTOP_NAMESPACE=glibc -DGEN_AS_CONST_HEADERS     -MD -MP -MF /home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/tcb-offsets.h.dT                  -MT '/home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/tcb-offsets.h.d /home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/tcb-offsets.h' -S -o /tmp/tmpsy_o8dhs/test.s -x c - < /tmp/tmpsy_o8dhs/test.c' returned non-zero exit status 1.
Traceback (most recent call last):
File "../scripts/gen-as-const.py", line 120, in <module>
main()
File "../scripts/gen-as-const.py", line 116, in main
consts = glibcextract.compute_c_consts(sym_data, args.cc)
File "/home/pingpingy/SysProgramming/CrossCompiler/build/snapshots/glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/scripts/glibcextract.py", line 62, in compute_c_consts
subprocess.check_call(cmd, shell=True)
File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'aarch64-none-linux-gnu-gcc -std=gnu11 -fgnu89-inline  -g -O2 -Wall -Wwrite-strings -Wundef -fmerge-all-constants -frounding-math -fno-stack-protector -Wstrict-prototypes -Wold-style-definition -fmath-errno     -ftls-model=initial-exec      -I../include -I/home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/csu  -I/home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256  -I../sysdeps/unix/sysv/linux/aarch64  -I../sysdeps/aarch64/nptl  -I../sysdeps/unix/sysv/linux/generic  -I../sysdeps/unix/sysv/linux/wordsize-64  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/aarch64/fpu  -I../sysdeps/aarch64/multiarch  -I../sysdeps/aarch64  -I../sysdeps/wordsize-64  -I../sysdeps/ieee754/ldbl-128  -I../sysdeps/ieee754/dbl-64/wordsize-64  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754/flt-32  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I. -nostdinc -isystem /home/pingpingy/SysProgramming/CrossCompiler/build/builds/destdir/x86_64-pc-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/include -isystem /home/pingpingy/SysProgramming/CrossCompiler/build/builds/destdir/x86_64-pc-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/include-fixed -isystem /usr/include  -D_LIBC_REENTRANT -include /home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h       -DTOP_NAMESPACE=glibc -DGEN_AS_CONST_HEADERS     -MD -MP -MF /home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/tlsdesc.h.dT              -MT '/home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/tlsdesc.h.d /home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/tlsdesc.h' -S -o /tmp/tmp28v_udda/test.s -x c - < /tmp/tmp28v_udda/test.c' returned non-zero exit status 1.
make[2]: *** [../Makerules:271: /home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/tcb-offsets.h] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [../Makerules:271: /home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/tlsdesc.h] Error 1
make[2]: Leaving directory '/home/pingpingy/SysProgramming/CrossCompiler/build/snapshots/glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256/csu'
make[1]: *** [Makefile:470: csu/subdir_lib] Error 2
make[1]: Leaving directory '/home/pingpingy/SysProgramming/CrossCompiler/build/snapshots/glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256'
make: *** [Makefile:9: all] Error 2
make: Leaving directory '/home/pingpingy/SysProgramming/CrossCompiler/build/builds/x86_64-pc-linux-gnu/aarch64-none-linux-gnu/glibc-glibc.git~_rev_8dc76056654f8013a54678461fb023e988a17256'
WARNING: Previous command failed
WARNING: Make had failures!
ERROR (#115): build_all (Failed building libc.)
ERROR (#118): perform_build_steps (Step BUILD failed)
ERROR (#309): build_failure (Build process failed after 0 minutes)

Solution

  • even I am also taking the same course, after trying for sometime, I am able to figure out how to install the cross-compiler, after referring to this link

    https://gist.github.com/eltonvs/e7cd472dded89e7dcf4aea822e8121c1

    in that page, they have given example with "gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux.tar.xz"

    in my case, I have downloaded "gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz",

    1. download gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz, make sure that you download the correct file.

    2. tar -zxf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz

    3. then copy or move the folder which you get after untar to /opt/ directory

    4. write a simple .c file and compile it using

      /opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc a.c (give your sample .c file name here)

    5. run below command to check if the binary is created for ARM or not.

      file a.out (give your binary name which got generated after compilation)