@@ -31,63 +31,124 @@ if (NOT WIT_BINDGEN_EXECUTABLE)
3131 ExternalProject_Get_Property(wit-bindgen SOURCE_DIR)
3232 set (wit_bindgen "${SOURCE_DIR} /wit-bindgen" )
3333else ()
34+ add_custom_target (wit-bindgen)
3435 set (wit_bindgen ${WIT_BINDGEN_EXECUTABLE} )
3536endif ()
3637
3738include (ExternalProject)
39+ set (p2 0.2.0)
3840ExternalProject_Add(
39- wasi -wits
40- URL https://github.com/WebAssembly/wasi-cli/archive/refs/tags/v0.2.0 .tar.gz
41+ wasip2 -wits
42+ URL https://github.com/WebAssembly/wasi-cli/archive/refs/tags/v ${p2} .tar.gz
4143 CONFIGURE_COMMAND ""
4244 BUILD_COMMAND ""
4345 INSTALL_COMMAND ""
4446 EXCLUDE_FROM_ALL TRUE
4547)
46- ExternalProject_Get_Property(wasi -wits SOURCE_DIR)
47- set (wit_dir ${SOURCE_DIR} /wit)
48+ ExternalProject_Get_Property(wasip2 -wits SOURCE_DIR)
49+ set (wasip2_wit_dir ${SOURCE_DIR} /wit)
4850set (bottom_half "${CMAKE_SOURCE_DIR} /libc-bottom-half" )
4951
5052add_custom_target (
51- bindings
53+ bindings-p2
5254 COMMAND
5355 ${wit_bindgen} c
5456 --autodrop-borrows yes
5557 --rename -world wasip2
5658 --type -section-suffix __wasi_libc
57- --world wasi:cli/imports@0.2.0
58- --rename wasi:clocks/monotonic-clock@0.2.0 =monotonic_clock
59- --rename wasi:clocks/wall-clock@0.2.0 =wall_clock
60- --rename wasi:filesystem/preopens@0.2.0 =filesystem_preopens
61- --rename wasi:filesystem/types@0.2.0 =filesystem
62- --rename wasi:io/error@0.2.0 =io_error
63- --rename wasi:io/poll@0.2.0 =poll
64- --rename wasi:io/streams@0.2.0 =streams
65- --rename wasi:random/insecure-seed@0.2.0 =random_insecure_seed
66- --rename wasi:random/insecure@0.2.0 =random_insecure
67- --rename wasi:random/random@0.2.0 =random
68- --rename wasi:sockets/instance-network@0.2.0 =instance_network
69- --rename wasi:sockets/ip-name -lookup@0.2.0 =ip_name_lookup
70- --rename wasi:sockets/network@0.2.0 =network
71- --rename wasi:sockets/tcp-create-socket@0.2.0 =tcp_create_socket
72- --rename wasi:sockets/tcp@0.2.0 =tcp
73- --rename wasi:sockets/udp-create-socket@0.2.0 =udp_create_socket
74- --rename wasi:sockets/udp@0.2.0 =udp
75- --rename wasi:cli/environment @0.2.0 =environment
76- --rename wasi:cli/exit@0.2.0 =exit
77- --rename wasi:cli/stdin@0.2.0 =stdin
78- --rename wasi:cli/stdout@0.2.0 =stdout
79- --rename wasi:cli/stderr@0.2.0 =stderr
80- --rename wasi:cli/terminal-input @0.2.0 =terminal_input
81- --rename wasi:cli/terminal-output @0.2.0 =terminal_output
82- --rename wasi:cli/terminal-stdin@0.2.0 =terminal_stdin
83- --rename wasi:cli/terminal-stdout@0.2.0 =terminal_stdout
84- --rename wasi:cli/terminal-stderr@0.2.0 =terminal_stderr
85- ${wit_dir }
86- COMMAND cmake -E copy wasip2.h ${bottom_half} /headers/public /wasi/
59+ --world wasi:cli/imports@${p2}
60+ --rename wasi:clocks/monotonic-clock@${p2} =monotonic_clock
61+ --rename wasi:clocks/wall-clock@${p2} =wall_clock
62+ --rename wasi:filesystem/preopens@${p2} =filesystem_preopens
63+ --rename wasi:filesystem/types@${p2} =filesystem
64+ --rename wasi:io/error@${p2} =io_error
65+ --rename wasi:io/poll@${p2} =poll
66+ --rename wasi:io/streams@${p2} =streams
67+ --rename wasi:random/insecure-seed@${p2} =random_insecure_seed
68+ --rename wasi:random/insecure@${p2} =random_insecure
69+ --rename wasi:random/random@${p2} =random
70+ --rename wasi:sockets/instance-network@${p2} =instance_network
71+ --rename wasi:sockets/ip-name -lookup@${p2} =ip_name_lookup
72+ --rename wasi:sockets/network@${p2} =network
73+ --rename wasi:sockets/tcp-create-socket@${p2} =tcp_create_socket
74+ --rename wasi:sockets/tcp@${p2} =tcp
75+ --rename wasi:sockets/udp-create-socket@${p2} =udp_create_socket
76+ --rename wasi:sockets/udp@${p2} =udp
77+ --rename wasi:cli/environment @${p2} =environment
78+ --rename wasi:cli/exit@${p2} =exit
79+ --rename wasi:cli/stdin@${p2} =stdin
80+ --rename wasi:cli/stdout@${p2} =stdout
81+ --rename wasi:cli/stderr@${p2} =stderr
82+ --rename wasi:cli/terminal-input @${p2} =terminal_input
83+ --rename wasi:cli/terminal-output @${p2} =terminal_output
84+ --rename wasi:cli/terminal-stdin@${p2} =terminal_stdin
85+ --rename wasi:cli/terminal-stdout@${p2} =terminal_stdout
86+ --rename wasi:cli/terminal-stderr@${p2} =terminal_stderr
87+ ${wasip2_wit_dir }
88+ COMMAND cmake -E copy wasip2.h ${bottom_half} /headers/public /wasi/__generated_wasip2.h
8789 COMMAND cmake -E copy wasip2_component_type.o ${bottom_half} /sources
8890 COMMAND cmake -E copy wasip2.c ${bottom_half} /sources
89- COMMAND sed -i "'s_#include .wasip2\. h._#include \" wasi/wasip2.h\" _'" ${bottom_half} /sources /wasip2.c
90- COMMAND sed -i "s/extern void exit_exit/_Noreturn extern void exit_exit/" ${bottom_half} /headers/public /wasi/wasip2.h
91- COMMAND sed -i "s/extern void __wasm_import_exit_exit/_Noreturn extern void __wasm_import_exit_exit/" ${bottom_half} /sources /wasip2.c
92- DEPENDS wit-bindgen wasi-wits
91+ DEPENDS wit-bindgen wasip2-wits
9392)
93+
94+ set (p3 0.3.0-rc-2025-09-16)
95+ ExternalProject_Add(
96+ wasip3-wits
97+ URL https://github.com/WebAssembly/wasi-cli/archive/refs/tags/v${p3} .tar.gz
98+ CONFIGURE_COMMAND ""
99+ BUILD_COMMAND ""
100+ INSTALL_COMMAND ""
101+ EXCLUDE_FROM_ALL TRUE
102+ )
103+ ExternalProject_Get_Property(wasip3-wits SOURCE_DIR)
104+ set (wasip3_wit_dir ${SOURCE_DIR} /wit-0.3.0-draft)
105+
106+ add_custom_target (
107+ bindings-p3
108+ COMMAND
109+ ${wit_bindgen} c
110+ --autodrop-borrows yes
111+ --rename -world wasip3
112+ --type -section-suffix __wasi_libc
113+ --world wasi:cli/imports@${p3}
114+ --rename wasi:clocks/monotonic-clock@${p3} =monotonic_clock
115+ --rename wasi:clocks/wall-clock@${p3} =wall_clock
116+ --rename wasi:filesystem/preopens@${p3} =filesystem_preopens
117+ --rename wasi:filesystem/types@${p3} =filesystem
118+ --rename wasi:random/insecure-seed@${p3} =random_insecure_seed
119+ --rename wasi:random/insecure@${p3} =random_insecure
120+ --rename wasi:random/random@${p3} =random
121+ --rename wasi:sockets/types@${p3} =sockets
122+ --rename wasi:sockets/ip-name -lookup@${p3} =ip_name_lookup
123+ --rename wasi:cli/environment @${p3} =environment
124+ --rename wasi:cli/exit@${p3} =exit
125+ --rename wasi:cli/stdin@${p3} =stdin
126+ --rename wasi:cli/stdout@${p3} =stdout
127+ --rename wasi:cli/stderr@${p3} =stderr
128+ --rename wasi:cli/terminal-input @${p3} =terminal_input
129+ --rename wasi:cli/terminal-output @${p3} =terminal_output
130+ --rename wasi:cli/terminal-stdin@${p3} =terminal_stdin
131+ --rename wasi:cli/terminal-stdout@${p3} =terminal_stdout
132+ --rename wasi:cli/terminal-stderr@${p3} =terminal_stderr
133+ ${wasip3_wit_dir}
134+ COMMAND cmake -E copy wasip3.h ${bottom_half} /headers/public /wasi/__generated_wasip3.h
135+ COMMAND cmake -E copy wasip3_component_type.o ${bottom_half} /sources
136+ COMMAND cmake -E copy wasip3.c ${bottom_half} /sources
137+ DEPENDS wit-bindgen wasip3-wits
138+ )
139+
140+ add_custom_target (bindings DEPENDS bindings-p2 bindings-p3)
141+
142+ function (wit_bindgen_edit p)
143+ add_custom_target (
144+ bindings-${p} -edit
145+ COMMAND sed -i "" "'s_#include .wasi${p} \. h._#include \" wasi/wasi${p} .h\" _'" ${bottom_half} /sources /wasi${p} .c
146+ COMMAND sed -i "" "s/extern void exit_exit/_Noreturn extern void exit_exit/" ${bottom_half} /headers/public /wasi/__generated_wasi${p} .h
147+ COMMAND sed -i "" "s/extern void __wasm_import_exit_exit/_Noreturn extern void __wasm_import_exit_exit/" ${bottom_half} /sources /wasi${p} .c
148+ DEPENDS bindings-${p}
149+ )
150+ add_dependencies (bindings bindings-${p} -edit)
151+ endfunction ()
152+
153+ wit_bindgen_edit(p2)
154+ wit_bindgen_edit(p3)
0 commit comments