Hello all,
I am trying to cross-compile EPICS base-7.0.8 for a target architecture of linux-arm (Zynq-7000 board), with my host being linux-x86_64.
I have modified the configure/CONFIG_SITE file to set CROSS_COMPILER_TARGET_ARCHS=linux-arm,
and I have set the GNU cross-compiler target name and the GNU tools install path in the file configure/os/CONFIG_SITE.linux-x86.linux-arm as follows:
GNU_TARGET = arm-linux-gnueabihf
GNU_DIR = /opt/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi
I have verified that the GNU tools path is correct:
$ ll /opt/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin
total 51M
-rwxr-xr-x 1 timing timing 947K Dec 1 2018 arm-linux-gnueabihf-addr2line
-rwxr-xr-x 1 timing timing 980K Dec 1 2018 arm-linux-gnueabihf-ar
-rwxr-xr-x 1 timing timing 1.7M Dec 1 2018 arm-linux-gnueabihf-as
-rwxr-xr-x 1 timing timing 1.7M Dec 1 2018 arm-linux-gnueabihf-c++
-rwxr-xr-x 1 timing timing 944K Dec 1 2018 arm-linux-gnueabihf-c++filt
-rwxr-xr-x 1 timing timing 1.7M Dec 1 2018 arm-linux-gnueabihf-cpp
-rwxr-xr-x 1 timing timing 35K Dec 1 2018 arm-linux-gnueabihf-elfedit
-rwxr-xr-x 1 timing timing 1.7M Dec 1 2018 arm-linux-gnueabihf-g++
-rwxr-xr-x 1 timing timing 1.7M Dec 1 2018 arm-linux-gnueabihf-gcc
-rwxr-xr-x 1 timing timing 1.7M Dec 1 2018 arm-linux-gnueabihf-gcc-7.3.1
-rwxr-xr-x 1 timing timing 34K Dec 1 2018 arm-linux-gnueabihf-gcc-ar
-rwxr-xr-x 1 timing timing 34K Dec 1 2018 arm-linux-gnueabihf-gcc-nm
-rwxr-xr-x 1 timing timing 34K Dec 1 2018 arm-linux-gnueabihf-gcc-ranlib
-rwxr-xr-x 1 timing timing 8.0M Dec 1 2018 arm-linux-gnueabihf-gcov
-rwxr-xr-x 1 timing timing 1.2M Dec 1 2018 arm-linux-gnueabihf-gcov-dump
-rwxr-xr-x 1 timing timing 1.2M Dec 1 2018 arm-linux-gnueabihf-gcov-tool
-rwxr-xr-x 1 timing timing 15M Dec 1 2018 arm-linux-gnueabihf-gdb
-rwxr-xr-x 1 timing timing 1019K Dec 1 2018 arm-linux-gnueabihf-gprof
-rwxr-xr-x 1 timing timing 1.5M Dec 1 2018 arm-linux-gnueabihf-ld
-rwxr-xr-x 1 timing timing 1.5M Dec 1 2018 arm-linux-gnueabihf-ld.bfd
-rwxr-xr-x 1 timing timing 961K Dec 1 2018 arm-linux-gnueabihf-nm
-rwxr-xr-x 1 timing timing 1.2M Dec 1 2018 arm-linux-gnueabihf-objcopy
-rwxr-xr-x 1 timing timing 1.5M Dec 1 2018 arm-linux-gnueabihf-objdump
-rwxr-xr-x 1 timing timing 980K Dec 1 2018 arm-linux-gnueabihf-ranlib
-rwxr-xr-x 1 timing timing 577K Dec 1 2018 arm-linux-gnueabihf-readelf
-rwxr-xr-x 1 timing timing 948K Dec 1 2018 arm-linux-gnueabihf-size
-rwxr-xr-x 1 timing timing 947K Dec 1 2018 arm-linux-gnueabihf-strings
-rwxr-xr-x 1 timing timing 1.2M Dec 1 2018 arm-linux-gnueabihf-strip
-rwxr-xr-x 1 timing timing 1.3M Dec 1 2018 gdbserver
-rwxr-xr-x 1 timing timing 3.9K Dec 1 2018 runtest
However, when I run make for base-7.0.8, I encounter the following errors:
$ make -j10
make -C ./configure install
make[1]: Entering directory '/epics/base-7.0.8/configure'
perl -CSD ../src/tools/makeMakefile.pl O.linux-x86_64 ../..
perl -CSD ../src/tools/makeMakefile.pl O.linux-arm ../..
mkdir -p O.Common
make -C O.linux-x86_64 -f ../Makefile TOP=../.. \
T_A=linux-x86_64 install
make[2]: Entering directory '/epics/base-7.0.8/configure/O.linux-x86_64'
/usr/bin/gcc -x c -E -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -I. -I../O.Common -I. -I. -I.. -I../../include/compiler/gcc -I../../include/os/Linux -I../../include
../toolchain.c > TOOLCHAIN.linux-x86_64.linux-x86_64
Installing CFG file ../../cfg/TOOLCHAIN.linux-x86_64.linux-x86_64
mkdir ../../cfg
Installing CFG file ../../cfg/CONFIG_LIBCOM_MODULE
Installing CFG file ../../cfg/CONFIG_LIBCOM_VERSION
Installing CFG file ../../cfg/CONFIG_CA_MODULE
Installing CFG file ../../cfg/CONFIG_CA_VERSION
Installing CFG file ../../cfg/CONFIG_DATABASE_MODULE
Installing CFG file ../../cfg/CONFIG_DATABASE_VERSION
make[2]: Leaving directory '/epics/base-7.0.8/configure/O.linux-x86_64'
make -C O.linux-arm -f ../Makefile TOP=../.. \
T_A=linux-arm install
make[2]: Entering directory '/epics/base-7.0.8/configure/O.linux-arm'
/usr/bin/arm-linux-gnueabihf-gcc -x c -E -D_GNU_SOURCE -D_DEFAULT_SOURCE -DUNIX -Dlinux -I. -I../O.Common -I. -I. -I.. -I../../include/compiler/gcc -I../../include/os/Linux -I../../include
../toolchain.c > TOOLCHAIN.linux-x86_64.linux-arm
/bin/sh: 1: /usr/bin/arm-linux-gnueabihf-gcc: not found
make[2]: *** No rule to make target 'TOOLCHAIN.linux-x86_64.linux-arm', needed by '../../cfg/TOOLCHAIN.linux-x86_64.linux-arm'. Stop.
make[2]: Leaving directory '/epics/base-7.0.8/configure/O.linux-arm'
../configure/RULES_ARCHS:58: recipe for target 'install.linux-arm' failed
make[1]: *** [install.linux-arm] Error 2
make[1]: Leaving directory '/epics/base-7.0.8/configure'
configure/RULES_DIRS:85: recipe for target 'configure.install' failed
make: *** [configure.install] Error 2
It seems that "make" is trying to use /usr/bin/arm-linux-gnueabihf-gcc instead of the specified path. I have verified that the cross-compiler is correctly installed and available in the specified directory.
I have also tested the same cross-compilation setup with base-7.0.6.1 and base-7.0.7, and both versions compile successfully.
Do you have any suggestions?
Thank you!
chengsn
IHEP