• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015, Wang Nan <wangnan0@huawei.com>
3  * Copyright (C) 2015, Huawei Inc.
4  */
5 #ifndef __LLVM_UTILS_H
6 #define __LLVM_UTILS_H
7 
8 #include "debug.h"
9 
10 struct llvm_param {
11 	/* Path of clang executable */
12 	const char *clang_path;
13 	/*
14 	 * Template of clang bpf compiling. 5 env variables
15 	 * can be used:
16 	 *   $CLANG_EXEC:		Path to clang.
17 	 *   $CLANG_OPTIONS:		Extra options to clang.
18 	 *   $KERNEL_INC_OPTIONS:	Kernel include directories.
19 	 *   $WORKING_DIR:		Kernel source directory.
20 	 *   $CLANG_SOURCE:		Source file to be compiled.
21 	 */
22 	const char *clang_bpf_cmd_template;
23 	/* Will be filled in $CLANG_OPTIONS */
24 	const char *clang_opt;
25 	/* Where to find kbuild system */
26 	const char *kbuild_dir;
27 	/*
28 	 * Arguments passed to make, like 'ARCH=arm' if doing cross
29 	 * compiling. Should not be used for dynamic compiling.
30 	 */
31 	const char *kbuild_opts;
32 	/*
33 	 * Default is false. If one of the above fields is set by user
34 	 * explicitly then user_set_llvm is set to true. This is used
35 	 * for perf test. If user doesn't set anything in .perfconfig
36 	 * and clang is not found, don't trigger llvm test.
37 	 */
38 	bool user_set_param;
39 };
40 
41 extern struct llvm_param llvm_param;
42 extern int perf_llvm_config(const char *var, const char *value);
43 
44 extern int llvm__compile_bpf(const char *path, void **p_obj_buf,
45 			     size_t *p_obj_buf_sz);
46 
47 /* This function is for test__llvm() use only */
48 extern int llvm__search_clang(void);
49 #endif
50