lkml.org 
[lkml]   [2015]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v11 23/39] perf tools: Introduce llvm config options
    Date
    This patch introduces [llvm] config section with 5 options. Following
    patches will use then to config llvm dynamica compiling.

    'llvm-utils.[ch]' is introduced in this patch for holding all
    llvm/clang related stuffs.

    Example:

    [llvm]
    # Path to clang. If omit, search it from $PATH.
    clang-path = "/path/to/clang"

    # Cmdline template. Following line shows its default value.
    # Environment variable is used to passing options.
    clang-bpf-cmd-template = "$CLANG_EXEC $CLANG_OPTIONS \
    $KERNEL_INC_OPTIONS -Wno-unused-value \
    -Wno-pointer-sign -working-directory \
    $WORKING_DIR -c $CLANG_SOURCE -target \
    bpf -O2 -o -"

    # Options passed to clang, will be passed to cmdline by
    # $CLANG_OPTIONS.
    clang-opt = "-Wno-unused-value -Wno-pointer-sign"

    # kbuild directory. If not set, use /lib/modules/`uname -r`/build.
    # If set to "" deliberately, skip kernel header auto-detector.
    kbuild-dir = "/path/to/kernel/build"

    # Options passed to 'make' when detecting kernel header options.
    kbuild-opts = "ARCH=x86_64"

    Signed-off-by: Wang Nan <wangnan0@huawei.com>
    ---
    tools/perf/util/Build | 1 +
    tools/perf/util/config.c | 4 ++++
    tools/perf/util/llvm-utils.c | 45 ++++++++++++++++++++++++++++++++++++++++++++
    tools/perf/util/llvm-utils.h | 36 +++++++++++++++++++++++++++++++++++
    4 files changed, 86 insertions(+)
    create mode 100644 tools/perf/util/llvm-utils.c
    create mode 100644 tools/perf/util/llvm-utils.h

    diff --git a/tools/perf/util/Build b/tools/perf/util/Build
    index 601d114..bc24293 100644
    --- a/tools/perf/util/Build
    +++ b/tools/perf/util/Build
    @@ -14,6 +14,7 @@ libperf-y += find_next_bit.o
    libperf-y += help.o
    libperf-y += kallsyms.o
    libperf-y += levenshtein.o
    +libperf-y += llvm-utils.o
    libperf-y += parse-options.o
    libperf-y += parse-events.o
    libperf-y += path.o
    diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
    index e18f653..2e452ac 100644
    --- a/tools/perf/util/config.c
    +++ b/tools/perf/util/config.c
    @@ -12,6 +12,7 @@
    #include "cache.h"
    #include "exec_cmd.h"
    #include "util/hist.h" /* perf_hist_config */
    +#include "util/llvm-utils.h" /* perf_llvm_config */

    #define MAXNAME (256)

    @@ -408,6 +409,9 @@ int perf_default_config(const char *var, const char *value,
    if (!prefixcmp(var, "call-graph."))
    return perf_callchain_config(var, value);

    + if (!prefixcmp(var, "llvm."))
    + return perf_llvm_config(var, value);
    +
    /* Add other config variables here. */
    return 0;
    }
    diff --git a/tools/perf/util/llvm-utils.c b/tools/perf/util/llvm-utils.c
    new file mode 100644
    index 0000000..fd5b1bc
    --- /dev/null
    +++ b/tools/perf/util/llvm-utils.c
    @@ -0,0 +1,45 @@
    +/*
    + * Copyright (C) 2015, Wang Nan <wangnan0@huawei.com>
    + * Copyright (C) 2015, Huawei Inc.
    + */
    +
    +#include <stdio.h>
    +#include "util.h"
    +#include "debug.h"
    +#include "llvm-utils.h"
    +#include "cache.h"
    +
    +#define CLANG_BPF_CMD_DEFAULT_TEMPLATE \
    + "$CLANG_EXEC $CLANG_OPTIONS $KERNEL_INC_OPTIONS " \
    + "-Wno-unused-value -Wno-pointer-sign " \
    + "-working-directory $WORKING_DIR " \
    + " -c \"$CLANG_SOURCE\" -target bpf -O2 -o -"
    +
    +struct llvm_param llvm_param = {
    + .clang_path = "clang",
    + .clang_bpf_cmd_template = CLANG_BPF_CMD_DEFAULT_TEMPLATE,
    + .clang_opt = NULL,
    + .kbuild_dir = NULL,
    + .kbuild_opts = NULL,
    +};
    +
    +int perf_llvm_config(const char *var, const char *value)
    +{
    + if (prefixcmp(var, "llvm."))
    + return 0;
    + var += sizeof("llvm.") - 1;
    +
    + if (!strcmp(var, "clang-path"))
    + llvm_param.clang_path = strdup(value);
    + else if (!strcmp(var, "clang-bpf-cmd-template"))
    + llvm_param.clang_bpf_cmd_template = strdup(value);
    + else if (!strcmp(var, "clang-opt"))
    + llvm_param.clang_opt = strdup(value);
    + else if (!strcmp(var, "kbuild-dir"))
    + llvm_param.kbuild_dir = strdup(value);
    + else if (!strcmp(var, "kbuild-opts"))
    + llvm_param.kbuild_opts = strdup(value);
    + else
    + return -1;
    + return 0;
    +}
    diff --git a/tools/perf/util/llvm-utils.h b/tools/perf/util/llvm-utils.h
    new file mode 100644
    index 0000000..504b799
    --- /dev/null
    +++ b/tools/perf/util/llvm-utils.h
    @@ -0,0 +1,36 @@
    +/*
    + * Copyright (C) 2015, Wang Nan <wangnan0@huawei.com>
    + * Copyright (C) 2015, Huawei Inc.
    + */
    +#ifndef __LLVM_UTILS_H
    +#define __LLVM_UTILS_H
    +
    +#include "debug.h"
    +
    +struct llvm_param {
    + /* Path of clang executable */
    + const char *clang_path;
    + /*
    + * Template of clang bpf compiling. 5 env variables
    + * can be used:
    + * $CLANG_EXEC: Path to clang.
    + * $CLANG_OPTIONS: Extra options to clang.
    + * $KERNEL_INC_OPTIONS: Kernel include directories.
    + * $WORKING_DIR: Kernel source directory.
    + * $CLANG_SOURCE: Source file to be compiled.
    + */
    + const char *clang_bpf_cmd_template;
    + /* Will be filled in $CLANG_OPTIONS */
    + const char *clang_opt;
    + /* Where to find kbuild system */
    + const char *kbuild_dir;
    + /*
    + * Arguments passed to make, like 'ARCH=arm' if doing cross
    + * compiling. Should not be used for dynamic compiling.
    + */
    + const char *kbuild_opts;
    +};
    +
    +extern struct llvm_param llvm_param;
    +extern int perf_llvm_config(const char *var, const char *value);
    +#endif
    --
    1.8.3.4


    \
     
     \ /
      Last update: 2015-07-08 15:21    [W:5.686 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site