Skip to content

Libcpp compilation integration#976

Open
123R3N321 wants to merge 26 commits intomainfrom
libcpp-ren
Open

Libcpp compilation integration#976
123R3N321 wants to merge 26 commits intomainfrom
libcpp-ren

Conversation

@123R3N321
Copy link
Copy Markdown

Integrate libcpp compilation into main codebase

  1. libcpp compilation toolchain cmake file and compile .sh script

2.documentation in .md

  1. TODO: CI integration

Document changes made by Alice and Ren in an attempt to compile .wasm
from cpp source file
Create simple cpp program using <algorithms> header to test libcpp
headers
Change compilation command from clang to clang++, now the compile script
compiles cpp instead of c. Future changes needed to accomodate both

Also note due to mysterious reasons absolute path is needed when
callling this compile script: scripts/lind_compile <other args>
Add error msg of cpp compilation attempt, which is being fixed right now
Add ignore for llvm external dependencies
Add .cmake to be used for build script to build llvm for .wasm bin
result
Add build script for llvm for .wasm compilation result. Note the
compiled wasm32 .a archive file must be manually migrated to the sysroot
under /build
Modify llvm-project source code needed for compilation. Not tracked in
git but documented and Ren will submit another PR for the documentation
Add cosmetic for .md rendering
Copy link
Copy Markdown
Member

@Yaxuan-w Yaxuan-w left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to discuss how we want to standardize cpp testing.

  • I'm thinking to have a separate folder under tests/ called tests/cpp/ for all cpp unit test
  • cpp compilation scripts can be put under scripts/cpp and put lind_compile into scripts/c, rust version into scripts/rust (or sth similar)

Comment thread scripts/lind_compile
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cpp compilation needs to be separated from normal c compilation (keep c)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Totally agree. I also suggest if we have sub dirs to indicate what source code language we are compiling from, can we name the scripts in a more intuitive way? something like scripts/cpp/compile and scripts/rust/compile, instead of "lind_compile"

also, this implies a complete overhaul on the entire lind_compile script for each additional language (such as updating all the echo prompts with -h flag). I think it will be fun to work on.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is better to not touch the existing path for original lind_compile for clang and .c compilation; I plan to simply create a separate lind_compile_cpp.sh at the same directory level as the lind_compile script and add corresponding tasks to the CI flow.

The existing CI flow worries me as the workflow is very complicated and any changes to the path of original lind_compile might cause issues. The call chain: e3e.yml -> dockerfile.e2e-> Makefile->test_runner.py->check_reports.py

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah let's do that.

Comment thread scripts/lind_compile Outdated
"--sysroot=${SYSROOT}"
--target=wasm32-unknown-wasi
-Wl,--import-memory,--export-memory,--max-memory=67108864,--export="__stack_pointer",--export=__stack_low,--export=__tls_base
-Wl,--import-memory,--export-memory,--max-memory=67108864,--export="__stack_pointer",--export=__stack_low
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to include --export=__tls_base

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okie!

Comment thread scripts/lind_compile Outdated
--target=wasm32-unknown-wasi
-Wl,--import-memory,--export-memory,--max-memory=67108864,--export="__stack_pointer",--export=__stack_low,--export=__tls_base
-isystem $SYSROOT/include/wasm32-wasi/c++/v1
-Wl,--import-memory,--export-memory,--max-memory=67108864,--export="__stack_pointer",--export=__stack_low
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to include --export=__tls_base

@rennergade
Copy link
Copy Markdown
Contributor

I think we need to move most of this to the lind-wasm-apps repo.

We should add the integrations to compile cpp into the lind_compile script however. It should just check that libcpp is properly installed and fail gracefully with "libcpp not installed" error if not.

@123R3N321
Copy link
Copy Markdown
Author

@m-hemmings regarding the CI problem:

Nick has brought to my attention that the current workaround for libcpp header involves this workflow: git clone llvm-18 ->modification of llvm source code -> compile archive files -> copy over to /build/sysroot -> sysroot provides dependency for clang++ to compile cpp source code.

This is problematic. On the one hand, llvm is big and preserving their source code in our repo is confusing; on the other hand, as Alice points out:

Source code and scripts in separate repos will make things hard to understand. We can use prebuilt libcpp.a for ci

However, this implies that, should there be any upgrade of llvm to version beyond 18, we will need to re-create this entire workflow to compile an updated version of the .a archive(s) needed for libcpp header support. I will do my best to document this workflow and, for future improvements, automate the process as far as I can

