@ -21,8 +21,10 @@ message(STATUS "Found executable for `ar`: ${CMAKE_AR}")
find_program ( MAKE make REQUIRED )
set ( EXCEPTIONS_DEFAULT "OFF" )
set ( COOP_THREADS_POSSIBLE OFF )
if ( CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 23.0.0 )
set ( EXCEPTIONS_DEFAULT "DUAL" )
set ( COOP_THREADS_POSSIBLE ON )
endif ( )
option ( WASI_SDK_DEBUG_PREFIX_MAP "Pass `-fdebug-prefix-map` for built artifacts" ON )
@ -45,6 +47,7 @@ endif()
set ( wasi_tmp_install ${ CMAKE_CURRENT_BINARY_DIR } /install )
set ( wasi_sysroot ${ wasi_tmp_install } /share/wasi-sysroot )
set ( coop_threads_sysroot ${ wasi_sysroot } /experimental-coop-threads )
set ( wasi_resource_dir ${ wasi_tmp_install } /wasi-resource-dir )
if ( WASI_SDK_DEBUG_PREFIX_MAP )
@ -64,7 +67,6 @@ set(default_cmake_args
- D C M A K E _ C X X _ C O M P I L E R = $ { C M A K E _ C X X _ C O M P I L E R }
- D C M A K E _ C _ C O M P I L E R _ W O R K S = O N
- D C M A K E _ C X X _ C O M P I L E R _ W O R K S = O N
- D C M A K E _ S Y S R O O T = $ { w a s i _ s y s r o o t }
- D C M A K E _ M O D U L E _ P A T H = $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e
# C M a k e d e t e c t s t h i s b a s e d o n ` C M A K E _ C _ C O M P I L E R ` a l o n e a n d w h e n t h a t c o m p i l e r
# i s j u s t a b a r e " c l a n g " i n s t a l l a t i o n t h e n i t c a n m i s t a k e n l y d e d u c e t h a t t h i s
@ -109,6 +111,7 @@ function(define_compiler_rt target)
- D C M A K E _ C X X _ F L A G S = $ { W A S I _ S D K _ C P U _ C F L A G S }
- D C M A K E _ A S M _ F L A G S = $ { W A S I _ S D K _ C P U _ C F L A G S }
- D C M A K E _ I N S T A L L _ P R E F I X = $ { w a s i _ r e s o u r c e _ d i r }
- D C M A K E _ S Y S R O O T = $ { w a s i _ s y s r o o t }
E X C L U D E _ F R O M _ A L L O N
U S E S _ T E R M I N A L _ C O N F I G U R E O N
U S E S _ T E R M I N A L _ B U I L D O N
@ -165,7 +168,7 @@ add_custom_target(compiler-rt DEPENDS compiler-rt-build compiler-rt-post-build)
# w a s i - l i b c b u i l d l o g i c
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
function ( define_wasi_libc_sub target target_suffix lto )
function ( define_wasi_libc_sub sysroot target target_suffix lto )
string ( TOUPPER ${ CMAKE_BUILD_TYPE } CMAKE_BUILD_TYPE_UPPER )
get_property ( directory_cflags DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } PROPERTY COMPILE_OPTIONS )
set ( extra_cflags_list "${WASI_SDK_CPU_CFLAGS} ${CMAKE_C_FLAGS} ${directory_cflags}" )
@ -205,34 +208,45 @@ function(define_wasi_libc_sub target target_suffix lto)
list ( APPEND extra_cmake_args -DBUILD_SHARED=OFF )
endif ( )
if ( ${ sysroot } STREQUAL ${ coop_threads_sysroot } )
list ( APPEND extra_cmake_args -DENABLE_COOP_THREADS=ON )
endif ( )
ExternalProject_Add ( wasi-libc- ${ target } ${ target_suffix } -build
S O U R C E _ D I R $ { w a s i _ l i b c }
C M A K E _ A R G S
$ { d e f a u l t _ c m a k e _ a r g s }
$ { e x t r a _ c m a k e _ a r g s }
- D T A R G E T _ T R I P L E = $ { t a r g e t }
- D C M A K E _ I N S T A L L _ P R E F I X = $ { wa s i _ sy s r o o t }
- D C M A K E _ I N S T A L L _ P R E F I X = $ { sy s r o o t }
- D C M A K E _ C _ F L A G S = $ { e x t r a _ c f l a g s }
- D C M A K E _ A S M _ F L A G S = $ { e x t r a _ c f l a g s }
- D B U I L T I N S _ L I B = $ { l i b c o m p i l e r _ r t _ a }
- D U S E _ W A S M _ C O M P O N E N T _ L D = O F F
- D W A S I _ S D K _ V E R S I O N = $ { w a s i _ s d k _ v e r s i o n }
- D C M A K E _ S Y S R O O T = $ { s y s r o o t }
D E P E N D S c o m p i l e r - r t
E X C L U D E _ F R O M _ A L L O N
U S E S _ T E R M I N A L _ C O N F I G U R E O N
U S E S _ T E R M I N A L _ B U I L D O N
U S E S _ T E R M I N A L _ I N S T A L L O N
)
add_dependencies ( wasi-libc- ${ target } wasi-libc- ${ target } ${ target_suffix } -build )
endfunction ( )
function ( define_wasi_libc target )
define_wasi_libc_sub ( ${ target } "" OFF )
add_custom_target ( wasi-libc- ${ target } )
define_wasi_libc_sub ( ${ wasi_sysroot } ${ target } "" OFF )
if ( WASI_SDK_LTO )
define_wasi_libc_sub ( ${ target } "-lto" ON )
define_wasi_libc_sub ( ${ wasi_sysroot } ${ target } "-lto" ON )
endif ( )
add_custom_target ( wasi-libc- ${ target }
D E P E N D S w a s i - l i b c - $ { t a r g e t } - b u i l d $ < $ < B O O L : $ { W A S I _ S D K _ L T O } > : w a s i - l i b c - $ { t a r g e t } - l t o - b u i l d > )
# T e m p o r a r y w a s i p 3 e x p e r i m e n t a l c o o p t h r e a d s s y s r o o t b e f o r e i t ' s e n a b l e d b y
# d e f a u l t .
if ( ${ target } STREQUAL wasm32-wasip3 AND ${ COOP_THREADS_POSSIBLE } )
define_wasi_libc_sub ( ${ coop_threads_sysroot } ${ target } "-coop" OFF )
endif ( )
endfunction ( )
foreach ( target IN LISTS WASI_SDK_TARGETS )
@ -248,7 +262,7 @@ execute_process(
O U T P U T _ V A R I A B L E l l v m _ v e r s i o n
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
function ( define_libcxx_sub target target_suffix extra_target_flags extra_libdir_suffix exceptions )
function ( define_libcxx_sub sysroot target target_suffix extra_target_flags extra_libdir_suffix exceptions )
if ( ${ target } MATCHES threads )
set ( pic OFF )
set ( target_flags -pthread )
@ -271,7 +285,7 @@ function(define_libcxx_sub target target_suffix extra_target_flags extra_libdir_
- - t a r g e t = $ { t a r g e t }
$ { d i r _ c o m p i l e _ o p t s }
$ { d i r _ l i n k _ o p t s }
- - s y s r o o t $ { wa s i _ sy s r o o t }
- - s y s r o o t $ { sy s r o o t }
- r e s o u r c e - d i r $ { w a s i _ r e s o u r c e _ d i r } )
set ( exnsuffix "" )
@ -309,6 +323,12 @@ function(define_libcxx_sub target target_suffix extra_target_flags extra_libdir_
set ( shared OFF )
endif ( )
# FIXME ( WebAssembly/wasi-libc # 813 ) - s h a r e d l i b r a r i e s d o n ' t w o r k w i t h c o o p
# t h r e a d s r i g h t n o w .
if ( ${ sysroot } STREQUAL ${ coop_threads_sysroot } )
set ( shared OFF )
endif ( )
set ( extra_cflags_list ${ CMAKE_C_FLAGS } ${ extra_flags } )
list ( JOIN extra_cflags_list " " extra_cflags )
set ( extra_cxxflags_list ${ CMAKE_CXX_FLAGS } ${ extra_flags } )
@ -318,10 +338,11 @@ function(define_libcxx_sub target target_suffix extra_target_flags extra_libdir_
S O U R C E _ D I R $ { l l v m _ p r o j _ d i r } / r u n t i m e s
C M A K E _ A R G S
$ { d e f a u l t _ c m a k e _ a r g s }
- D C M A K E _ S Y S R O O T = $ { s y s r o o t }
# E n s u r e h e a d e r s a r e i n s t a l l e d i n a t a r g e t - s p e c i f i c p a t h i n s t e a d o f a
# t a r g e t - g e n e r i c p a t h .
- D C M A K E _ I N S T A L L _ I N C L U D E D I R = $ { wa s i _ sy s r o o t } / i n c l u d e / $ { t a r g e t } $ { e x n s u f f i x }
- D C M A K E _ S T A G I N G _ P R E F I X = $ { wa s i _ sy s r o o t }
- D C M A K E _ I N S T A L L _ I N C L U D E D I R = $ { sy s r o o t } / i n c l u d e / $ { t a r g e t } $ { e x n s u f f i x }
- D C M A K E _ S T A G I N G _ P R E F I X = $ { sy s r o o t }
- D C M A K E _ P O S I T I O N _ I N D E P E N D E N T _ C O D E = $ { p i c }
- D L I B C X X _ E N A B L E _ T H R E A D S : B O O L = O N
- D L I B C X X _ H A S _ P T H R E A D _ A P I : B O O L = O N
@ -382,12 +403,12 @@ function(define_libcxx_sub target target_suffix extra_target_flags extra_libdir_
add_dependencies ( libcxx- ${ target } libcxx- ${ target } ${ target_suffix } -build )
endfunction ( )
function ( define_libcxx_and_lto target target_suffix exceptions )
define_libcxx_sub ( ${ target} "${target_suffix}" "" "" ${ exceptions } )
function ( define_libcxx_and_lto sysroot target target_suffix exceptions )
define_libcxx_sub ( ${ sysroot} ${ target} "${target_suffix}" "" "" ${ exceptions } )
if ( WASI_SDK_LTO )
# N o t e : c l a n g k n o w s t h i s / l l v m - l t o / $ { l l v m _ v e r s i o n } c o n v e n t i o n .
# h t t p s : / / g i t h u b . c o m / l l v m / l l v m - p r o j e c t / b l o b / l l v m o r g - 1 8 . 1 . 8 / c l a n g / l i b / D r i v e r / T o o l C h a i n s / W e b A s s e m b l y . c p p # L 2 0 4 - L 2 1 0
define_libcxx_sub ( ${ target} ${ target_suffix } -lto "-flto=full" "/llvm-lto/${llvm_version}" ${ exceptions } )
define_libcxx_sub ( ${ sysroot} ${ target} ${ target_suffix } -lto "-flto=full" "/llvm-lto/${llvm_version}" ${ exceptions } )
endif ( )
endfunction ( )
@ -401,20 +422,32 @@ function(define_libcxx target)
# O t h e r w i s e t h e r e ' s o n l y o n e b u i l d o f l i b c x x a n d i t ' s e i t h e r g o t e x c e p t i o n s o r
# i t d o e s n ' t d e p e n d i n g o n c o n f i g u r a t i o n .
if ( WASI_SDK_EXCEPTIONS STREQUAL "DUAL" )
define_libcxx_and_lto ( ${ target} "" OFF )
define_libcxx_and_lto ( ${ target} "-exn" ON )
define_libcxx_and_lto ( ${ wasi_sysroot} ${ target} "" OFF )
define_libcxx_and_lto ( ${ wasi_sysroot} ${ target} "-exn" ON )
elseif ( WASI_SDK_EXCEPTIONS STREQUAL "ON" )
define_libcxx_and_lto ( ${ target} "" ON )
define_libcxx_and_lto ( ${ wasi_sysroot} ${ target} "" ON )
else ( )
define_libcxx_and_lto ( ${ target} "" OFF )
define_libcxx_and_lto ( ${ wasi_sysroot} ${ target} "" OFF )
endif ( )
# A s o f t h i s w r i t i n g , ` c l a n g + + ` w i l l i g n o r e t h e t a r g e t - s p e c i f i c i n c l u d e d i r s
# u n l e s s t h i s o n e a l s o e x i s t s :
add_custom_target ( libcxx- ${ target } -extra-dir
C O M M A N D $ { C M A K E _ C O M M A N D } - E m a k e _ d i r e c t o r y $ { w a s i _ s y s r o o t } / i n c l u d e / c + + / v 1
C O M M E N T " c r e a t i n g l i b c x x - s p e c i f i c h e a d e r f i l e f o l d e r " )
add_dependencies ( libcxx- ${ target } libcxx- ${ target } -extra-dir )
# T e m p o r a r y w a s i p 3 e x p e r i m e n t a l c o o p t h r e a d s s y s r o o t b e f o r e i t ' s e n a b l e d b y
# d e f a u l t .
if ( ${ target } STREQUAL wasm32-wasip3 AND ${ COOP_THREADS_POSSIBLE } )
define_libcxx_and_lto ( ${ coop_threads_sysroot } ${ target } "-coop" OFF )
add_custom_target ( libcxx- ${ target } -extra-dir-coop-threads-sysroot
C O M M A N D $ { C M A K E _ C O M M A N D } - E m a k e _ d i r e c t o r y $ { c o o p _ t h r e a d s _ s y s r o o t } / i n c l u d e / c + + / v 1
C O M M E N T " c r e a t i n g l i b c x x - s p e c i f i c h e a d e r f i l e f o l d e r " )
add_dependencies ( libcxx- ${ target } libcxx- ${ target } -extra-dir-coop-threads-sysroot )
endif ( )
endfunction ( )
foreach ( target IN LISTS WASI_SDK_TARGETS )