Closed ghost closed 8 years ago
Just to clarify: I'm doing make --no-print-directory examples
instead of make examples
to get around a different problem with what I think is a superfluous -w that's getting passed to make somewhere. If I just do make examples
:
(master *%=) mike@docker1:~/firmament.io/firmament$ make examples
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/base all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/base'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/base'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/messages all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/messages'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/messages'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/misc all
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/platforms all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/misc'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/misc'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/engine/executors all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/platforms'
make -C sim all
make[2]: Nothing to be done for `all'.
make -C unix all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/engine/executors'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/engine/executors'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/sim/dfs all
make[2]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/platforms'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/storage all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/sim/dfs'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/sim/dfs'
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/storage'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/storage'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/scheduling all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/scheduling'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/scheduling'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/scheduling/flow all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/scheduling/flow'
make -C sim all
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/scheduling/simple all
make[2]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/scheduling/flow'
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/scheduling/simple'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/scheduling/simple'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/engine all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/engine'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/engine'
make --jobserver-fds=3,5 -j -C /home/mike/firmament.io/firmament/src/examples all
make[1]: Entering directory `/home/mike/firmament.io/firmament/src/examples'
make[2]: Entering directory `/home/mike/firmament.io/firmament/src/examples/hello_world'
make[2]: *** No rule to make target `w'. Stop.
make[2]: Leaving directory `/home/mike/firmament.io/firmament/src/examples/hello_world'
make[2]: Entering directory `/home/mike/firmament.io/firmament/src/examples/fibonacci'
make[2]: *** No rule to make target `w'. Stop.
make[2]: Leaving directory `/home/mike/firmament.io/firmament/src/examples/fibonacci'
make[2]: Entering directory `/home/mike/firmament.io/firmament/src/examples/r2d2_trace_process'
make[2]: *** No rule to make target `w'. Stop.
make[2]: Leaving directory `/home/mike/firmament.io/firmament/src/examples/r2d2_trace_process'
make[2]: Entering directory `/home/mike/firmament.io/firmament/src/examples/timespin'
make[2]: *** No rule to make target `w'. Stop.
make[2]: Leaving directory `/home/mike/firmament.io/firmament/src/examples/timespin'
make[2]: Entering directory `/home/mike/firmament.io/firmament/src/examples/store_example'
make[2]: *** No rule to make target `w'. Stop.
make[2]: Leaving directory `/home/mike/firmament.io/firmament/src/examples/store_example'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/mike/firmament.io/firmament/src/examples'
make: *** [examples] Error 2
So, after recursing into src/examples/hello_world it thinks w
is the target. Adding --no-print-directory
cleared this one up though.
Thansk for the report, I'll look into this.
My hunch is that there is a problem with the statically linked version of TaskLib that these examples use. In practice, these example applications are of relatively little value: as they require TaskLib to be linked at compilation time, they're a lot less flexible than simply using Firmament's support for dynamically injecting TaskLib via LD_PRELOAD
(this is what happens by default, unless the inject_task_lib
field of the JobDescriptor
protobuf is unset on job submission). Hence, we've transitioned away from using the examples, and can probably just drop them from the code base in the long run.
(That said, once we move to having native container support in the standalone cluster manager, TaskLib will be superfluous either way. It was a "hack" in order to get tasks to report their liveness and statistics to Firmament, but it's not required when we have containers that we can monitor externally.)
Thanks for reporting the build issue, too -- I can reproduce that one, and will look into what's happening there. In general, we are planning to transition to using CMake (rather than our rather cobbled-together build system) in the future, but this is worth fixing no matter what.
Ah, ok, thanks for the reply. I will look more closely at the dynamic TaskLib and forget about these statically linked examples in that case.
PS Native container support sounds very exciting.
@mgoelzer The dynamically linked task lib is injected automatically if you pass the correct --task_lib_dir
argument to the coordinator on startup (normally, this is ${PWD}/build/engine
if ${PWD}
is the root of the Firmament source tree. That way, any binary should be runnable as a Firmament task.
Re-opening this issue to track fixing the examples build issues.
This had been long since fixed already, but I've now ported the examples build to CMake as well, and improved error reporting for the kind of situations encountered when using the example binaries with statically linked TaskLib. Resolving :)
I'm having trouble getting
make examples
to work. I get a linker error:which I assume means there is some additional shared library I ought to be linking against, but I can't figure out what it is.
Full output starting from a make clean of the repo is below. System is Ubuntu 14.04 with boost 1.55.0 and clang++/llvm 3.4.
Any ideas?