Nick also points out that we are using llvm-16 in lind-wasm-apps repo, see commit 0e78686; while my PR for lind-wasm repo is now using llvm-18, this is consistent with the docker config in this repo.

@tashabits
Copy link
Copy Markdown
Member

@m-hemmings regarding the CI problem:

Nick has brought to my attention that the current workaround for libcpp header involves this workflow: git clone llvm-18 ->modification of llvm source code -> compile archive files -> copy over to /build/sysroot -> sysroot provides dependency for clang++ to compile cpp source code.

This is problematic. On the one hand, llvm is big and preserving their source code in our repo is confusing; on the other hand, as Alice points out:

Source code and scripts in separate repos will make things hard to understand. We can use prebuilt libcpp.a for ci

However, this implies that, should there be any upgrade of llvm to version beyond 18, we will need to re-create this entire workflow to compile an updated version of the .a archive(s) needed for libcpp header support. I will do my best to document this workflow and, for future improvements, automate the process as far as I can

Nick also points out that we are using llvm-16 in lind-wasm-apps repo, see commit 0e78686; while my PR for lind-wasm repo is now using llvm-18, this is consistent with the docker config in this repo.

Thanks for writing this up. I agree that the current approach puts us in an awkward spot: keeping LLVM source in the repo is heavy and confusing, but moving all of the logic somewhere else also makes the workflow harder to understand and maintain.

I think there is a cleaner middle ground. Instead of treating libc++ support as something we rebuild from LLVM source during normal CI, we could treat it as a versioned toolchain artifact.

Concretely, I would suggest:

  • Keep one documented build script in this repo that knows how to produce the exact libc++ headers and archive files we need for a given LLVM version.
  • Run that script only when we intentionally upgrade LLVM or change the libc++ workflow.
  • Publish the result as a named artifact, for example an LLVM-versioned sysroot overlay or tarball.
  • Have CI download and unpack that artifact instead of cloning and rebuilding LLVM as part of ordinary PR validation.
  • Add one small smoke test in CI that compiles a trivial .cc file with clang++ so we catch regressions immediately.

That gives us a few benefits:

  • The normal CI path stays much smaller and easier to reason about.
  • We keep the process reproducible because the generation script still lives here.
  • We avoid preserving a large LLVM source tree in the repo.
  • Future LLVM upgrades become an intentional refresh of a pinned artifact.

On the versioning point, I do think it would help to align on a single LLVM major version across repos if we can. This repo is already pinned to LLVM 18 in Docker, so moving lind-wasm-apps to the same version would make the overall story much easier to follow.

So in short, my suggestion would be:

  1. Keep the build recipe in-repo.
  2. Stop keeping LLVM source in-repo for day to day CI.
  3. Publish a prebuilt, versioned libc++ support artifact for CI consumption.
  4. Add a simple C++ compile smoke test so the setup stays honest.

What does everyone think about that?

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

End-to-End Test Report

Test Preview

Unified Test Report

grate harness

MetricValue
Total10
Success10
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

interposing-calls/interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interposing-calls/interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 3
Exiting...

[Grate|interpose-exit] PASS

STDERR:

interposing-calls/interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 4 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

race-test_grate.cSuccess
STDOUT:
pass

STDERR:

