lkml.org 
[lkml]   [2013]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 50/52] tools/perf/build: Fix O=/some/dir perf.o type of targets
    Date
    On Tue,  8 Oct 2013 12:11:20 +0200, Ingo Molnar wrote:
    > If someone specifies a single target, mixed with O=, the following way:
    >
    > hubble:~/tip/tools/perf> make O=/tmp/perf util/stat.o
    > BUILD: Doing 'make -j8' parallel build
    > gcc -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k [...]
    >
    > The build might even fail, if a target depends on other targets:
    >
    > hubble:~/tip/tools/perf> make O=/tmp/perf perf.o
    > ...
    > perf.c: In function ‘handle_options’:
    > perf.c:155:21: error: ‘PERF_HTML_PATH’ undeclared (first use in this function)
    >
    > The correct way to invoke such targets is:
    >
    > hubble:~/tip/tools/perf> make O=/tmp/perf /tmp/perf/perf.o
    > BUILD: Doing 'make -j8' parallel build
    > GEN /tmp/perf/common-cmds.h
    > CC /tmp/perf/perf.o
    >
    > But that's unnecessary typing and it's also easy to mistakenly build into the
    > source directory.
    >
    > To fix this remove the generic suffix rules and add redirection to $(OUTPUT)
    > for the most popular .o targets.

    I got this:

    $ cd tools/perf
    $ make
    ... (succeeded)

    $ make O=~/build/perf perf.o
    make: `perf.o' is up to date.

    $ rm ~/build/perf/perf.o
    $ make O=~/build/perf/ perf.o
    make: `perf.o' is up to date.

    > +#
    > +# If a target does not match any of the later rules then prefix it by $(OUTPUT)
    > +# This makes targets like 'make O=/tmp/perf perf.o' work in a natural way.
    > +#
    > +ifneq ($(OUTPUT),)
    > +%.o: $(OUTPUT)%.o
    > + @echo " # Redirected target $@ => $(OUTPUT)$@"
    > +util/%.o: $(OUTPUT)util/%.o
    > + @echo " # Redirected target $@ => $(OUTPUT)util/$@"
    > +bench/%.o: $(OUTPUT)bench/%.o
    > + @echo " # Redirected target $@ => $(OUTPUT)bench/$@"
    > +tests/%.o: $(OUTPUT)tests/%.o
    > + @echo " # Redirected target $@ => $(OUTPUT)tests/$@"
    > +endif

    It also doesn't care about other directories - arch/, scripts/ and ui/ -
    and their subdirectories. So even on clean build it'll failed to build
    these files with O=dir.

    $ make clean

    $ make O=~/build/perf ui/stdio/hist.o
    BUILD: Doing 'make -j12' parallel build
    make[1]: *** No rule to make target `ui/stdio/hist.o'. Stop.
    make: *** [ui/stdio/hist.o] Error 2


    Thanks,
    Namhyung
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2013-10-10 08:41    [W:4.147 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site