[erlang-questions] Building C code in dep with rebar3: c_src not found

Igor Clark <>
Thu Jan 24 01:58:42 CET 2019


Reading it back, I'm not sure if I made this very clear:

- project A is an OTP app containing C port code in c_src, and the above
rebar.config with port compiler info
- project B is another OTP app referencing project A as a source dependency
in project B's rebar config
- when I build project A in its own dir with 'rebar3 compile', it compiles
the C code as expected
- when I build project B in its own dir with 'rebar3 compile', it
recognises the port compiler dependency in project A's rebar.config,
downloads and compiles it, but then fails to compile project A as a dep,
saying "found no source files"

So I need some way for the port compiler, when running in the context of
the parent app A, to know the proper path for 'c_src' inside the source
dependency B. Can't see how it could be any problem with the port compiler,
not least because jiffy uses it fine, so I must be missing something!

Incidentally I added CXXFLAGS to the port_env as well, but no difference,
as expected. Clutching at straws somewhat there. ;-)

I also tried using a Makefile, which I guess is the intended rebar3 way,
and that seems to work - but I'd love to know what's happening here.

Cheers,
Igor



On Wed, Jan 23, 2019 at 7:35 PM Igor Clark <> wrote:

> Hi everyone,
>
> I have an simple app which has a C port in it. I have a rebar.config from
> which it builds correctly when I run 'rebar3 compile' inside the app
> directory:
>
> > { erl_opts, [debug_info] }.
> > { deps, [] }.
> >
> > { plugins, [
> >       { pc, { git, "https://github.com/blt/port_compiler.git", { tag,
> "v1.10.1" } } }
> > ] }.
> >
> > { provider_hooks, [
> >       { pre, [
> >               { compile, { pc, compile }},
> >               { clean, { pc, clean }}
> >       ] }
> > ] }.
> >
> > { port_specs, [
> >       { "priv/bin/my_port_binary", [
> >               "c_src/my_c_file.1.c",
> >               "c_src/subdir/my_c_file_2.c"
> >       ] }
> > ] }.
> >
> > { port_env, [
> >       { "CFLAGS", "$CFLAGS -Ic_src/ -g -Wall -Werror -O2" }
> > ] }.
>
>
> Compiling this works fine. The artifact is created in priv/bin, and
> running myapp:module_info() inside the shell shows the right details.
>
> However, when I try to include this app as a dependency, I get this error:
>
> > ===> Found no source files for:
> > "c_src/my_c_file.1.c"
> > ===> Found no source files for:
> > "c_src/subdir/my_c_file_2.c"
>
>
> I've included src, c_src and rebar.config in the 'files' entry in
> src/my_app.app.src.
>
> I've also included a jiffy dep as a test to make sure C code gets built
> correctly, and that works fine, but I can't see what jiffy's config has
> that I don't.
>
> Anyone know what I'm missing to make this work?
>
> Thanks very much!
> Igor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20190124/770aea99/attachment.html>


More information about the erlang-questions mailing list