[erlang-questions] Building C code in dep with rebar3: c_src not found
Igor Clark
igor.clark@REDACTED
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 <igor.clark@REDACTED> 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.htm>
More information about the erlang-questions
mailing list