GithubHelp home page GithubHelp logo

capnproto / ekam Goto Github PK

View Code? Open in Web Editor NEW
231.0 231.0 32.0 1.85 MB

Ekam Build System

License: Apache License 2.0

Cap'n Proto 0.94% QMake 0.73% C++ 84.10% Shell 3.61% C 9.69% Makefile 0.63% TypeScript 0.30%

ekam's Introduction

THIS IS THE V2 DEVELOPMENT BRANCH

On this branch, we may make breaking changes to the API at any time. Do not use this brach if you want stability. If you want "1.0 plus bug fixes", use the master branch.

For more, see the 1.0 release announcement:

https://capnproto.org/news/2023-07-28-capnproto-1.0.html


Cap'n Proto is an insanely fast data interchange format and capability-based RPC system. Think JSON, except binary. Or think Protocol Buffers, except faster. In fact, in benchmarks, Cap'n Proto is INFINITY TIMES faster than Protocol Buffers.

Read more...

ekam's People

Contributors

abliss avatar bretthoerner avatar harrishancock avatar isislovecruft avatar jclee avatar jyn514 avatar kamalmarhubi avatar kentonv avatar mikea avatar rreverser avatar tniessen avatar vlovich avatar zarvox avatar zenhack avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ekam's Issues

Add the ability to build a specific target, instead of everything at once

Right now, Ekam's only rule is "build everything you know how to build" (where "how to build" is determined by .ekam-rule files). This is great for building binaries, but makes feedback slow for tests, especially given #60. It would be nice to tell Ekam to only build what's necessary for a single test.

