<div dir="ltr"><div>Something's up with the llvm-exegesis build process on 7.0.0 
release. On my x86 machines they always complain "no exegesis target for
 x86_64-pc-linux-gnu, using default", and this seems to be because 
LLVM_EXEGESIS_INITIALIZE_NATIVE_TARGET never gets set by CMake.<br></div><div><br></div><div>The
 CMake scripts try to set LLVM_EXEGESIS_TARGETS in the lib subdirectory,
 but this doesn't seem to work properly. I made this change to figure 
out what's happening:</div><div><br></div><div>---</div><div><br></div><div>diff --git a/tools/llvm-exegesis/CMakeLists.txt b/tools/llvm-exegesis/CMakeLists.txt<br>index 65b1ada8529..94842519ca7 100644<br>--- a/tools/llvm-exegesis/CMakeLists.txt<br>+++ b/tools/llvm-exegesis/CMakeLists.txt<br>@@ -8,7 +8,9 @@ add_llvm_tool(llvm-exegesis<br>   llvm-exegesis.cpp<br>   )<br> <br>+message(WARNING "LLVM_EXEGESIS_TARGETS at parent scope before: ${LLVM_EXEGESIS_TARGETS}")<br> add_subdirectory(lib)<br>+message(FATAL_ERROR "LLVM_EXEGESIS_TARGETS at parent scope after: ${LLVM_EXEGESIS_TARGETS}")<br> <br> # Link the native exegesis target if compiled and on the right host.<br> if ((LLVM_TARGETS_TO_BUILD MATCHES "${LLVM_NATIVE_ARCH}") AND (LLVM_EXEGESIS_TARGETS MATCHES "${LLVM_NATIVE_ARCH}"))<br>diff --git a/tools/llvm-exegesis/lib/CMakeLists.txt b/tools/llvm-exegesis/lib/CMakeLists.txt<br>index 175c2adf9de..4dc91ef125c 100644<br>--- a/tools/llvm-exegesis/lib/CMakeLists.txt<br>+++ b/tools/llvm-exegesis/lib/CMakeLists.txt<br>@@ -1,12 +1,18 @@<br>+message( WARNING "LLVM_EXEGESIS_TARGETS before: ${LLVM_EXEGESIS_TARGETS}" )<br>+<br> if (LLVM_TARGETS_TO_BUILD MATCHES "X86")<br>   add_subdirectory(X86)<br>+  message( WARNING "Appending X86" )<br>   set(LLVM_EXEGESIS_TARGETS "${LLVM_EXEGESIS_TARGETS} X86" PARENT_SCOPE)<br> endif()<br> if (LLVM_TARGETS_TO_BUILD MATCHES "AArch64")<br>   add_subdirectory(AArch64)<br>+  message( WARNING "Appending AArch64" )<br>   set(LLVM_EXEGESIS_TARGETS "${LLVM_EXEGESIS_TARGETS} AArch64" PARENT_SCOPE)<br> endif()<br> <br>+message( WARNING "LLVM_EXEGESIS_TARGETS after: ${LLVM_EXEGESIS_TARGETS}" )<br>+<br> add_library(LLVMExegesis<br>   STATIC<br>   Analysis.cpp</div><div><br></div><div>---</div><div><br></div><div>This results in this behavior (extraneous newlines removed for readability):</div><div><br></div><div>CMake Warning at tools/llvm-exegesis/CMakeLists.txt:11 (message):<br>  LLVM_EXEGESIS_TARGETS at parent scope before:<br>CMake Warning at tools/llvm-exegesis/lib/CMakeLists.txt:1 (message):<br>  LLVM_EXEGESIS_TARGETS before:<br>CMake Warning at tools/llvm-exegesis/lib/CMakeLists.txt:5 (message):<br>  Appending X86<br>CMake Warning at tools/llvm-exegesis/lib/CMakeLists.txt:10 (message):<br>  Appending AArch64<br>CMake Warning at tools/llvm-exegesis/lib/CMakeLists.txt:14 (message):<br>  LLVM_EXEGESIS_TARGETS after:<br>CMake Error at tools/llvm-exegesis/CMakeLists.txt:13 (message):<br>  LLVM_EXEGESIS_TARGETS at parent scope after: AArch64<br></div><div><br></div><div>So
 reading the LLVM_EXEGESIS_TARGETS variable in lib/CMakeLists.txt 
doesn't work properly, and the second set(... PARENT_SCOPE) just sees 
the empty LLVM_EXEGESIS_TARGETS value, overwriting the previously 
appended X86 value.</div><div><br></div><div>Any ideas on how to fix this? I'm doing this locally but it seems sloppy:</div><div><br></div><div>diff --git a/tools/llvm-exegesis/lib/CMakeLists.txt b/tools/llvm-exegesis/lib/CMakeLists.txt<br>index 175c2adf9de..194304adf98 100644<br>--- a/tools/llvm-exegesis/lib/CMakeLists.txt<br>+++ b/tools/llvm-exegesis/lib/CMakeLists.txt<br>@@ -1,12 +1,16 @@<br>+set(TARGETS_TO_APPEND "")<br>+<br> if (LLVM_TARGETS_TO_BUILD MATCHES "X86")<br>   add_subdirectory(X86)<br>-  set(LLVM_EXEGESIS_TARGETS "${LLVM_EXEGESIS_TARGETS} X86" PARENT_SCOPE)<br>+  set(TARGETS_TO_APPEND "${TARGETS_TO_APPEND} X86")<br> endif()<br> if (LLVM_TARGETS_TO_BUILD MATCHES "AArch64")<br>   add_subdirectory(AArch64)<br>-  set(LLVM_EXEGESIS_TARGETS "${LLVM_EXEGESIS_TARGETS} AArch64" PARENT_SCOPE)<br>+  set(TARGETS_TO_APPEND "${TARGETS_TO_APPEND} AArch64")<br> endif()<br> <br>+set(LLVM_EXEGESIS_TARGETS "${LLVM_EXEGESIS_TARGETS} ${TARGETS_TO_APPEND}" PARENT_SCOPE)<br>+<br> add_library(LLVMExegesis<br>   STATIC<br>   Analysis.cpp</div></div>