I see.

I was afraid that the C structs may change in between different
versions of the library. If the structs are re-analyzed when the
wrapper is installed, this would not be an issue.

-erik

On Sun, Nov 16, 2014 at 2:58 PM, Tim Holy <[email protected]> wrote:
> The only person who needs to use Clang.jl is the package developer. Clang
> writes *.jl files that save you the trouble of keyboarding all the julia
> equivalents of the C structs. It also generates the ccall wrappers. You then
> write your package on top of those generated files. Clang is therefore only a
> dependency for the developer, not for the user. That said, if you've already
> written all your types, Clang won't provide you with much benefit.
>
> Quite a few packages use Clang, but one I've been involved with is CUDArt.jl.
>
> --Tim
>
>
> On Sunday, November 16, 2014 01:01:42 PM Erik Schnetter wrote:
>> Thanks for all the pointers! Things are now working fine without
>> wrapper functions but with 120 lines of immutable type declarations.
>> Clang.jl sounds interesting, but would probably make hwloc.jl too
>> difficult to use if it is a prerequisite. Let's see how often the
>> structs of hwloc change with future versions.
>>
>> hwloc is a portable library that determines the number of cores (and
>> many other properties) of the local machine: see
>> <https://github.com/eschnett/hwloc.jl>.
>>
>> -erik
>>
>> On Sun, Nov 16, 2014 at 12:41 PM, Jake Bolewski <[email protected]>
> wrote:
>> > No need to flatten if everything is immutable.  This file has some
>> > examples
>> > of wrapping structs of structs
>> > https://github.com/jakebolewski/LibGit2.jl/blob/cac78b5c03531b5afbcb0ae042
>> > 538dd351527752/src/types.jl#L19.>
>> > On Sunday, November 16, 2014 12:33:39 PM UTC-5, Tim Holy wrote:
>> >> AFAIK no need to flatten.
>> >>
>> >> Since Isaiah didn't advertise it himself, I'll mention his Clang.jl
>> >> package,
>> >> which I've found to be a big help in such situations. It's just possible
>> >> you
>> >> may not need any C glue code.
>> >>
>> >> --Tim
>> >>
>> >> On Sunday, November 16, 2014 12:15:50 PM Erik Schnetter wrote:
>> >> > Thanks for the pointers on immutable types.
>> >> >
>> >> > Is it possible to access structs inside structs this way? That a
>> >> > struct inside a struct, not a pointer inside a struct. Is an immutable
>> >> > type again a bits type? Or do I need to flatten the structs to make
>> >> > this work?
>> >> >
>> >> > -erik
>> >> >
>> >> > On Sun, Nov 16, 2014 at 11:16 AM, Isaiah Norton <[email protected]>
>> >>
>> >> wrote:
>> >> > >> The library defines some C structs that are part of the API. My
>> >> > >> current approach uses wrapper C functions to access struct elements.
>> >> > >> Is there a better way?
>> >> > >
>> >> > > It depends how complicated are the structs. Structs can often be
>> >> > > reflected
>> >> > > as Julia types, as long as isbits(TypeName) == true, and accessed
>> >> > > with
>> >> > > unsafe_load (see for example PyCall's definitions of PyObject_*).
>> >> > > Some
>> >> > > tricky spots include fixed-size arrays and unions (strictly speaking
>> >> > > you
>> >> > > can make an aggregate element having the maximal size in the union,
>> >> > > and
>> >> > > then do bitshifts manually. but there is no automatic support).
>> >> > >
>> >> > > There is also the StrPack.jl package, which calculates the
>> >> > > appropriate
>> >> > > memory layout for a given struct and provides
>> >> > > serialization/deserialization.>
>> >> > >
>> >> > >> I thus I need to build this wrapper file as well. I created a
>> >> > >> SimpleBuild rule for this. However, I need to know the path where
>> >> > >> BinDeps installed (or found) the header files so that I can compile
>> >> > >> this file. How do I access this information?
>> >> > >
>> >> > > This is going to be package-manager and build-tool specific, and I
>> >> > > don't
>> >> > > know if there is any abstraction/helper for includes in BinDeps yet.
>> >> > >
>> >> > > On Sun, Nov 16, 2014 at 10:09 AM, Erik Schnetter <[email protected]>
>> >> > >
>> >> > > wrote:
>> >> > >> I want to wrap a library (hwloc) for Julia. This is working fine.
>> >> > >>
>> >> > >> The library defines some C structs that are part of the API. My
>> >> > >> current approach uses wrapper C functions to access struct elements.
>> >> > >> Is there a better way?
>> >> > >>
>> >> > >> I thus I need to build this wrapper file as well. I created a
>> >> > >> SimpleBuild rule for this. However, I need to know the path where
>> >> > >> BinDeps installed (or found) the header files so that I can compile
>> >> > >> this file. How do I access this information?
>> >> > >>
>> >> > >> -erik
>> >> > >>
>> >> > >> --
>> >> > >> Erik Schnetter <[email protected]>
>> >> > >> http://www.perimeterinstitute.ca/personal/eschnetter/
>



-- 
Erik Schnetter <[email protected]>
http://www.perimeterinstitute.ca/personal/eschnetter/

Reply via email to