simple-tests/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|geteuid] Handling function ptr: 3 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases197
Number of Successes196
Number of Failures1
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure1
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.046448s4.309161s
Success
chdir_getcwd.cSuccessNone0.046239s4.283616s
Success
chmod.cSuccessNone0.054089s4.276556s
Success
clock_gettime_highlevel.cSuccessNone0.117408s4.491615s
Success
clock_gettime_simple.cSuccessNone0.041095s4.281810s
Success
cloexec.cSuccessNone0.050209s3.973808s
Success
close.cSuccessNone0.056561s4.319087s
Success
creat_access.cSuccessNone0.050077s4.333374s
Success
doubleclose.cSuccessNone0.042375s3.859863s
Success
dup.cSuccessNone0.043365s4.256929s
Success
dup2.cSuccessNone0.047569s3.927522s
Success
dup3.cSuccessNone0.045562s4.315696s
Success
dupwrite.cSuccessNone0.049809s3.902471s
Success
etc_conf.cSuccessNone0.044033s4.261110s
Success
fchdir.cSuccessNone0.053133s4.332830s
Success
fchmod.cSuccessNone0.051173s4.306699s
Success
fcntl.cSuccessNone0.049868s4.326998s
Success
fdatasync.cSuccessNone0.049217s4.281636s
Success
filetest.cSuccessNone0.049560s3.936932s
Success
filetest1000.cSuccessNone0.056437s3.922592s
Success
flock.cSuccessNone0.057453s4.414321s
Success
fstat.cSuccessNone0.051614s4.304155s
Success
fstatfs.cSuccessNone0.043487s4.270895s
Success
fsync.cSuccessNone0.048594s4.317850s
Success
ftruncate.cSuccessNone0.052904s4.349100s
Success
getcwd.cSuccessNone0.045861s4.351219s
Success
getrandom.cSuccessNone0.049560s4.331193s
Success
ioctl.cSuccessNone0.052800s4.261081s
Success
link.cSuccessNone0.052987s4.305552s
Success
locale_test.cSuccessNone0.062765s6.112623s
Success
lseek.cSuccessNone0.054933s4.373457s
Success
mkdir_rmdir.cSuccessNone0.049661s4.308963s
Success
mkfifo_test.cSuccessNone0.055724s4.416766s
Success
mknod.cSuccessNone0.047699s4.296652s
Success
nocancel_io.cSuccessNone0.052029s5.443273s
Success
open.cSuccessNone0.043857s4.275103s
Success
openat.cSuccessNone0.044697s4.282567s
Success
path_conversion_safety.cSuccessNone0.052757s4.306743s
Success
pread_pwrite.cSuccessNone0.046227s4.283899s
Success
printf.cSuccessNone0.040458s3.894875s
Success
prlimit64.cSuccessNone0.043470s3.891523s
Success
read.cSuccessNone0.050852s4.302704s
Success
readbytes.cSuccessNone0.046197s3.910806s
Success
readlink.cSuccessNone0.049308s4.283324s
Success
readlinkat.cSuccessNone0.050782s4.346479s
Success
readv_writev_test.cSuccessNone0.050999s4.290193s
Success
rename.cSuccessNone0.051756s4.316608s
Success
sc-writev.cSuccessNone0.050147s4.326982s
Success
stat.cSuccessNone0.049762s4.283237s
Success
statfs.cSuccessNone0.044610s4.306482s
Success
sync_file_range.cSuccessNone0.047826s4.322837s
Success
timespec_time_t_compat.cSuccessNone0.045913s5.525005s
Success
truncate.cSuccessNone0.050694s4.340341s
Success
unlink.cSuccessNone0.052751s4.340594s
Success
unlinkat.cSuccessNone0.052714s4.337253s
Success
write.cSuccessNone0.043076s3.883805s
Success
writeloop.cSuccessNone0.051702s3.873747s
Success
writepartial.cSuccessNone0.050236s3.883551s
Success
writev.cSuccessNone0.050713s4.301664s
Success
Math Tests
math_link_smoke.cSuccessNone0.053328s3.928093s
Success
math_tests.cSuccessNone0.056032s4.071071s
Success
Memory Tests
brk.cSuccessNone0.046830s4.282116s
Success
fork_large_memory.cSuccessNone0.078545s4.484730s
Success
malloc.cSuccessNone0.045014s3.884265s
Success
malloc_large.cSuccessNone0.045677s4.278723s
Success
memcpy.cSuccessNone0.044585s3.864130s
Success
memory_error_test.cSuccessNone0.050988s4.309940s
Success
mmap.cSuccessNone0.041490s4.300743s
Success
mmap_aligned.cSuccessNone0.043430s4.274253s
Success
mmap_complicated.cSuccessNone0.048519s4.323577s
Success
mmap_file.cSuccessNone0.050873s4.308581s
Success
mmap_shared.cSuccessNone0.048760s4.308491s
Success
mmaptest.cSuccessNone0.044317s4.269434s
Success
mprotect.cSuccessNone0.043590s4.287085s
Success
mprotect_boundary.cSuccessNone0.043319s4.292127s
Success
mprotect_end_region.cSuccessNone0.042145s4.278203s
Success
mprotect_middle_region.cSuccessNone0.042728s4.309800s
Success
mprotect_multiple_times.cSuccessNone0.043772s4.268611s
Success
mprotect_same_value.cSuccessNone0.043990s4.240596s
Success
mprotect_spanning_regions.cSuccessNone0.044491s4.260593s
Success
sbrk.cSuccessNone0.044447s4.256638s
Success
segfault.cSuccessNone0.050546s4.319283s
Success
shm.cSuccessNone0.049476s4.347083s
Success
shmtest.cSuccessNone0.044001s4.332246s
Success
tcache_test.cFailureUnknown_Failure0.052725s4.466430s
tcache reuse: yes
failed to run main module

