@@ -12,13 +12,18 @@ option(WASI_SDK_INCLUDE_TESTS "Whether or not to build tests by default" OFF)
12
12
13
13
set (wasi_tmp_install ${CMAKE_CURRENT_BINARY_DIR} /install )
14
14
set (wasi_sysroot ${wasi_tmp_install} /share/wasi-sysroot )
15
+ set (wasi_resource_dir ${wasi_tmp_install} /lib/clang/${clang_version} )
16
+
17
+ # Force usage of the custom-built resource-dir and sysroot for the rest of the
18
+ # wasi compiles.
19
+ add_compile_options (-resource-dir ${wasi_resource_dir} )
20
+ add_compile_options (--sysroot ${wasi_sysroot} )
15
21
16
22
if (WASI_SDK_DEBUG_PREFIX_MAP )
17
23
add_compile_options (
18
24
-fdebug-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}=wasisdk://v${wasi_sdk_version} )
19
25
endif ()
20
26
21
-
22
27
# Default arguments for builds of cmake projects (mostly LLVM-based) to forward
23
28
# along much of our own configuration into these projects.
24
29
set (default_cmake_args
@@ -45,7 +50,6 @@ endif()
45
50
# compiler-rt build logic
46
51
# =============================================================================
47
52
48
- set (compiler_rt_dst ${wasi_tmp_install} /lib/clang/${clang_version} )
49
53
ExternalProject_Add (compiler-rt-build
50
54
SOURCE_DIR "${llvm_proj_dir} /compiler-rt"
51
55
CMAKE_ARGS
@@ -58,7 +62,7 @@ ExternalProject_Add(compiler-rt-build
58
62
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
59
63
-DCMAKE_C_COMPILER_TARGET=wasm32-wasi
60
64
-DCOMPILER_RT_OS_DIR=wasi
61
- -DCMAKE_INSTALL_PREFIX=${compiler_rt_dst }
65
+ -DCMAKE_INSTALL_PREFIX=${wasi_resource_dir }
62
66
EXCLUDE_FROM_ALL ON
63
67
USES_TERMINAL_CONFIGURE ON
64
68
USES_TERMINAL_BUILD ON
@@ -69,26 +73,30 @@ ExternalProject_Add(compiler-rt-build
69
73
# around some headers and make copies of the `wasi` directory as `wasip1` and
70
74
# `wasip2`
71
75
execute_process (
72
- COMMAND ${CMAKE_C_COMPILER} -print-runtime -dir
73
- OUTPUT_VARIABLE clang_runtime_dir
76
+ COMMAND ${CMAKE_C_COMPILER} -print-resource -dir
77
+ OUTPUT_VARIABLE clang_resource_dir
74
78
OUTPUT_STRIP_TRAILING_WHITESPACE )
75
- cmake_path (GET clang_runtime_dir PARENT_PATH clang_runtime_libdir ) # chop off `wasi`
76
- cmake_path (GET clang_runtime_libdir PARENT_PATH clang_sysroot_dir ) # chop off `lib`
77
79
add_custom_target (compiler-rt-post-build
80
+ # The `${wasi_resource_dir}` folder is going to get used as `-resource-dir`
81
+ # for future compiles. Copy the host compiler's own headers into this
82
+ # directory to ensure that all host-defined headers all work as well.
78
83
COMMAND ${CMAKE_COMMAND} -E copy_directory
79
- ${clang_sysroot_dir} ${compiler_rt_dst}
84
+ ${clang_resource_dir} /include ${wasi_resource_dir} /include
85
+
86
+ # Copy the `lib/wasi` folder to `libc/wasi{p1,p2}` to ensure that those
87
+ # OS-strings also work for looking up the compiler-rt.a file.
80
88
COMMAND ${CMAKE_COMMAND} -E copy_directory
81
- ${compiler_rt_dst } /lib/wasi ${compiler_rt_dst } /lib/wasip1
89
+ ${wasi_resource_dir } /lib/wasi ${wasi_resource_dir } /lib/wasip1
82
90
COMMAND ${CMAKE_COMMAND} -E copy_directory
83
- ${compiler_rt_dst} /lib/wasi ${compiler_rt_dst} /lib/wasip2
84
- COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different
85
- ${compiler_rt_dst} /lib ${clang_runtime_libdir}
91
+ ${wasi_resource_dir} /lib/wasi ${wasi_resource_dir} /lib/wasip2
92
+
86
93
COMMENT "finalizing compiler-rt installation"
87
94
)
88
95
add_dependencies (compiler-rt-post-build compiler-rt-build )
89
96
90
97
add_custom_target (compiler-rt DEPENDS compiler-rt-build compiler-rt-post-build )
91
98
99
+
92
100
# =============================================================================
93
101
# wasi-libc build logic
94
102
# =============================================================================
0 commit comments