• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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