linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: shuah <shuah@kernel.org>
To: Xiaoyao Li <xiaoyao.li@intel.com>, Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kselftest@vger.kernel.org,
	linux-kernel@vger.kernel.org, shuah <shuah@kernel.org>
Subject: Re: [RFC v3 0/3] Fix errors when try to build kvm selftests on specified output
Date: Fri, 27 Mar 2020 10:03:03 -0600	[thread overview]
Message-ID: <71a5abdf-07b5-d927-1a08-de8019b3f39f@kernel.org> (raw)
In-Reply-To: <cb445047-ab84-0c49-cfba-ec6933971dc7@intel.com>

On 3/27/20 7:31 AM, Xiaoyao Li wrote:
> On 3/27/2020 4:57 AM, shuah wrote:
>> On 3/25/20 9:07 PM, Xiaoyao Li wrote:
>>> Hi Shuah,
>>>
>>> Hope you're happy with this version that I only touch KVM's Makefile.
>>>
>>> I attempted to build KVM selftests on a specified dir, unfortunately
>>> neither    "make O=/path/to/mydir TARGETS=kvm" in 
>>> tools/testing/selftests, nor
>>> "make OUTPUT=/path/to/mydir" in tools/testing/selftests/kvm work.
>>>
>>
>> Why are you running "make OUTPUT=/path/to/mydir"
>>
>> It isn't correct.
> 
> So what's the meaning of
> 
> ifeq (0,$(MAKELEVEL))
>      ifeq ($(OUTPUT),)
>      OUTPUT := $(shell pwd)
>      DEFAULT_INSTALL_HDR_PATH := 1
>      endif
> endif
> 
> in lib.mk?
> 

O is the variable for selftests Makefile and which is handled in
lib.mk. OUTPUT is internal and shouldn't set when running make.

>>
>> make O=/path/to/mydir is what you have to use. Please main Makefile
>> as well for O= and KBUILD_OUTPUT usages.
>>
>> Please see Documentation/dev-tools/kselftest.rst for use-cases.
>>
>> make O=/path/to/mydir TARGETS=kvm is a right use-case and I can see
>> it will fail to create x86_64 directory.
>>
>> Let's start with the following two commands and try to fix the
>> problems you are seeing.
>>
>> make O=/path/to/mydir in kvm directory (this is supported,
>> however, the following command from the main Makefile is
>> recommended use.)
> 
> Of course we can do this, but the "O=/path/to/mydir" only has effect on 
> header install, the *.o files still generated in kvm/ directory.
> 

Right. That is what needs to be fixed. This is the reason for your
source directory getting dirty when kvm test is built.

> And kvm's INSTALL_HDR_PATH cannot find the right headers.
> 
> That's why I choose to use "OUTPUT=/somewhere"
> 
>>  From main Makefile in kernel srcdir
>> make O=/path/to/mydir TARGETS=kvm
> 
> I guess "kernel srcdir" means "kselftest srcdir", i.e., 
> tools/testing/selftests/ ?

This is kernel source root directory. The command you would
use is:

make kselftest-all O=/path/to/mydir TARGETS=kvm

> 
> Well, as I said in the first place, I tried
> 
>      make O=/path/to/mydir TARGETS=kvm
> 
> but it doesn't work. So I did some fixup, and sent out the Patches.
> 

Right. It doesn't work for a couple of reasons:

1. The Makefile doesn't create sub-dirs when build is relocatable.
2. Makes source directory dirty.

> If the patches are wrong, please point it out and give your comments how 
> to make it right.
> 

The patches you sent are based on running the command with OUTPUT
set. That is why I am asking you start with the right use-cases,
and gave you pointers on tests to refer to that have sub-dirs
and handle relocatable builds:

futex
arm64
android

>> Also, just build isn't sufficient for you to be able to run the
>> tests.
>>
>> make kselftest-install O=/path/to/mydir TARGETS=kvm will generate
>> run script.
> 
> This command also has the x86_64 directory not created issue.
> Since it generates header files in kernel_src/usr/include, it doesn't 
> have headers path issue. But as result, the kernel_src directory is not 
> clean, this requires me to run "make mrproper", I *really* don't like it.
> 
> 

If the test leverages lib.mk headers install logic correctly, you
shouldn't see this problem.

Yes. It does make the source directory dirty. That is the problem we
have to fix. I am seeing issues the issue of x86_64 not being created
in the case of relocatable builds.

Thanks for working on this by the way. It is one of the tests that
identified as the one doesn't support relocatable builds.

You will see fixes to others I already fixed in

https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git/log/?h=next

Start withe the following use0-cases to fix and then test your fixes
for these use-cases. The goal is to be able to run kvm from target
directory and source directory staying clean.

You will have to build the kernel first in all of these cases.
Let's use kselftest-install which is what you would need if you
want build and then run tests later. Also assuming you are doing
native build on x86_64.

 From main kernel Makefile: (from kernel source root dir)

Builds in the same source directory:
make kselftest-install TARGETS=kvm

Relocatable build: (from kernel source root dir)

make O=/path/objdir  - build kernel
make kselftest-install O=/path/objdir TARGETS=kvm

 From tools/testing/selftests/kvm directory:
make O=/path/objdir install

Install step is important especially for relocatable builds,
as it makes sure all run-time dependencies are copied to the
target directory.

thanks,
-- Shuah

  reply	other threads:[~2020-03-27 16:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-26  3:07 [RFC v3 0/3] Fix errors when try to build kvm selftests on specified output Xiaoyao Li
2020-03-26  3:07 ` [RFC v3 1/3] kvm: selftests: Fix no directory error when OUTPUT specified Xiaoyao Li
2020-03-26  3:07 ` [RFC v3 2/3] kvm: selftests: Use the right INSTALL_HDR_PATH when OUTPUT specified and MAKELEVEL is 0 Xiaoyao Li
2020-03-26  3:07 ` [RFC v3 3/3] kvm: selftests: Fix header path when built from parent level with O specified Xiaoyao Li
2020-03-26 20:57 ` [RFC v3 0/3] Fix errors when try to build kvm selftests on specified output shuah
2020-03-27 13:31   ` Xiaoyao Li
2020-03-27 16:03     ` shuah [this message]
2020-03-28  8:51       ` Xiaoyao Li
2020-05-01 17:11         ` shuah

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=71a5abdf-07b5-d927-1a08-de8019b3f39f@kernel.org \
    --to=shuah@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=xiaoyao.li@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).