1--- a/llvm/lib/Support/Host.cpp 2+++ b/llvm/lib/Support/Host.cpp 3@@ -518,7 +518,7 @@ static bool isCpuIdSupported() { 4 static bool getX86CpuIDAndInfo(unsigned value, unsigned *rEAX, unsigned *rEBX, 5 unsigned *rECX, unsigned *rEDX) { 6 #if defined(__GNUC__) || defined(__clang__) 7-#if defined(__x86_64__) 8+#if defined(__x86_64__) && !defined(IS_WASM) 9 // gcc doesn't know cpuid would clobber ebx/rbx. Preserve it manually. 10 // FIXME: should we save this for Clang? 11 __asm__("movq\t%%rbx, %%rsi\n\t" 12@@ -594,7 +594,7 @@ static bool getX86CpuIDAndInfoEx(unsigned value, unsigned subleaf, 13 unsigned *rEAX, unsigned *rEBX, unsigned *rECX, 14 unsigned *rEDX) { 15 #if defined(__GNUC__) || defined(__clang__) 16-#if defined(__x86_64__) 17+#if defined(__x86_64__) && !defined(IS_WASM) 18 // gcc doesn't know cpuid would clobber ebx/rbx. Preserve it manually. 19 // FIXME: should we save this for Clang? 20 __asm__("movq\t%%rbx, %%rsi\n\t" 21@@ -628,7 +628,7 @@ static bool getX86CpuIDAndInfoEx(unsigned value, unsigned subleaf, 22 23 // Read control register 0 (XCR0). Used to detect features such as AVX. 24 static bool getX86XCR0(unsigned *rEAX, unsigned *rEDX) { 25-#if defined(__GNUC__) || defined(__clang__) 26+#if (defined(__GNUC__) || defined(__clang__)) && !defined(IS_WASM) 27 // Check xgetbv; this uses a .byte sequence instead of the instruction 28 // directly because older assemblers do not include support for xgetbv and 29 // there is no easy way to conditionally compile based on the assembler used. 30diff --git a/llvm/utils/gn/build/buildflags.gni b/llvm/utils/gn/build/buildflags.gni 31index ca43a2499edc..bea51ce38990 100644 32--- a/llvm/utils/gn/build/buildflags.gni 33+++ b/llvm/utils/gn/build/buildflags.gni 34@@ -1,6 +1,8 @@ 35 declare_args() { 36 # Build for debugging. Equivalent to is_optimized=false symbol_level=2. 37- is_debug = false 38+ if (!build_llvm_with_ts) { 39+ is_debug = false 40+ } 41 42 # Whether to build with tsan. 43 use_tsan = false 44diff --git a/llvm/utils/gn/build/compiled_action.gni b/llvm/utils/gn/build/compiled_action.gni 45index 697fe3de2a9e..ad3d177edaf7 100644 46--- a/llvm/utils/gn/build/compiled_action.gni 47+++ b/llvm/utils/gn/build/compiled_action.gni 48@@ -64,8 +64,13 @@ template("compiled_action") { 49 "visibility", 50 ]) 51 host_tool = invoker.tool + "($host_toolchain)" 52- host_executable = get_label_info(host_tool, "root_out_dir") + 53- "/bin/" + get_label_info(host_tool, "name") 54+ if (build_llvm_with_ts) { 55+ host_executable = get_label_info(host_tool, "root_out_dir") + 56+ "/" + get_label_info(host_tool, "name") 57+ } else { 58+ host_executable = get_label_info(host_tool, "root_out_dir") + 59+ "/bin/" + get_label_info(host_tool, "name") 60+ } 61 deps = [ host_tool ] 62 script = "//llvm/utils/gn/build/run_built_binary.py" 63 args = [ rebase_path(host_executable, root_build_dir) ] + invoker.args 64diff --git a/llvm/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn b/llvm/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn 65index 897364f00741..b540838dd3b2 100644 66--- a/llvm/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn 67+++ b/llvm/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn 68@@ -50,7 +50,11 @@ declare_args() { 69 70 # glibc is at least 2.33 which has mallinfo2. 71 # TODO: remove this once nobody using the gn build is building against an old glibc. 72- llvm_have_mallinfo2 = current_os == "linux" 73+ if (build_llvm_with_ts) { 74+ llvm_have_mallinfo2 = false 75+ } else { 76+ llvm_have_mallinfo2 = current_os == "linux" 77+ } 78 } 79 80 write_cmake_config("abi-breaking") { 81@@ -169,7 +173,8 @@ write_cmake_config("config") { 82 values += [ 83 "HAVE_CRASHREPORTER_INFO=", 84 "HAVE_DECL_ARC4RANDOM=", 85- "HAVE_DLADDR=", 86+ # set HAVE_DLADDR to avoid compile error on wasm build 87+ "HAVE_DLADDR=1", 88 "HAVE_MACH_MACH_H=", 89 "HAVE_MALLOC_MALLOC_H=", 90 "HAVE_MALLOC_ZONE_STATISTICS=", 91@@ -180,8 +185,16 @@ write_cmake_config("config") { 92 } 93 94 if (current_os == "linux" || current_os == "mac") { 95+ if (build_llvm_with_ts) { 96+ values += [ 97+ "HAVE_BACKTRACE=", 98+ ] 99+ } else { 100+ values += [ 101+ "HAVE_BACKTRACE=1", 102+ ] 103+ } 104 values += [ 105- "HAVE_BACKTRACE=1", 106 "HAVE_POSIX_SPAWN=1", 107 "HAVE_PTHREAD_GETNAME_NP=1", 108 ] 109@@ -259,7 +272,17 @@ write_cmake_config("config") { 110 "HAVE_SBRK=1", 111 "HAVE_SETENV=1", 112 "HAVE_SETRLIMIT=1", 113- "HAVE_SIGALTSTACK=1", 114+ ] 115+ if (build_llvm_with_ts) { 116+ values += [ 117+ "HAVE_SIGALTSTACK=", 118+ ] 119+ } else { 120+ values += [ 121+ "HAVE_SIGALTSTACK=1", 122+ ] 123+ } 124+ values += [ 125 "HAVE_STRERROR_R=1", 126 "HAVE_SYSCONF=1", 127 "HAVE_SYS_IOCTL_H=1", 128diff --git a/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn 129index 56d5b2ce7dc3..827184b7a5e0 100644 130--- a/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn 131+++ b/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn 132@@ -1,13 +1,21 @@ 133 static_library("Support") { 134 output_name = "LLVMSupport" 135- deps = [ 136- "BLAKE3", 137- "//llvm/include/llvm/Config:config", 138- "//llvm/lib/Demangle", 139- "//llvm/utils/gn/build/libs/pthread", 140- "//llvm/utils/gn/build/libs/terminfo", 141- "//llvm/utils/gn/build/libs/zlib", 142- ] 143+ if (build_llvm_with_ts) { 144+ deps = [ 145+ "//llvm/include/llvm/Config:config", 146+ "//llvm/lib/Demangle", 147+ "//third_party/zlib:libz", 148+ ] 149+ } else { 150+ deps = [ 151+ "BLAKE3", 152+ "//llvm/include/llvm/Config:config", 153+ "//llvm/lib/Demangle", 154+ "//llvm/utils/gn/build/libs/pthread", 155+ "//llvm/utils/gn/build/libs/terminfo", 156+ "//llvm/utils/gn/build/libs/zlib", 157+ ] 158+ } 159 160 # public_deps are used for depending on targets that generate headers 161 # which are included in public headers of this target. public_deps means 162@@ -193,7 +201,10 @@ static_library("Support") { 163 libs += [ "dl" ] 164 } else if (current_os == "win") { 165 # Delay load shell32.dll if possible to speed up process startup. 166- libs += [ "delayimp.lib" ] 167+ # avoid link error if build with smartperf 168+ if (!build_llvm_with_ts) { 169+ libs += [ "delayimp.lib" ] 170+ } 171 ldflags = [ 172 "-delayload:ole32.dll", 173 "-delayload:shell32.dll", 174-- 1752.25.1 176 177