Hi Waldek, Waldek Kozaczuk <[email protected]> writes:
> On Mon, Feb 15, 2021 at 7:49 AM Punit Agrawal <[email protected]> wrote: > > When cross compiling, it would be good to support the following two > cases - > > * Distro provided cross compiler + libraries - This is the case when a > distro with multi-arch support (e.g., Debian derivaties) > > * Local libraries installation - Needed when the distro doesn't > support multi-arch or there's a need to use local installs > > Update the libgcc detection to query the compiler regarding the > location of the libraries - provided the correct CROSS_PREFIX is > specified. If this fails to find the library, fall back to the hard > coded location. Also, add a message to inform the user about the > fallback usage. > > Signed-off-by: Punit Agrawal <[email protected]> > --- > scripts/build | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/scripts/build b/scripts/build > index 5fdcc7a88214..88f48f5e0582 100755 > --- a/scripts/build > +++ b/scripts/build > @@ -271,15 +271,14 @@ kernel_end=$(($loader_size+2097151 & ~2097151)) > cd $OUT > > host_arch=$(uname -m) > -if [[ "$host_arch" == "x86_64" && "$arch" == 'aarch64' ]]; then > - libgcc_s_path=$(${CROSS_PREFIX:-aarch64-linux-gnu-}gcc > -print-file-name=libgcc_s.so.1) > - if [[ "$libgcc_s_path" == "libgcc_s.so.1" ]]; then > - libgcc_s_dir=$(readlink -f > ../downloaded_packages/aarch64/gcc/install/lib64) > - else > - libgcc_s_dir=$(dirname $(readlink -f $libgcc_s_path)) > - fi > -else > - libgcc_s_dir=$(dirname $(readlink -f $(gcc > -print-file-name=libgcc_s.so.1))) > +CC=${CROSS_PREFIX}gcc > > On Fedora I cross-compile like this: > ./scripts/build mode=release image=tests fs=rofs -j$(nproc) arch=aarch64 > --create-disk > So in my case the CROSS_PREFIX is not set at all this would use x86_64 > gcc and fix x86_64 version og libgcc_s.so Would you be averse to setting the CROSS_PREFIX before calling the build script? Something like - CROSS_PREFIX=aarch64-linux-gnu- ./scripts/build mode=release ... I was hesitating to drop the aarch64-linux-gnu- prefix but dropping the hard-coded defaults regarding paths for compiler prefixes / library locations will allow simplifying the build scripts and Makefiles. Think about all the places we've got aarch64 hard coded in the build system. Looking ahead, dropping the default will also reduce the churn when porting OSv to other architectures (RISC-V for example). What do you think? > +libgcc_s_dir=$(dirname $(readlink -f $(${CC} > -print-file-name=libgcc_s.so.1))) > +if [[ "$libgcc_s_path" == "libgcc_s.so.1" ]]; then > > Did you mean libgcc_s_dir? This also probably would not be correct. Indeed - it should've been libgcc_s_dir here. > > + cat <<-EOF > + Unable to resolve libgcc_s.so.1 using "${CC}". > + Looking in ../downloaded_packages/aarch64/gcc/install/lib64 > + EOF > + libgcc_s_dir=$(readlink -f > ../downloaded_packages/aarch64/gcc/install/lib64) > fi > > All in all, this does not work on Fedora. > > I think this is a more correct version: > > diff --git a/scripts/build b/scripts/build > > index 5fdcc7a8..b07dfd6e 100755 > > --- a/scripts/build > > +++ b/scripts/build > > @@ -272,14 +272,20 @@ cd $OUT > > > > host_arch=$(uname -m) > > if [[ "$host_arch" == "x86_64" && "$arch" == 'aarch64' ]]; then > > - libgcc_s_path=$(${CROSS_PREFIX:-aarch64-linux-gnu-}gcc > -print-file-name=libgcc_s.so.1) > > - if [[ "$libgcc_s_path" == "libgcc_s.so.1" ]]; then > > - libgcc_s_dir=$(readlink -f > ../downloaded_packages/aarch64/gcc/install/lib64) > > - else > > - libgcc_s_dir=$(dirname $(readlink -f $libgcc_s_path)) > > - fi > > + CC=${CROSS_PREFIX:-aarch64-linux-gnu-}gcc > > +else > > + CC=gcc > > +fi > > + > > +libgcc_s_path=$(${CC} -print-file-name=libgcc_s.so.1) > > +if [[ "$libgcc_s_path" == "libgcc_s.so.1" ]]; then > > + cat <<-EOF > > + Unable to resolve libgcc_s.so.1 using "${CC}". > > + Looking in ../downloaded_packages/aarch64/gcc/install/lib64 > > + EOF > > + libgcc_s_dir=$(readlink -f > ../downloaded_packages/aarch64/gcc/install/lib64) > > else > > - libgcc_s_dir=$(dirname $(readlink -f $(gcc > -print-file-name=libgcc_s.so.1))) > > + libgcc_s_dir=$(dirname $(readlink -f $libgcc_s_path)) > > fi > > > > if [ "$export" != "none" ]; then > > if [ "$export" != "none" ]; then > -- > 2.29.2 Not sure what happened there but your patch shows up with extra newlines. If you think that it is better to leave the CROSS_PREFIX defaults in place for aarch64 then this patch works too. Regards, Punit -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/osv-dev/877dn6ettg.fsf%40stealth.