Caused by:
0: failed to invoke command default
1: memory fault at wasm address 0xfff9bda8 in linear memory of size 0x100000000
2: wasm trap: out of bounds memory access

thread_malloc_sequential.cSuccessNone0.052861s4.457878s
Success
vtable.cSuccessNone0.055313s3.935089s
Success
Networking Tests
accept4.cSuccessNone0.053935s4.359320s
Success
dns_resolve_test.cSuccessNone0.049742s5.964857s
Success
dnstest.cSuccessNone0.049992s4.312908s
Success
epoll_edge_triggered.cSuccessNone0.209274s4.577059s
Success
epollcreate1.cSuccessNone0.055592s4.326784s
Success
error_handling_net.cSuccessNone0.058653s4.380693s
Success
getaddrinfo_test.cSuccessNone0.054394s6.060535s
Success
getaddrinfo_unspec.cSuccessNone0.049977s6.040521s
Success
gethostname.cSuccessNone0.043097s3.891416s
Success
getifaddrs.cSuccessNone0.051177s4.400824s
Success
getsockname.cSuccessNone0.052946s4.351305s
Success
getsockopt.cSuccessNone0.054791s4.357736s
Success
ipv6_basic.cSuccessNone0.055105s4.356140s
Success
makepipe.cSuccessNone0.043931s3.946674s
Success
nonblocking_eagain.cSuccessNone0.054559s4.352020s
Success
pipe.cSuccessNone0.052111s4.336312s
Success
pipe2.cSuccessNone0.051949s4.312668s
Success
pipeinput.cSuccessNone0.055441s4.439960s
Success
pipeinput2.cSuccessNone0.053475s4.319274s
Success
pipeonestring.cSuccessNone0.052937s4.338745s
Success
pipepong.cSuccessNone0.051742s4.381992s
Success
pipewrite.cSuccessNone0.046120s4.271380s
Success
poll.cSuccessNone0.051110s4.325688s
Success
recvfrom-sendto.cSuccessNone0.052680s4.304122s
Success
sendmsg_recvmsg_test.cSuccessNone0.050984s4.344132s
Success
serverclient.cSuccessNone0.054315s4.005061s
Success
shutdown.cSuccessNone0.053005s3.913264s
Success
shutdown_fork.cSuccessNone0.051060s4.338871s
Success
simple-select.cSuccessNone0.052036s4.328909s
Success
simple_epoll.cSuccessNone0.049966s4.296202s
Success
socket.cSuccessNone0.049723s3.917513s
Success
socket_cloexec.cSuccessNone0.050177s4.297037s
Success
socket_options_advanced.cSuccessNone0.057591s4.388560s
Success
socketepoll.cSuccessNone0.049695s3.928880s
Success
socketpair.cSuccessNone0.050991s4.361787s
Success
socketselect.cSuccessNone0.051024s4.357766s
Success
udp_send_recv.cSuccessNone0.160131s4.471403s
Success
uds-getsockname.cSuccessNone0.050511s4.288205s
Success
uds-nb-select.cSuccessNone2.060796s6.524850s
Success
uds-serverclient.cSuccessNone0.054270s4.371897s
Success
uds-socketselect.cSuccessNone0.051103s3.944687s
Success
writev_socket.cSuccessNone0.057820s4.438432s
Success
Process Tests
barrier_test.cSuccessNone0.049210s4.470897s
Success
chain_thread.cSuccessNone1.050583s5.472855s
Success
ctor_syscall_test.cSuccessNone0.041186s4.327230s
Success
cxa_atexit_test.cSuccessNone0.046725s3.914612s
Success
execve_shebang.cSuccessNone0.049956s4.312926s
Success
exit.cSuccessNone0.047367s3.896327s
Success
exit_failure.cSuccessNone0.049519s3.953208s
Success
exit_group_thread.cSuccessNone0.052246s4.495117s
Success
flockfile_test.cSuccessNone0.049948s4.473778s
Success
fork2malloc.cSuccessNone0.052462s4.331865s
Success
fork_select.cSuccessNone0.049244s4.355163s
Success
fork_simple.cSuccessNone0.047961s4.322145s
Success
fork_syscall.cSuccessNone0.054101s4.405815s
Success
fork_tls_ctype.cSuccessNone0.054529s4.402528s
Success
forkandopen.cSuccessNone0.052115s4.352971s
Success
forkdup.cSuccessNone0.052192s3.965308s
Success
forkexecuid.cSuccessNone0.048065s4.428195s
Success
forkexecv-arg.cSuccessNone0.048243s4.419416s
Success
forkexecv.cSuccessNone0.046991s4.415398s
Success
forkfiles.cSuccessNone0.050543s4.381810s
Success
forkmalloc.cSuccessNone0.051042s4.327020s
Success
forknodup.cSuccessNone0.052471s4.328478s
Success
function-ptr.cSuccessNone0.044566s4.256821s
Success
getegid_syscall.cSuccessNone0.050079s4.365122s
Success
getgid_syscall.cSuccessNone0.052028s4.402643s
Success
getpid.cSuccessNone0.044133s4.284045s
Success
getpid_syscall.cSuccessNone0.052513s4.388864s
Success
getppid.cSuccessNone0.051535s4.358463s
Success
getppid_syscall.cSuccessNone0.054100s4.390808s
Success
getuid.cSuccessNone0.050576s4.294851s
Success
getuid_syscall.cSuccessNone0.049752s4.323311s
Success
hello-arg.cSuccessNone0.042527s3.894170s
Success
hello.cSuccessNone0.042087s3.894619s
Success
longjmp.cSuccessNone0.041979s3.932125s
Success
mutex.cSuccessNone2.053795s6.582238s
Success
printf_deadlock_smoke.cSuccessNone0.059789s4.644165s
Success
printf_thread_test.cSuccessNone0.048633s4.486114s
Success
sem_forks.cSuccessNone0.054148s4.385376s
Success
setsid.cSuccessNone0.044647s3.953425s
Success
template.cSuccessNone0.050706s4.371821s
Success
test_exec_nofork.cSuccessNone0.049205s4.363007s
Success
test_unlink_open_file.cSuccessNone0.045268s3.894472s
Success
thread-test.cSuccessNone0.044493s4.430691s
Success
thread.cSuccessNone0.045167s4.418401s
Success
thread_cageid_race.cSuccessNone0.045720s4.414930s
Success
tls_test.cSuccessNone0.047693s4.458853s
Success
uname.cSuccessNone0.043887s4.308328s
Success
wait.cSuccessNone2.047653s5.969147s
Success
waitpid_anychild.cSuccessNone0.050325s4.350737s
Success
waitpid_syscall.cSuccessNone1.049917s5.378961s
Success
waitpid_wnohang.cSuccessNone0.051360s3.973659s
Success
Signal Tests
alarm.cSuccessNone7.048920s10.958216s
Success
eintr_fork_signal.cSuccessNone1.052124s5.327883s
Success
kill.cSuccessNone1.061291s5.366428s
Success
setitimer.cSuccessNone7.049217s10.963683s
Success
sigalrm.cSuccessNone2.052481s5.960112s
Success
sigchld.cSuccessNone1.052167s4.978745s
Success
signal-fork.cSuccessNone4.053632s7.977422s
Success
signal-simple.cSuccessNone0.054332s3.950884s
Success
signal_SIGCHLD.cSuccessNone0.049154s4.322231s
Success
signal_fork.cSuccessNone0.046199s4.351418s
Success
signal_int_ignored.cSuccessNone2.050213s6.368581s
Success
signal_kill_cleanup.cSuccessNone1.047599s5.331682s
Success
signal_procmask.cSuccessNone0.046081s4.314881s
Success
signal_recursive.cSuccessNone0.044433s3.881102s
Success
signal_sa_mask.cSuccessNone0.054040s3.949470s
Success
sigpipe.cSuccessNone1.051398s5.408193s
Success
sigprocmask.cSuccessNone1.049283s4.913198s
Success
Fail Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Memory Tests
mmap-negative1.cSuccessNone0.107810s4.646358s
Success
mmap-negative2.cSuccessNone0.134803s4.487298s
Success
Signal Tests
signal_resethand.cSuccessNone1.049238s4.994428s
Success

Add libcpp-test and libcpp-out stages.
Increase verbose printf for debugging.
Add /artifact directory verification.
Adjust script calling relative path.
Add tools to dependency path.
Add verbosity in compile step.
Adjust read-only mount to writable.
Add compilation success flag check.
Add libcpp-out explicit dependency.
Move from /trial to /tests/unit-tests/cpp/
combine libcpp workflow into existing ci; temporarily change trigger to
any push for testing purposes.
Change faile-to-upload consequence from error to warn.
Add build target to override default behavior of using prev stage
Now report should be generated.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants