summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2025-08-05 09:08:54 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2025-08-07 12:11:15 +0100
commit3f941cbcb853eaeb4385997bb1e03b2dcba0a37d (patch)
treee2239ece223e24f016fe32f13e9af4a6fdc28c52 /meta/recipes-devtools
parentf7a6163d4ffa7d7fea9318bd08e94dad647a0ae4 (diff)
downloadpoky-3f941cbcb853eaeb4385997bb1e03b2dcba0a37d.tar.gz
clang: Add packageconfig knob for opt-viewer
The optimization viewer is a web-based tool that helps developers visualize and analyze LLVM's optimization passes. It generates reports showing Which optimizations were applied to specific functions. Why certain optimizations were or weren't performed. Performance remarks and missed optimization opportunities Interactive views of the optimization pipeline. Its a nice add-on, keep it disabled by default. (From OE-Core rev: 70c43e35fb7ce0b71f28a91a1864f02338545522) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools')
-rw-r--r--meta/recipes-devtools/clang/clang/0001-llvm-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_MODULES.patch91
-rw-r--r--meta/recipes-devtools/clang/clang_git.bb3
-rw-r--r--meta/recipes-devtools/clang/common.inc1
3 files changed, 95 insertions, 0 deletions
diff --git a/meta/recipes-devtools/clang/clang/0001-llvm-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_MODULES.patch b/meta/recipes-devtools/clang/clang/0001-llvm-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_MODULES.patch
new file mode 100644
index 0000000000..4211cd2e3c
--- /dev/null
+++ b/meta/recipes-devtools/clang/clang/0001-llvm-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_MODULES.patch
@@ -0,0 +1,91 @@
1From e396fbe0e698c80e112af76fcdff8bbd61a30740 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 2 Aug 2025 17:58:20 -0700
4Subject: [PATCH] llvm: Allow users to set LLVM_HAVE_OPT_VIEWER_MODULES
5 manually from the CMake
6
7Check right before setting LLVM_HAVE_OPT_VIEWER_MODULES
8so that if the user specifies the variable on the commandline
9it takes precedence. If not, fall back to the old logic
10
11Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/151845]
12
13Signed-off-by: Khem Raj <raj.khem@gmail.com>
14---
15 llvm/CMakeLists.txt | 2 ++
16 llvm/cmake/config-ix.cmake | 13 ++++++++++---
17 llvm/tools/opt-viewer/CMakeLists.txt | 24 +++++++++++++-----------
18 3 files changed, 25 insertions(+), 14 deletions(-)
19
20diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
21index 4c70b98a32f9..60b786ca39c2 100644
22--- a/llvm/CMakeLists.txt
23+++ b/llvm/CMakeLists.txt
24@@ -7,6 +7,8 @@ set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
25 include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake
26 NO_POLICY_SCOPE)
27
28+option(LLVM_HAVE_OPT_VIEWER_MODULES "Enable opt-viewer modules support" ON)
29+
30 # Builds with custom install names and installation rpath setups may not work
31 # in the build tree. Allow these cases to use CMake's default build tree
32 # behavior by setting `LLVM_NO_INSTALL_NAME_DIR_FOR_BUILD_TREE` to do this.
33diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake
34index a8e4e5a63244..17af3dc1e93f 100644
35--- a/llvm/cmake/config-ix.cmake
36+++ b/llvm/cmake/config-ix.cmake
37@@ -805,10 +805,17 @@ foreach(module ${PYTHON_MODULES})
38 find_python_module(${module})
39 endforeach()
40
41-if(PY_PYGMENTS_FOUND AND PY_PYGMENTS_LEXERS_C_CPP_FOUND AND PY_YAML_FOUND)
42- set (LLVM_HAVE_OPT_VIEWER_MODULES 1)
43+if(NOT DEFINED LLVM_HAVE_OPT_VIEWER_MODULES)
44+ if(PY_PYGMENTS_FOUND AND PY_PYGMENTS_LEXERS_C_CPP_FOUND AND PY_YAML_FOUND)
45+ set (LLVM_HAVE_OPT_VIEWER_MODULES 1)
46+ else()
47+ set (LLVM_HAVE_OPT_VIEWER_MODULES 0)
48+ endif()
49+elseif(LLVM_HAVE_OPT_VIEWER_MODULES)
50+ # Use the user-provided value
51+ set(LLVM_HAVE_OPT_VIEWER_MODULES 1)
52 else()
53- set (LLVM_HAVE_OPT_VIEWER_MODULES 0)
54+ set(LLVM_HAVE_OPT_VIEWER_MODULES 0)
55 endif()
56
57 function(llvm_get_host_prefixes_and_suffixes)
58diff --git a/llvm/tools/opt-viewer/CMakeLists.txt b/llvm/tools/opt-viewer/CMakeLists.txt
59index 4bcf6932ee77..d231c39bcc5d 100644
60--- a/llvm/tools/opt-viewer/CMakeLists.txt
61+++ b/llvm/tools/opt-viewer/CMakeLists.txt
62@@ -6,16 +6,18 @@ set (files
63 "optrecord.py"
64 "style.css")
65
66-foreach (file ${files})
67- install(PROGRAMS ${file}
68- DESTINATION "${CMAKE_INSTALL_DATADIR}/opt-viewer"
69- COMPONENT opt-viewer)
70-endforeach (file)
71+if(LLVM_HAVE_OPT_VIEWER_MODULES)
72+ foreach (file ${files})
73+ install(PROGRAMS ${file}
74+ DESTINATION "${CMAKE_INSTALL_DATADIR}/opt-viewer"
75+ COMPONENT opt-viewer)
76+ endforeach (file)
77
78-add_custom_target(opt-viewer DEPENDS ${files})
79-set_target_properties(opt-viewer PROPERTIES FOLDER "LLVM/Tools")
80-if(NOT LLVM_ENABLE_IDE)
81- add_llvm_install_targets("install-opt-viewer"
82- DEPENDS opt-viewer
83- COMPONENT opt-viewer)
84+ add_custom_target(opt-viewer DEPENDS ${files})
85+ set_target_properties(opt-viewer PROPERTIES FOLDER "LLVM/Tools")
86+ if(NOT LLVM_ENABLE_IDE)
87+ add_llvm_install_targets("install-opt-viewer"
88+ DEPENDS opt-viewer
89+ COMPONENT opt-viewer)
90+ endif()
91 endif()
diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb
index 195a7be43b..0009a95628 100644
--- a/meta/recipes-devtools/clang/clang_git.bb
+++ b/meta/recipes-devtools/clang/clang_git.bb
@@ -59,6 +59,9 @@ PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,lib
59PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,," 59PACKAGECONFIG[libomp] = "-DCLANG_DEFAULT_OPENMP_RUNTIME=libomp,,"
60PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,," 60PACKAGECONFIG[lld] = "-DCLANG_DEFAULT_LINKER=lld,,,"
61PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils," 61PACKAGECONFIG[lto] = "-DLLVM_ENABLE_LTO=Full -DLLVM_BINUTILS_INCDIR=${STAGING_INCDIR},,binutils,"
62PACKAGECONFIG[opt-viewer] = "-DLLVM_HAVE_OPT_VIEWER_MODULES=ON,-DLLVM_HAVE_OPT_VIEWER_MODULES=OFF, \
63 python3-pyyaml-native python3-pygments-native python3-pyyaml python3-pygments, \
64 python3-pyyaml python3-pygments,"
62PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm," 65PACKAGECONFIG[pfm] = "-DLLVM_ENABLE_LIBPFM=ON,-DLLVM_ENABLE_LIBPFM=OFF,libpfm,"
63PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,," 66PACKAGECONFIG[rtti] = "-DLLVM_ENABLE_RTTI=ON,-DLLVM_ENABLE_RTTI=OFF,,"
64PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,," 67PACKAGECONFIG[shared-libs] = "-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON,,,"
diff --git a/meta/recipes-devtools/clang/common.inc b/meta/recipes-devtools/clang/common.inc
index b2e08f829b..fb96d0679c 100644
--- a/meta/recipes-devtools/clang/common.inc
+++ b/meta/recipes-devtools/clang/common.inc
@@ -61,6 +61,7 @@ SRC_URI = "\
61 file://0038-compiler-rt-Hardcode-uptr-sptr-typedefs-on-Mips-Linu.patch \ 61 file://0038-compiler-rt-Hardcode-uptr-sptr-typedefs-on-Mips-Linu.patch \
62 file://0001-libclc-allow-existing-prepare-builtins-in-standalone.patch \ 62 file://0001-libclc-allow-existing-prepare-builtins-in-standalone.patch \
63 file://no-c-index-test.patch \ 63 file://no-c-index-test.patch \
64 file://0001-llvm-Allow-users-to-set-LLVM_HAVE_OPT_VIEWER_MODULES.patch \
64" 65"
65# Fallback to no-PIE if not set 66# Fallback to no-PIE if not set
66GCCPIE ??= "" 67GCCPIE ??= ""