diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 8f3d6ad671d476..6b9ac068fd87c6 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -20,6 +20,21 @@ include(CheckLinkerFlag) # "configureoptimization.cmake" must be included after CLR_CMAKE_HOST_UNIX has been set. include(${CMAKE_CURRENT_LIST_DIR}/configureoptimization.cmake) +# Validate tryrun cache version matches current Emscripten version (browser-wasm only) +if(CLR_CMAKE_TARGET_BROWSER AND DEFINED TRYRUN_BROWSER_EMSCRIPTEN_VERSION) + file(READ "${CMAKE_CURRENT_LIST_DIR}/../../src/mono/browser/emscripten-version.txt" CURRENT_EMSCRIPTEN_VERSION) + string(STRIP "${CURRENT_EMSCRIPTEN_VERSION}" CURRENT_EMSCRIPTEN_VERSION) + + if(NOT TRYRUN_BROWSER_EMSCRIPTEN_VERSION STREQUAL CURRENT_EMSCRIPTEN_VERSION) + message(WARNING + "Emscripten version mismatch detected!\n" + " Current Emscripten: ${CURRENT_EMSCRIPTEN_VERSION}\n" + " Cached features for: ${TRYRUN_BROWSER_EMSCRIPTEN_VERSION}\n" + " The CMake feature cache (eng/native/tryrun.browser.cmake) may be outdated.\n" + " Consider regenerating the cache - see instructions in eng/native/tryrun.browser.cmake") + endif() +endif() + #----------------------------------------------------- # Initialize Cmake compiler flags and other variables #----------------------------------------------------- diff --git a/eng/native/gen-buildsys.sh b/eng/native/gen-buildsys.sh index 1d52c232b84572..186a179f78c0f2 100755 --- a/eng/native/gen-buildsys.sh +++ b/eng/native/gen-buildsys.sh @@ -107,6 +107,9 @@ if [[ "$host_arch" == "wasm" ]]; then fi export EMSDK_QUIET=1 && source "$EMSDK_PATH"/emsdk_env.sh cmake_command="emcmake $cmake_command" + # Use WASM-specific tryrun cache to speed up CMake configure + # The -C flag must be early in the command line to be effective + cmake_extra_defines="-C $scriptroot/tryrun.browser.cmake $cmake_extra_defines" elif [[ "$target_os" == "wasi" ]]; then if [[ -z "$WASI_SDK_PATH" ]]; then if [[ -d "$reporoot"/artifacts/wasi-sdk ]]; then diff --git a/eng/native/tryrun.browser.cmake b/eng/native/tryrun.browser.cmake new file mode 100644 index 00000000000000..87425dc4d7eee7 --- /dev/null +++ b/eng/native/tryrun.browser.cmake @@ -0,0 +1,393 @@ +# CMake pre-configured cache for WebAssembly (browser-wasm) cross-compilation +# +# This file caches the results of CMake feature detection checks and TRY_RUN tests +# to significantly speed up the CMake configure phase for WebAssembly builds. +# +# IMPORTANT: This file is specific to the Emscripten version and WebAssembly target. +# +# Valid for: +# - Emscripten version: 3.1.56 +# - Target: wasm32-unknown-emscripten (browser-wasm) +# - Architecture: wasm32 +# - OS: browser/Emscripten +# +# PERFORMANCE IMPACT: +# - Reduces CMake configure checks from 103 to 14 (86% reduction) +# - Configure phase: ~2-3 minutes → ~10-20 seconds +# - Eliminates: TRY_RUN tests, header checks, function checks, compiler tests +# - Accelerates both main CoreCLR build and sub-projects (zlib-ng, zstd) +# +# HOW TO USE: +# Automatically applied when building for browser-wasm. No special flags needed: +# ./build.sh -subset clr.runtime -os browser -arch wasm -c Debug +# +# VERSION TRACKING: +# The TRYRUN_BROWSER_EMSCRIPTEN_VERSION variable at the top of this file tracks +# which Emscripten version this cache was generated for. The build system +# validates this against src/mono/browser/emscripten-version.txt and warns +# if there's a mismatch. +# +# WHEN TO REGENERATE: +# This file should be regenerated when: +# - Emscripten version changes (see src/mono/browser/emscripten-version.txt) +# - New CMake feature checks are added to the CoreCLR build system +# - WebAssembly platform capabilities change significantly +# +# HOW TO REGENERATE: +# 1. Temporarily disable this cache file: +# mv eng/native/tryrun.browser.cmake eng/native/tryrun.browser.cmake.bak +# +# 2. Clean and run a fresh configure: +# git clean -xdf artifacts/obj/coreclr/browser.wasm.Debug +# ./build.sh -subset clr.runtime -os browser -arch wasm -c Debug +# (Let it run until CMake configure completes, can stop after that) +# +# 3. Extract all feature check results: +# grep -E "^(HAVE_|HAS_|ONE_|PTHREAD_|REALPATH_|SEM_|COMPILER_)" \ +# artifacts/obj/coreclr/browser.wasm.Debug/CMakeCache.txt | sort +# +# 4. Generate new cache entries (example script): +# while IFS= read -r line; do +# var=$(echo "$line" | cut -d: -f1) +# rest=$(echo "$line" | cut -d: -f2-) +# type=$(echo "$rest" | cut -d= -f1) +# value=$(echo "$rest" | cut -d= -f2-) +# [ -z "$value" ] && value='""' +# cache_type="INTERNAL" +# [ "$type" = "BOOL" ] && cache_type="BOOL" +# if [[ "$var" == *"_EXITCODE" ]]; then +# echo "set_cache_value($var $value)" +# else +# echo "set($var $value CACHE $cache_type \"\")" +# fi +# done < <(grep -E "^(HAVE_|HAS_|...)" CMakeCache.txt) +# +# 5. Update this file with: +# - New TRYRUN_BROWSER_EMSCRIPTEN_VERSION at the top of the file +# - New Emscripten version in header comment (line 9) +# - New cache entries (replacing old ones) +# - Verify no duplicate entries +# +# 6. Also update sub-project caches in: +# - src/native/external/zlib-ng.cmake (CLR_CMAKE_TARGET_BROWSER section) +# - src/native/external/zstd.cmake (CLR_CMAKE_TARGET_BROWSER section) +# +# 7. Test the regenerated cache: +# git clean -xdf artifacts/obj/coreclr/browser.wasm.Debug +# ./build.sh -subset clr.runtime -os browser -arch wasm -c Debug +# (Verify it loads and check count is minimal) +# +# 8. Restore if needed: +# mv eng/native/tryrun.browser.cmake.bak eng/native/tryrun.browser.cmake + +# Version tracking: This cache is valid for the following Emscripten version +set(TRYRUN_BROWSER_EMSCRIPTEN_VERSION "3.1.56" CACHE INTERNAL "Emscripten version this cache was generated for") + +# Macro to set cache values (same as eng/native/tryrun.cmake) +macro(set_cache_value) + set(${ARGV0} ${ARGV1} CACHE STRING "Result from TRY_RUN" FORCE) + set(${ARGV0}__TRYRUN_OUTPUT "dummy output" CACHE STRING "Output from TRY_RUN" FORCE) +endmacro() + +# NOTE: This file is only used for WebAssembly/Emscripten builds. +# No conditional check needed - the file is explicitly loaded via -C flag +# only for browser-wasm builds in eng/native/gen-buildsys.sh + +# ============================================================================ +# TRY_RUN Exit Codes +# ============================================================================ + +set(COMPILER_SUPPORTS_F_ALIGNED_NEW 1 CACHE INTERNAL "") +set(COMPILER_SUPPORTS_W_IMPLICIT_FALLTHROUGH 1 CACHE INTERNAL "") +set(COMPILER_SUPPORTS_W_PRE_C11_COMPAT 1 CACHE INTERNAL "") +set(COMPILER_SUPPORTS_W_RESERVED_IDENTIFIER 1 CACHE INTERNAL "") +set(HAS_POSIX_SEMAPHORES_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 0) +set(HAS_POSIX_SEMAPHORES 1 CACHE INTERNAL "") +set(HAS_PTHREAD_MUTEXES 1 CACHE INTERNAL "") +set(HAS_SYSV_SEMAPHORES "" CACHE INTERNAL "") +set(HAVE___GREGSET_T "" CACHE INTERNAL "") +set(HAVE__LWP_SELF "" CACHE INTERNAL "") +set(HAVE__SC_AVPHYS_PAGES 1 CACHE INTERNAL "") +set(HAVE__SC_PHYS_PAGES 1 CACHE INTERNAL "") +set(HAVE_ACCEPT4 1 CACHE INTERNAL "") +set(HAVE_ALIGNED_ALLOC FALSE CACHE BOOL "") +set(HAVE_ARC4RANDOM_BUF "" CACHE INTERNAL "") +set(HAVE_ARM_ACLE_H "" CACHE INTERNAL "") +set(HAVE_ATTRIBUTE_ALIGNED 1 CACHE INTERNAL "") +set(HAVE_ATTRIBUTE_VISIBILITY_HIDDEN 1 CACHE INTERNAL "") +set(HAVE_ATTRIBUTE_VISIBILITY_INTERNAL 1 CACHE INTERNAL "") +set(HAVE_AUXV_HWCAP_H "" CACHE INTERNAL "") +set(HAVE_BCRYPT_H "" CACHE INTERNAL "") +set(HAVE_BROKEN_FIFO_KEVENT_COMPILED FALSE CACHE INTERNAL "") +set(HAVE_BROKEN_FIFO_KEVENT "" CACHE INTERNAL "") +set(HAVE_BROKEN_FIFO_SELECT_COMPILED FALSE CACHE INTERNAL "") +set(HAVE_BROKEN_FIFO_SELECT "" CACHE INTERNAL "") +set(HAVE_BSD_REGS_T FALSE CACHE INTERNAL "") +set(HAVE_BUILTIN_ASSUME_ALIGNED 1 CACHE INTERNAL "") +set(HAVE_BUILTIN_CTZ 1 CACHE INTERNAL "") +set(HAVE_BUILTIN_CTZLL 1 CACHE INTERNAL "") +set(HAVE_BUILTIN_MUL_OVERFLOW 1 CACHE INTERNAL "") +set(HAVE_CFMAKERAW 1 CACHE INTERNAL "") +set(HAVE_CFSETSPEED 1 CACHE INTERNAL "") +set(HAVE_CHMOD 1 CACHE INTERNAL "") +set(HAVE_CLOCK_GETTIME_NSEC_NP "" CACHE INTERNAL "") +set(HAVE_CLOCK_MONOTONIC_COARSE 1 CACHE INTERNAL "") +set(HAVE_CLOCK_MONOTONIC_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0) +set(HAVE_CLOCK_MONOTONIC 1 CACHE INTERNAL "") +set(HAVE_CLOCK_THREAD_CPUTIME_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 255) +set(HAVE_CLOCK_THREAD_CPUTIME "" CACHE INTERNAL "") +set(HAVE_CONNECTX "" CACHE INTERNAL "") +set(HAVE_CPUSET_T "" CACHE INTERNAL "") +set(HAVE_CRT_EXTERNS_H "" CACHE INTERNAL "") +set(HAVE_DIRECTIO "" CACHE INTERNAL "") +set(HAVE_DIRENT_D_TYPE 1 CACHE INTERNAL "") +set(HAVE_DIRENT_NAME_LEN "" CACHE INTERNAL "") +set(HAVE_DISCONNECTX "" CACHE INTERNAL "") +set(HAVE_DLFCN_H 1 CACHE INTERNAL "") +set(HAVE_EPOLL "" CACHE INTERNAL "") +set(HAVE_ERRNO_H 1 CACHE INTERNAL "") +set(HAVE_ETHTOOL_H "" CACHE INTERNAL "") +set(HAVE_F_DUPFD_CLOEXEC 1 CACHE INTERNAL "") +set(HAVE_F_DUPFD 1 CACHE INTERNAL "") +set(HAVE_F_FULLFSYNC "" CACHE INTERNAL "") +set(HAVE_FALLOCATE "" CACHE INTERNAL "") +set(HAVE_FCHMOD 1 CACHE INTERNAL "") +set(HAVE_FCOPYFILE "" CACHE INTERNAL "") +set(HAVE_FLOCK64 "" CACHE INTERNAL "") +set(HAVE_FORK 1 CACHE INTERNAL "") +set(HAVE_FPREGS_WITH_CW "" CACHE INTERNAL "") +set(HAVE_FPSTATE_GLIBC_RESERVED1 "" CACHE INTERNAL "") +set(HAVE_FSEEKO 1 CACHE INTERNAL "") +set(HAVE_FSYNC 1 CACHE INTERNAL "") +set(HAVE_FTRUNCATE64 "" CACHE INTERNAL "") +set(HAVE_FUTIMENS 1 CACHE INTERNAL "") +set(HAVE_FUTIMES "" CACHE INTERNAL "") +set(HAVE_GET_PROC_INFO_IN_RANGE "" CACHE INTERNAL "") +set(HAVE_GETAUXVAL "" CACHE INTERNAL "") +set(HAVE_GETDOMAINNAME_SIZET 1 CACHE INTERNAL "") +set(HAVE_GETDOMAINNAME 1 CACHE INTERNAL "") +set(HAVE_GETGRGID_R 1 CACHE INTERNAL "") +set(HAVE_GETGROUPLIST "" CACHE INTERNAL "") +set(HAVE_GETHOSTNAME 1 CACHE INTERNAL "") +set(HAVE_GETIFADDRS 1 CACHE INTERNAL "") +set(HAVE_GETNAMEINFO_SIGNED_FLAGS 1 CACHE INTERNAL "") +set(HAVE_GETNAMEINFO 1 CACHE INTERNAL "") +set(HAVE_GETPEEREID "" CACHE INTERNAL "") +set(HAVE_GETRLIMIT 1 CACHE INTERNAL "") +set(HAVE_GMTIME_R 1 CACHE INTERNAL "") +set(HAVE_GNU_LIBNAMES_H "" CACHE INTERNAL "") +set(HAVE_GNU_STRERROR_R "" CACHE INTERNAL "") +set(HAVE_GREGSET_T 1 CACHE INTERNAL "") +set(HAVE_GSS_SPNEGO_MECHANISM "" CACHE INTERNAL "") +set(HAVE_GSSFW_HEADERS "" CACHE INTERNAL "") +set(HAVE_HAVE_IF_MSGHDR2 FALSE CACHE INTERNAL "") +set(HAVE_HAVE_RT_MSGHDR FALSE CACHE INTERNAL "") +set(HAVE_HAVE_RT_MSGHDR2 FALSE CACHE INTERNAL "") +set(HAVE_HWPROBE_H "" CACHE INTERNAL "") +set(HAVE_IF_MSGHDR2 "" CACHE INTERNAL "") +set(HAVE_IN_EXCL_UNLINK "" CACHE INTERNAL "") +set(HAVE_IN_PKTINFO 1 CACHE INTERNAL "") +set(HAVE_INFTIM "" CACHE INTERNAL "") +set(HAVE_INOTIFY_ADD_WATCH "" CACHE INTERNAL "") +set(HAVE_INOTIFY_INIT "" CACHE INTERNAL "") +set(HAVE_INOTIFY_RM_WATCH "" CACHE INTERNAL "") +set(HAVE_IOCTL_WITH_INT_REQUEST 1 CACHE INTERNAL "") +set(HAVE_IOCTL 1 CACHE INTERNAL "") +set(HAVE_IOSS_H "" CACHE INTERNAL "") +set(HAVE_IP_MREQN 1 CACHE INTERNAL "") +set(HAVE_IP_MULTICAST_IFINDEX "" CACHE INTERNAL "") +set(HAVE_KQUEUE "" CACHE INTERNAL "") +set(HAVE_LCHFLAGS "" CACHE INTERNAL "") +set(HAVE_LIBPTHREAD 1 CACHE INTERNAL "") +set(HAVE_LINUX_AUXVEC_H "" CACHE INTERNAL "") +set(HAVE_LINUX_CAN_H "" CACHE INTERNAL "") +set(HAVE_LINUX_ERRQUEUE_H "" CACHE INTERNAL "") +set(HAVE_LINUX_IN_H "" CACHE INTERNAL "") +set(HAVE_LINUX_RTNETLINK_H "" CACHE INTERNAL "") +set(HAVE_LINUX_USER_EVENTS_H "" CACHE INTERNAL "") +set(HAVE_LSEEK64 "" CACHE INTERNAL "") +set(HAVE_LTTNG_TRACEPOINT_H "" CACHE INTERNAL "") +set(HAVE_LUTIMES "" CACHE INTERNAL "") +set(HAVE_LWP_H "" CACHE INTERNAL "") +set(HAVE_MACH_EXCEPTIONS "" CACHE INTERNAL "") +set(HAVE_MACH_THREADS "" CACHE INTERNAL "") +set(HAVE_MACH_VM_PARAM_H "" CACHE INTERNAL "") +set(HAVE_MACH_VM_TYPES_H "" CACHE INTERNAL "") +set(HAVE_MACHINE_NPX_H "" CACHE INTERNAL "") +set(HAVE_MACHINE_REG_H "" CACHE INTERNAL "") +set(HAVE_MACHINE_VMPARAM_H "" CACHE INTERNAL "") +set(HAVE_MAKEDEV_FILEH "" CACHE INTERNAL "") +set(HAVE_MAKEDEV_SYSMACROSH 1 CACHE INTERNAL "") +set(HAVE_MALLOC_SIZE "" CACHE INTERNAL "") +set(HAVE_MALLOC_USABLE_SIZE_NP "" CACHE INTERNAL "") +set(HAVE_MALLOC_USABLE_SIZE 1 CACHE INTERNAL "") +set(HAVE_MAP_HUGETLB 1 CACHE INTERNAL "") +set(HAVE_MKSTEMP 1 CACHE INTERNAL "") +set(HAVE_MKSTEMPS 1 CACHE INTERNAL "") +set(HAVE_MMAP64 "" CACHE INTERNAL "") +set(HAVE_MNTENT_H 1 CACHE INTERNAL "") +set(HAVE_MNTINFO "" CACHE INTERNAL "") +set(HAVE_NET_IF_ARP_H 1 CACHE INTERNAL "") +set(HAVE_NET_IF_H 1 CACHE INTERNAL "") +set(HAVE_NET_IFMEDIA_H "" CACHE INTERNAL "") +set(HAVE_NETINET_ICMP_VAR_H "" CACHE INTERNAL "") +set(HAVE_NETINET_IP_VAR_H "" CACHE INTERNAL "") +set(HAVE_NETINET_TCP_VAR_H "" CACHE INTERNAL "") +set(HAVE_NETINET_UDP_VAR_H "" CACHE INTERNAL "") +set(HAVE_NETPACKET_PACKET_H 1 CACHE INTERNAL "") +set(HAVE_NO_INTERPOSITION 1 CACHE INTERNAL "") +set(HAVE_NON_LEGACY_STATFS 1 CACHE INTERNAL "") +set(HAVE_O_CLOEXEC 1 CACHE INTERNAL "") +set(HAVE_OFF64_T TRUE CACHE INTERNAL "") +set(HAVE_PIPE 1 CACHE INTERNAL "") +set(HAVE_PIPE2 1 CACHE INTERNAL "") +set(HAVE_POLL 1 CACHE INTERNAL "") +set(HAVE_POSIX_ADVISE 1 CACHE INTERNAL "") +set(HAVE_POSIX_FADVISE64 "" CACHE INTERNAL "") +set(HAVE_POSIX_MADVISE 1 CACHE INTERNAL "") +set(HAVE_POSIX_MEMALIGN 1 CACHE INTERNAL "") +set(HAVE_PR_SET_PTRACER "" CACHE INTERNAL "") +set(HAVE_PRCTL_H "" CACHE INTERNAL "") +set(HAVE_PREADV 1 CACHE INTERNAL "") +set(HAVE_PROCFS_CTL_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1) +set(HAVE_PROCFS_CTL "" CACHE INTERNAL "") +set(HAVE_PROCFS_H "" CACHE INTERNAL "") +set(HAVE_PROCFS_STAT_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_PROCFS_STAT_EXITCODE 1) +set(HAVE_PROCFS_STAT "" CACHE INTERNAL "") +set(HAVE_PROCFS_STATM_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_PROCFS_STATM_EXITCODE 1) +set(HAVE_PROCFS_STATM "" CACHE INTERNAL "") +set(HAVE_PRWATCH_T FALSE CACHE INTERNAL "") +set(HAVE_PT_REGS FALSE CACHE INTERNAL "") +set(HAVE_PTHREAD_ATTR_GET_NP "" CACHE INTERNAL "") +set(HAVE_PTHREAD_CONDATTR_SETCLOCK 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_GETAFFINITY_NP "" CACHE INTERNAL "") +set(HAVE_PTHREAD_GETATTR_NP 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_GETCPUCLOCKID 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_GETTHREADID_NP "" CACHE INTERNAL "") +set(HAVE_PTHREAD_H 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_IN_LIBC 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_MUTEX_CLOCKLOCK "" CACHE INTERNAL "") +set(HAVE_PTHREAD_NP_H "" CACHE INTERNAL "") +set(HAVE_PTHREAD_RWLOCK_T TRUE CACHE INTERNAL "") +set(HAVE_PTHREAD_SETAFFINITY_NP "" CACHE INTERNAL "") +set(HAVE_PTHREAD_SETCANCELSTATE 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_THREADID_NP "" CACHE INTERNAL "") +set(HAVE_PTRDIFF_T 1 CACHE INTERNAL "") +set(HAVE_PUBLIC_XSTATE_STRUCT "" CACHE INTERNAL "") +set(HAVE_PWRITEV 1 CACHE INTERNAL "") +set(HAVE_RESOURCE_H 1 CACHE INTERNAL "") +set(HAVE_RT_MSGHDR "" CACHE INTERNAL "") +set(HAVE_RT_MSGHDR2 "" CACHE INTERNAL "") +set(HAVE_RUNETYPE_H "" CACHE INTERNAL "") +set(HAVE_SCHED_GET_PRIORITY_COMPILED FALSE CACHE INTERNAL "") +set(HAVE_SCHED_GET_PRIORITY "" CACHE INTERNAL "") +set(HAVE_SCHED_GETAFFINITY "" CACHE INTERNAL "") +set(HAVE_SCHED_GETCPU "" CACHE INTERNAL "") +set(HAVE_SCHED_SETAFFINITY "" CACHE INTERNAL "") +set(HAVE_SEMAPHORE_H 1 CACHE INTERNAL "") +set(HAVE_SENDFILE_4 "" CACHE INTERNAL "") +set(HAVE_SENDFILE_6 "" CACHE INTERNAL "") +set(HAVE_SENDFILE_7 "" CACHE INTERNAL "") +set(HAVE_SETRLIMIT 1 CACHE INTERNAL "") +set(HAVE_SIGALTSTACK 1 CACHE INTERNAL "") +set(HAVE_SIZEOF_OFF_T TRUE CACHE INTERNAL "") +set(HAVE_SOCKADDR_UN_SUN_PATH 1 CACHE INTERNAL "") +set(HAVE_STAT_BIRTHTIME "" CACHE INTERNAL "") +set(HAVE_STAT_FLAGS "" CACHE INTERNAL "") +set(HAVE_STAT_NSEC "" CACHE INTERNAL "") +set(HAVE_STAT_TIM 1 CACHE INTERNAL "") +set(HAVE_STAT_TIMESPEC "" CACHE INTERNAL "") +set(HAVE_STAT64 "" CACHE INTERNAL "") +set(HAVE_STATFS_FSTYPENAME "" CACHE INTERNAL "") +set(HAVE_STATFS_MOUNT "" CACHE INTERNAL "") +set(HAVE_STATFS_SIZE TRUE CACHE INTERNAL "") +set(HAVE_STATFS_VFS 1 CACHE INTERNAL "") +set(HAVE_STATFS 1 CACHE INTERNAL "") +set(HAVE_STATVFS_BASETYPE "" CACHE INTERNAL "") +set(HAVE_STATVFS_FSTYPENAME "" CACHE INTERNAL "") +set(HAVE_STATVFS 1 CACHE INTERNAL "") +set(HAVE_STDDEF_H 1 CACHE INTERNAL "") +set(HAVE_STDINT_H 1 CACHE INTERNAL "") +set(HAVE_STRCPY_S "" CACHE INTERNAL "") +set(HAVE_STRERROR 1 CACHE INTERNAL "") +set(HAVE_STRERRORNAME_NP "" CACHE INTERNAL "") +set(HAVE_STRLCAT 1 CACHE INTERNAL "") +set(HAVE_SWAPCTL "" CACHE INTERNAL "") +set(HAVE_SYS_AUXV_H "" CACHE INTERNAL "") +set(HAVE_SYS_CDEFS_H "" CACHE INTERNAL "") +set(HAVE_SYS_FILIO_H "" CACHE INTERNAL "") +set(HAVE_SYS_INOTIFY_H "" CACHE INTERNAL "") +set(HAVE_SYS_IOCTL_H 1 CACHE INTERNAL "") +set(HAVE_SYS_LWP_H "" CACHE INTERNAL "") +set(HAVE_SYS_MEMBARRIER_H 1 CACHE INTERNAL "") +set(HAVE_SYS_MMAN_H 1 CACHE INTERNAL "") +set(HAVE_SYS_MNTENT_H "" CACHE INTERNAL "") +set(HAVE_SYS_MOUNT_H 1 CACHE INTERNAL "") +set(HAVE_SYS_POLL_H "" CACHE INTERNAL "") +set(HAVE_SYS_PROCINFO_H "" CACHE INTERNAL "") +set(HAVE_SYS_PTRACE_H "" CACHE INTERNAL "") +set(HAVE_SYS_SDT_H "" CACHE INTERNAL "") +set(HAVE_SYS_SOCKET_H 1 CACHE INTERNAL "") +set(HAVE_SYS_SOCKIO_H "" CACHE INTERNAL "") +set(HAVE_SYS_STATFS_H 1 CACHE INTERNAL "") +set(HAVE_SYS_STATVFS_H 1 CACHE INTERNAL "") +set(HAVE_SYS_SYSCTL_H "" CACHE INTERNAL "") +set(HAVE_SYS_TIME_H 1 CACHE INTERNAL "") +set(HAVE_SYS_TYPES_H 1 CACHE INTERNAL "") +set(HAVE_SYS_UCONTEXT_H 1 CACHE INTERNAL "") +set(HAVE_SYS_UIO_H 1 CACHE INTERNAL "") +set(HAVE_SYS_VMPARAM_H "" CACHE INTERNAL "") +set(HAVE_SYSCONF 1 CACHE INTERNAL "") +set(HAVE_SYSCTL "" CACHE INTERNAL "") +set(HAVE_SYSCTLBYNAME "" CACHE INTERNAL "") +set(HAVE_SYSINFO_WITH_MEM_UNIT 1 CACHE INTERNAL "") +set(HAVE_SYSINFO "" CACHE INTERNAL "") +set(HAVE_SYSLOG_H 1 CACHE INTERNAL "") +set(HAVE_TCP_FSM_H "" CACHE INTERNAL "") +set(HAVE_TCP_H_TCP_KEEPALIVE "" CACHE INTERNAL "") +set(HAVE_TCP_H_TCPSTATE_ENUM 1 CACHE INTERNAL "") +set(HAVE_TERMIOS_H 1 CACHE INTERNAL "") +set(HAVE_TERMIOS2 "" CACHE INTERNAL "") +set(HAVE_THREAD_SELF "" CACHE INTERNAL "") +set(HAVE_TIOCGWINSZ 1 CACHE INTERNAL "") +set(HAVE_TTRACE "" CACHE INTERNAL "") +set(HAVE_UCONTEXT_H 1 CACHE INTERNAL "") +set(HAVE_UCONTEXT_T TRUE CACHE INTERNAL "") +set(HAVE_UNISTD_H 1 CACHE INTERNAL "") +set(HAVE_UNW_AARCH64_X19 1 CACHE INTERNAL "") +set(HAVE_UNW_GET_ACCESSORS "" CACHE INTERNAL "") +set(HAVE_UNW_GET_SAVE_LOC "" CACHE INTERNAL "") +set(HAVE_UTIMENSAT 1 CACHE INTERNAL "") +set(HAVE_UTSNAME_DOMAINNAME "" CACHE INTERNAL "") +set(HAVE_VFORK 1 CACHE INTERNAL "") +set(HAVE_VM_ALLOCATE "" CACHE INTERNAL "") +set(HAVE_VM_FLAGS_SUPERPAGE_SIZE_ANY "" CACHE INTERNAL "") +set(HAVE_VM_READ "" CACHE INTERNAL "") +set(HAVE_WORKING_CLOCK_GETTIME_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_WORKING_CLOCK_GETTIME_EXITCODE 0) +set(HAVE_WORKING_CLOCK_GETTIME 1 CACHE INTERNAL "") +set(HAVE_WORKING_GETTIMEOFDAY_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_WORKING_GETTIMEOFDAY_EXITCODE 0) +set(HAVE_WORKING_GETTIMEOFDAY 1 CACHE INTERNAL "") +set(HAVE_XSW_USAGE "" CACHE INTERNAL "") +set(HAVE_XSWDEV "" CACHE INTERNAL "") +set(HAVE_YIELD_SYSCALL "" CACHE INTERNAL "") +set(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS_EXITCODE 1) +set(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS "" CACHE INTERNAL "") +set(PTHREAD_CREATE_MODIFIES_ERRNO_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(PTHREAD_CREATE_MODIFIES_ERRNO_EXITCODE 1) +set(PTHREAD_CREATE_MODIFIES_ERRNO "" CACHE INTERNAL "") +set(PTHREAD_RWLOCK_T 32 CACHE INTERNAL "") +set(REALPATH_SUPPORTS_NONEXISTENT_FILES_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(REALPATH_SUPPORTS_NONEXISTENT_FILES_EXITCODE 1) +set(REALPATH_SUPPORTS_NONEXISTENT_FILES "" CACHE INTERNAL "") +set(SEM_INIT_MODIFIES_ERRNO_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(SEM_INIT_MODIFIES_ERRNO_EXITCODE 1) +set(SEM_INIT_MODIFIES_ERRNO "" CACHE INTERNAL "") diff --git a/src/native/external/zlib-ng.cmake b/src/native/external/zlib-ng.cmake index b146287c7dc323..aae68470378289 100644 --- a/src/native/external/zlib-ng.cmake +++ b/src/native/external/zlib-ng.cmake @@ -20,11 +20,39 @@ if(CLR_CMAKE_TARGET_ARCH_ARM AND CLR_CMAKE_TARGET_LINUX) set(WITH_NEON OFF) endif() -if (CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI) +if (CLR_CMAKE_TARGET_WASI) # 'aligned_alloc' is not available in browser/wasi, yet it is set by zlib-ng/CMakeLists.txt. set(HAVE_ALIGNED_ALLOC FALSE CACHE BOOL "have aligned_alloc" FORCE) endif() +if (CLR_CMAKE_TARGET_BROWSER) + # 'aligned_alloc' is not available in browser, yet it is set by zlib-ng/CMakeLists.txt. + set(HAVE_ALIGNED_ALLOC FALSE CACHE BOOL "have aligned_alloc" FORCE) + + # Pre-cache zlib-ng CMake checks to speed up configure for browser + # These values match the results for Emscripten/WASM target + set(HAVE_ARM_ACLE_H "" CACHE INTERNAL "") + set(HAVE_SYS_AUXV_H "" CACHE INTERNAL "") + set(HAVE_SYS_SDT_H "" CACHE INTERNAL "") + set(HAVE_UNISTD_H 1 CACHE INTERNAL "") + set(HAVE_LINUX_AUXVEC_H "" CACHE INTERNAL "") + set(HAVE_SYS_TYPES_H 1 CACHE INTERNAL "") + set(HAVE_STDINT_H 1 CACHE INTERNAL "") + set(HAVE_STDDEF_H 1 CACHE INTERNAL "") + set(HAVE_FSEEKO 1 CACHE INTERNAL "") + set(HAVE_STRERROR 1 CACHE INTERNAL "") + set(HAVE_POSIX_MEMALIGN 1 CACHE INTERNAL "") + set(HAVE_ATTRIBUTE_VISIBILITY_HIDDEN 1 CACHE INTERNAL "") + set(HAVE_ATTRIBUTE_VISIBILITY_INTERNAL 1 CACHE INTERNAL "") + set(HAVE_ATTRIBUTE_ALIGNED 1 CACHE INTERNAL "") + set(HAVE_BUILTIN_ASSUME_ALIGNED 1 CACHE INTERNAL "") + set(HAVE_BUILTIN_CTZ 1 CACHE INTERNAL "") + set(HAVE_BUILTIN_CTZLL 1 CACHE INTERNAL "") + set(HAVE_PTRDIFF_T 1 CACHE INTERNAL "") + set(HAVE_NO_INTERPOSITION 1 CACHE INTERNAL "") + set(FNO_LTO_AVAILABLE 1 CACHE INTERNAL "") +endif() + if (MSVC) #zlib-ng sets /utf-8 which clashes with /source-charset:utf-8 that we set centrally get_directory_property(dirCompileOptions COMPILE_OPTIONS) diff --git a/src/native/external/zstd.cmake b/src/native/external/zstd.cmake index a00fcea814275f..1d3b104ffe5974 100644 --- a/src/native/external/zstd.cmake +++ b/src/native/external/zstd.cmake @@ -17,6 +17,28 @@ set(ZSTD_BUILD_SHARED OFF) set(ZSTD_MULTITHREAD_SUPPORT OFF) set(ZSTD_LEGACY_SUPPORT OFF) +# Pre-cache zstd CMake checks to speed up configure for browser +if (CLR_CMAKE_TARGET_BROWSER) + set(C_FLAG_WALL 1 CACHE INTERNAL "") + set(CXX_FLAG_WALL 1 CACHE INTERNAL "") + set(C_FLAG_WEXTRA 1 CACHE INTERNAL "") + set(CXX_FLAG_WEXTRA 1 CACHE INTERNAL "") + set(C_FLAG_WUNDEF 1 CACHE INTERNAL "") + set(CXX_FLAG_WUNDEF 1 CACHE INTERNAL "") + set(C_FLAG_WSHADOW 1 CACHE INTERNAL "") + set(CXX_FLAG_WSHADOW 1 CACHE INTERNAL "") + set(C_FLAG_WCAST_ALIGN 1 CACHE INTERNAL "") + set(CXX_FLAG_WCAST_ALIGN 1 CACHE INTERNAL "") + set(C_FLAG_WCAST_QUAL 1 CACHE INTERNAL "") + set(CXX_FLAG_WCAST_QUAL 1 CACHE INTERNAL "") + set(C_FLAG_WSTRICT_PROTOTYPES 1 CACHE INTERNAL "") + set(LD_FLAG_WL_Z_NOEXECSTACK 1 CACHE INTERNAL "") + set(C_FLAG_QUNUSED_ARGUMENTS 1 CACHE INTERNAL "") + set(CXX_FLAG_QUNUSED_ARGUMENTS 1 CACHE INTERNAL "") + set(C_FLAG_WA_NOEXECSTACK 1 CACHE INTERNAL "") + set(CXX_FLAG_WA_NOEXECSTACK 1 CACHE INTERNAL "") +endif() + set(__CURRENT_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) set(BUILD_SHARED_LIBS OFF) FetchContent_MakeAvailable(zstd) diff --git a/src/native/libs/configure.cmake b/src/native/libs/configure.cmake index 42821749e8f6f5..4a697287d3bd54 100644 --- a/src/native/libs/configure.cmake +++ b/src/native/libs/configure.cmake @@ -14,6 +14,10 @@ if (CLR_CMAKE_TARGET_APPLE) # This ensures an even playing field. include_directories(SYSTEM /usr/local/include) add_compile_options(-Wno-poison-system-directories) +elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND CLR_CMAKE_TARGET_BROWSER) + # When cross-compiling for browser-wasm on macOS, suppress warnings about + # /usr/local/include which may be added by the toolchain (e.g., brew's clang) + add_compile_options(-Wno-poison-system-directories) elseif (CLR_CMAKE_TARGET_FREEBSD) include_directories(SYSTEM ${CROSS_ROOTFS}/usr/local/include) set(CMAKE_REQUIRED_INCLUDES ${CROSS_ROOTFS}/usr/local/include)