This also helps when build tasks are more expensive and take longer to fail than normal, e.g. when building with LTO. If Ekam allowed building only that binary, it would be much faster than also building every other binary with LTO (especially since LTO does most of the work at the link stage, so there's lot of repeated work).

Random crash while running `ekam -c`

The following happened randomly while I was doing a bunch of git rebase commands in the sandstorm directory while running make continuous

install: sandstorm/sandstorm.ekam-manifest
terminate called after throwing an instance of 'ekam::OsError'
  what():  inotify_rm_watch(inotify): Invalid argument
Aborted
Makefile:139: recipe for target 'continuous' failed
make: *** [continuous] Error 134

make fails with ccache-wrapped gcc

I've noticed that ekam fails to build when ccache is installed on Fedora 34, with a bunch of errors like ccache: error: Failed to create directory /var/cache/ccache/a/d: Permission denied. On Fedora, ccache seems to use a shared /var/cache/ccache directory, unlike my machines running Debian derivatives, which use ~/.ccache. Unfortunately, Fedora 34 also adds ccache (edit: more precisely, the directory containing ccache-wrapped compilers) to the PATH by default if it is installed, so it's quite easy to hit up against this if using Fedora.

Build fails due to kj/compat/http-test.c and http.c

I get build errors like this:

compile: kj/compat/http-test.c++
  /ekam-provider/canonical/kj/compat/http-test.c++:544:3: error: no matching constructor for initialization
    of 'const kj::(anonymous namespace)::HttpRequestTestCase'

To reproduce:

  1. Provision an Ubuntu 16.04.1 VM from https://vultr.com/.
  2. Install Sandstorm install deps. (I used clang-3.8.)
  3. Clone sandstorm and run make deps with deps -> ...
  4. Build ekam with make CXX=clang++.

(I know of no way that step 3 would be important, but I don't want to spend the time to reproduce with just ekam, and I want to capture exactly what I did.)

Note that if you edit the ekam Makefile to use C++14 instead of C++11, the build succeeds.

@dwrensha reports that this doesn't happen with clang-3.8 on Fedora, or on Arch.

std::logic_error when building using nix

I tried to package ekam using nix:

https://github.com/zenhack/ekam-nix

But got an error in the second stage of the build. The full log is below. It's possible Nix is doing some kind of sandboxing that is interacting badly with something ekam is trying to do; I'm a little fuzzy on the details of both. But throwing std::logic_error looks like a bug in ekam to me.

The nix build script isn't doing anything funny; the only novel bit is that it downloads and links the capnproto source itself, since nix builds don't have network access.

(I'd meant to report this much sooner, but got distracted...)

these derivations will be built:
  /nix/store/v9g3kpv513mz21qj955n4l6l9sihsnfg-ekam.drv
building '/nix/store/v9g3kpv513mz21qj955n4l6l9sihsnfg-ekam.drv'...
==== compiling bootstrap ekam ====
g++ -Isrc -std=c++14 src/base/sha256.cpp src/base/Promise.cpp src/base/OwnedPtr.cpp src/base/Hash.cpp src/base/Debug.cpp src/os/Subprocess.cpp src/os/Socket.cpp src/os/OsHandle.cpp src/os/File.cpp src/os/EventManager.cpp src/os/EventGroup.cpp src/os/EpollEventManager.cpp src/os/DiskFile.cpp src/os/ByteStream.cpp src/ekam/initNetworkDashboardStub.cpp src/ekam/ekam.cpp src/ekam/Tag.cpp src/ekam/SimpleDashboard.cpp src/ekam/MuxDashboard.cpp src/ekam/ExecPluginActionFactory.cpp src/ekam/Driver.cpp src/ekam/Dashboard.cpp src/ekam/CppActionFactory.cpp src/ekam/ConsoleDashboard.cpp src/ekam/ActionUtil.cpp src/ekam/Action.cpp -pthread -o bin/ekam-bootstrap
==== building ekam with ekam ====
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
  learn: ekam/rules/compile.ekam-rule
...(more)...
...(more)...
  learn: capnp/capnpc.ekam-rule
...(more)...
...(more)...
  learn: ekam/rules/proto.ekam-rule
...(more)...
...(more)...
  learn: ekam/rules/test.ekam-rule
...(more)...
...(more)...
  learn: ekam/rules/install.ekam-rule
...(more)...
...(more)...
  learn: ekam/rules/include.ekam-rule
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
  compile: ekam/rules/intercept.c
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
  capnpc: capnp/schema.capnp
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
  capnpc: capnp/rpc-twoparty.capnp
...(more)...
...(more)...
  capnpc: capnp/persistent.capnp
...(more)...
...(more)...
  capnpc: capnp/rpc.capnp
...(more)...
...(more)...
...(more)...
...(more)...
  capnpc: capnp/compiler/grammar.capnp
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
  capnpc: capnp/compiler/lexer.capnp
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
  capnpc: capnp/compat/json.capnp
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
  capnpc: capnp/c++.capnp
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
...(more)...
  learn: ekam/rules/intercept.ekam-rule
terminate called after throwing an instance of 'std::logic_error'
  what():  can't check failures while still running
make: *** [Makefile:33: all] Aborted (core dumped)
builder for '/nix/store/v9g3kpv513mz21qj955n4l6l9sihsnfg-ekam.drv' failed with exit code 2
error: build of '/nix/store/v9g3kpv513mz21qj955n4l6l9sihsnfg-ekam.drv' failed

ekam fails to build on arm64

https://asciinema.org/a/7F427JVyE6FGTFMYTtcjWxdPX

it will fail on arm64 with 2 gis , https://cloud.scaleway.com i can add more gigs even forcing make -j2
in gentoo-chroot.

sure its known meteor is a big deal for sandstorm ... however it would be nice to have ekam running ,
in a minimal sense , to at least try to build a few things ,

make ekam-minimal drop meteor deps (for now ) get the basic tool chain rocking.. s1 , s2 try and let it help me build deps and rebuild itself. getting meteor to build and not wine would be a plus.

arm64-ekam-bootstrap.zip

many new arm64 servers have A9's with far more cores than I can get for 1u xeons with similar/exact cost ..
dual/quad NVIDA Pascal/Tesla cards are on some of these also , since I do lots of Virtualization or need sometimes hash busting or cracking , piddling with getting sandstorm to run on such a beast is tempting to Frankenstien up...

capn can be added via distro emerge dev-libs/capnproto dev-libs/c-capnproto

https://gpo.zugaina.org/Search?search=capnp

dev-ml/capnp-ocaml
OCaml code generator plugin for the Cap'n Proto serialization framework
ML #/facepalm this even on an i7 will all the deps.... ...... took hours in virtualbox desktop..

dev-libs/capnproto
RPC/Serialization system with capabilities support
dev-python/pycapnp
Python wrapping of the Cap'n Proto library
dev-libs/c-capnproto
C library/compiler for the Cap'n Proto serialization/RPC protocol

Proper incremental builds

Per the readme:

Note that continuous building is the only way to do incremental builds with Ekam -- any time you run a new Ekam process, it always starts from scratch. I generally just leave Ekam running in a console window 24/7.

Leaving ekam running seems like a reasonable strategy for a workstation that you can leave on anyway, but I generally work from my laptop, and would prefer not to have to start a cold build each time I boot up the machine.

So it would be nice to have proper incremental builds that don't require a continuously running ekam.

`-c`: Don't reprint all failed tasks when only a single task is rebuilt and fails

Right now, when a C++ file fails to compile, Ekam will output something like this for each C++ file in the whole project:

✘ link: kj/debug-test.o
    ld.lld: error: undefined symbol: kj::_::Debug::Fault::fatal()
    >>> referenced by time.c++:303 (/ekam-provider/canonical/kj/time.c++:303)
    >>>               tmp/kj/time.o:(kj::operator*(kj::_::Stringifier, kj::Quantity<long, kj:
      :_::NanosecondLabel>))
    >>> referenced by time.c++:193 (/ekam-provider/canonical/kj/time.c++:193)
    >>>               tmp/kj/time.o:(kj::(anonymous namespace)::PosixClock::now() const)
    >>> referenced by time.c++:207 (/ekam-provider/canonical/kj/time.c++:207)
    >>>               tmp/kj/time.o:(kj::(anonymous namespace)::PosixMonotonicClock::now() 
      const)
    >>> referenced 70 more times
    
    ld.lld: error: undefined symbol: kj::_::Debug::Fault::~Fault()
    >>> referenced by time.c++:303 (/ekam-provider/canonical/kj/time.c++:303)
    >>>               tmp/kj/time.o:(kj::operator*(kj::_::Stringifier, kj::Quantity<long, kj:
      :_::NanosecondLabel>))
    >>> referenced by time.c++:193 (/ekam-provider/canonical/kj/time.c++:193)
    >>>               tmp/kj/time.o:(kj::(anonymous namespace)::PosixClock::now() const)
    >>> referenced by time.c++:207 (/ekam-provider/canonical/kj/time.c++:207)
    >>>               tmp/kj/time.o:(kj::(anonymous namespace)::PosixMonotonicClock::now() 
      const)
    >>> referenced 96 more times
    
    ld.lld: error: undefined symbol: kj::_::Debug::getOsErrorNumber(bool)
    >>> referenced by debug.h:544 (/ekam-provider/canonical/kj/debug.h:544)
    >>>               tmp/kj/time.o:(kj::_::Debug::SyscallResult kj::_::Debug::syscall<kj::(
      anonymous namespace)::PosixClock::now() const::'lambda'()>(kj::(anonymous namespace)::
      PosixClock::now() const::'lambda'()&&, bool))
    >>> referenced by debug.h:544 (/ekam-provider/canonical/kj/debug.h:544)
    >>>               tmp/kj/time.o:(kj::_::Debug::SyscallResult kj::_::Debug::syscall<kj::(
      anonymous namespace)::PosixMonotonicClock::now() const::'lambda'()>(kj::(anonymous 
    ...(log truncated; use -l to increase log limit)...

Then, if you change debug.c++ without fixing the error (e.g. you try a change that doesn't work), it will show the error from debug.c++, but it will also show red X's for each object file that failed to link, even though nothing's changed WRT to the object file since the last error.

✘ compile: kj/debug.c++
    /ekam-provider/canonical/kj/debug.c++:2:1: error: expected unqualified-id
✘ link: kj/common-test.o
✘ link: kj/memory-test.o
✘ compile: capnp/llvm-fuzzer-testcase.c++
✘ link: kj/encoding-test.o
✘ compile: capnp/schema-test.c++
✘ link: kj/async-xthread-test.o
...

It would be nice to only show the error for debug.c++, not all other files.

Build fails in /tmp

@garrison and I worked out that the underlying source of our problems getting ekam to build with nix is that ekam fails to build when building under /tmp; I can verify that it fails in the same way if I just do the normal build process in /tmp:

cd /tmp
git clone https://github.com/capnproto/ekam
cd ekam
make

The errors are complaints about not being able to find various files; full build log attached.

build.log

ekam-bootstrap can't be ccached

On my machine, compiling the bootstrap ekam takes 88sec. On a github runner, it's around 25sec. It could be sped up by ccache, but ccache can't compile multiple source files on one commandline. I'd like to replace the bootstrap's Makefile recipe to compile each source file separately and then link them together.

Touching compile.ekam-rule crashes Ekam

Pretty reliably AFAICT:

ekam: /ekam-provider/canonical/ekam/Driver.cpp:404: void ekam::Driver::ActionDriver::reset(): Assertion `!currentlyExecutingReturned' failed.

Don't wait until all tasks have failed before outputting error text

Due to Ekam's build model, it doesn't know whether a task will succeed later when more dependencies have finished building. As a result, it waits until all tasks have failed before outputting any errors. This is frustrating when the tasks take a long time to run (e.g. when one test out of several dozen fails), especially if the tasks are in fact independent.

I don't know if this can be solved in the general case, but #24 might help with the case where the tasks are independent since Ekam will know it doesn't need to wait for the other tests to fail.

Support for generating Makefiles/CMake_files/...

First I'd like to thank you for creating ekam - I always wanted to create a tool intercepting calls and figuring out what's going on with the buggy build. This tool though automates the whole process, which is awesome!

Anyway, this tool would be very useful even for projects which don't want to (or rather can't - which is IMHO vast majority of middle-sized and big projects) switch to ekam completely. Namely in a way, that ekam could pregenerate Makefile/CMake_files/... with "correct" dependencies, order of files etc.

Do you think such ekam client feature would make sense?

Ekam takes unnecessarily long for multi-step builds (almost all builds)

Imagine a simple C++ project with main.c++ and helper.c++. One possible execution for Ekam is:

  1. Compile main.c++ -> main.o
  2. Attempt to link main.o -> main (since it has a main symbol). Fail, since helper.o isn't yet compiled.
  3. Compile helper.c++ -> helper.o. Notice that the new object file has symbols that were missing in step 2.
  4. Link main.o + helper.o -> main

Step 2 is unnecessary and slows down the build. This problem becomes worse as more steps are added (e.g. if some .c++ or .h files are generated by capnp or another tool).

One possible way to fix this is to allow .ekam-rule files to specify a priority, so that .capnp files are built before .c files, and .c before .o.

Error building with glibc 2.33 because of _STAT_VER changes

The glibc maintainers have done something with the stat wrappers in 2.33: bminor/glibc@8ed005d

While running make to build ekam under glibc 2.33:

✘ learn: ekam/rules/intercept.ekam-rule
    src/ekam/rules/intercept.c: In function ‘direct_stat’:
    src/ekam/rules/intercept.c:671:21: error: ‘_STAT_VER’ undeclared (first use in this function)
      671 |   return real_xstat(_STAT_VER, path, sb);
          |                     ^~~~~~~~~
    src/ekam/rules/intercept.c:671:21: note: each undeclared identifier is reported only once for each function it appears in
    src/ekam/rules/intercept.c:672:1: warning: control reaches end of non-void function [-Wreturn-type]
      672 | }
          | ^

The intercept.c line in question:

return real_xstat(_STAT_VER, path, sb);

Note that ekam previously built on the same Linux install but a glibc upgrade broke compilation as seen above, so I suspect this issue is coming to Debian/Ubuntu eventually.

For now, I built an ekam binary in a Docker container using an older glibc, and I replaced the _STAT_VER in my host system's intercept.c with 3 and things seem to work. I figured I'd put this up now for anyone else Googling. I'm a bit out of my depth on what's going on in that glibc change, or why _STAT_VER didn't make it into anything under my /usr/include (I have no xstatver.h, for example), but I'll try to poke at it some more in a bit.

the compile rule should be smarter about when it can avoid rebuilds.

In particular, right now I'm doing some print debugging and tracing an issue I'm having in the bridge down into stuff defined in libkj. Adding a simple print statement to a .c++ file should only require re-building the one file, and re-linking anything that uses the resulting object. Instead, ekam is re-compiling a whole bunch of stuff downstream in capnp and in sandstorm.

Better support for "installed" dependencies

Ekam currently is very much designed to depend directly on the source code of dependencies and compile them as part of your own build. It is not very good at handling installed dependencies, especially installed dependencies that define their own Ekam rules, like Cap'n Proto.

(This is a very big project that I won't have time to work on any time soon.)

See capnproto/capnproto#229

ekam build seems to need c++14, not just c++11?

I'm certainly no expert on the difference, but:

  1. my build fails with an inscrutable error about a "body of constexpr function … not a return-statement"
  2. http://stackoverflow.com/questions/40604838/min-max-step-function-and-body-of-constexpr-function-not-a-return-statement suggests "The rules for constexpr functions were very strict in C++11. ... The rules were relaxed considerably in C++14."
  3. Changing -std=c++11 to -std=c++14 in Makefile seems to make the problem go away.

This is with gcc 5.4.0

bootstrap build fails with link error

$ make
==== compiling bootstrap ekam ====
g++ -Isrc -std=c++11 src/base/Debug.cpp src/base/Promise.cpp src/base/OwnedPtr.cpp src/base/Hash.cpp src/base/sha256.cpp src/os/EpollEventManager.cpp src/os/EventManager.cpp src/os/Subprocess.cpp src/os/File.cpp src/os/ByteStream.cpp src/os/Socket.cpp src/os/DiskFile.cpp src/os/OsHandle.cpp src/os/EventGroup.cpp src/ekam/ExecPluginActionFactory.cpp src/ekam/CppActionFactory.cpp src/ekam/MuxDashboard.cpp src/ekam/initNetworkDashboardStub.cpp src/ekam/Action.cpp src/ekam/Dashboard.cpp src/ekam/ekam.cpp src/ekam/Tag.cpp src/ekam/ConsoleDashboard.cpp src/ekam/Driver.cpp src/ekam/SimpleDashboard.cpp src/ekam/ActionUtil.cpp -pthread -o bin/ekam-bootstrap
==== building ekam with ekam ====
...

link: capnp/compiler/capnpc-c++.o
  tmp/capnp/stringify.o: In function `capnp::(anonymous namespace)::whichFieldType(capnp::StructSchema::Field const&)':
  stringify.c++:(.text+0x4a): undefined reference to `capnp::_::PointerReader::getStruct(capnp::word const*) const'
  tmp/capnp/stringify.o: In function `capnp::_::enumString(unsigned short, capnp::_::RawBrandedSchema const&)':
  stringify.c++:(.text+0xd2): undefined reference to `capnp::_::ListReader::getStructElement(unsigned int) const'
  stringify.c++:(.text+0x10f): undefined reference to `capnp::Text::Reader capnp::_::PointerReader::getBlob<capnp::Text>(void const*, unsigned 
    int) const'
  tmp/capnp/stringify.o: In function `capnp::(anonymous namespace)::print(capnp::DynamicValue::Reader const&, capnp::schema::Type::Which, capnp
    ::(anonymous namespace)::Indent, capnp::(anonymous namespace)::PrintMode)':
  stringify.c++:(.text+0xc64): undefined reference to `capnp::Text::Reader capnp::_::PointerReader::getBlob<capnp::Text>(void const*, unsigned 
    int) const'
  stringify.c++:(.text+0xef2): undefined reference to `capnp::Text::Reader capnp::_::PointerReader::getBlob<capnp::Text>(void const*, unsigned 
    int) const'
  stringify.c++:(.text+0x10e3): undefined reference to `capnp::_::ListReader::getStructElement(unsigned int) const'
  stringify.c++:(.text+0x298d): undefined reference to `capnp::Text::Reader capnp::_::PointerReader::getBlob<capnp::Text>(void const*, unsigned
    int) const'
  tmp/capnp/stringify.o: In function `capnp::prettyPrint(capnp::DynamicStruct::Builder)':
  stringify.c++:(.text+0x35e4): undefined reference to `capnp::_::StructBuilder::asReader() const'
  tmp/capnp/stringify.o: In function `capnp::operator*(kj::_::Stringifier, capnp::DynamicStruct::Builder const&)':
  stringify.c++:(.text+0x38a4): undefined reference to `capnp::_::StructBuilder::asReader() const'
  tmp/capnp/dynamic.o: In function `capnp::DynamicEnum::getEnumerant() const':
  dynamic.c++:(.text+0x3b): undefined reference to `capnp::_::ListReader::getStructElement(unsigned int) const'
  tmp/capnp/dynamic.o: In function `capnp::DynamicList::Builder::asReader() const':
  dynamic.c++:(.text+0x2e4): undefined reference to `capnp::_::ListBuilder::asReader() const'
  tmp/capnp/dynamic.o: In function `capnp::_::PointerHelpers<capnp::DynamicCapability, (capnp::Kind)7>::getDynamic(capnp::_::PointerReader, 
    capnp::InterfaceSchema)':
  dynamic.c++:(.text+0x735): undefined reference to `capnp::_::PointerReader::getCapability() const'
  tmp/capnp/dynamic.o: In function `capnp::_::PointerHelpers<capnp::DynamicCapability, (capnp::Kind)7>::getDynamic(capnp::_::PointerBuilder, 
    capnp::InterfaceSchema)':
  dynamic.c++:(.text+0x770): undefined reference to `capnp::_::PointerBuilder::getCapability()'
  tmp/capnp/dynamic.o: In function `capnp::BuilderFor_<capnp::DynamicStruct, (kind<capnp::DynamicStruct>)()>::Type capnp::Orphan<capnp::
  ...(log truncated; use -l to increase log limit)...

It works fine if I revert the capnproto dependency to one commit before capnproto/capnproto#192.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.