On Wednesday, February 17, 2021 at 7:56:52 AM UTC-5 punit wrote:

> 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 ...

Would that not require arch anymore in this case? So how would it work on 
fedora? 

>
>
> 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?

Not sure. On one hand, it would be nice for the changes to be backwards 
compatible so that we do not have to update the docs. On other hand, I 
agree with some of your points that it would make it easier to support 
RISC-V in future. 

I wonder what others think. I guest a lot of that applies to other patch.

>
>
> > +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/0db00b8f-a4c3-4e2c-9457-256278b2a0d2n%40googlegroups.com.

Reply via email to