On Wed, Mar 27, 2019 at 12:00:49AM +0100, Thomas Monjalon wrote: > 26/03/2019 23:34, Jeff Shaw: > > On Tue, Mar 26, 2019 at 11:23:50PM +0100, Thomas Monjalon wrote: > > > 26/03/2019 22:54, Jeff Shaw: > > > > On Tue, Mar 26, 2019 at 10:47:54PM +0100, Thomas Monjalon wrote: > > > > > 26/03/2019 22:14, Jeff Shaw: > > > > > > On Tue, Mar 26, 2019 at 09:52:57PM +0100, Thomas Monjalon wrote: > > > > > > > Even better would be to get it as a dependency outside of DPDK. > > > > > > > Where this code come from? > > > > > > > How other projects on Windows get it? > > > > > > > > > > > > It comes from FreeBSD 12.0, specifically > > > > > > > > > > > > https://github.com/freebsd/freebsd/blob/releng/12.0/sys/sys/queue.h > > > > > > > > > > > > It has been modified such that only the parts used by DPDK (i.e. > > > > > > TAILQ) are > > > > > > implemented. The other stuff has been deleted. Windows does not > > > > > > have sys/queue.h, > > > > > > so we reproduce it here. > > > > > > > > > > > > Would it better to have this as a dependency outside of DPDK? I > > > > > > think pulling a file > > > > > > from the internet and applying a patch (where we'd have to maintain > > > > > > a patch file > > > > > > inside of DPDK's repo anyway) would be overkill when we just need a > > > > > > few lines of > > > > > > code that will change very infrequently. > > > > > > > > > > We already try to get the libbsd dependency on Linux. > > > > > Why not mandate libbsd for Windows? > > > > > It has this header file and a lot more: > > > > > > > > > > https://gitlab.freedesktop.org/libbsd/libbsd/blob/master/include/bsd/sys/queue.h > > > > > > > > > > Relying on libbsd may avoid copying other files for Windows port. > > > > > > > > I like that idea, though it doesn't look like libbsd builds on Windows, > > > > do you > > > > know of a Windows version or one that doesn't depend on autotools to > > > > build? > > > > > > It seems libbsd is not packaged for Windows. > > > May be worth to ask opinions to libbsd maintainers. > > > > > > Please could you list which other headers are required for the Windows > > > port? > > > > For helloworld the only one is sys/queue.h. > > > > The dpdk-draft-windows repo has at least these (non-empty) ones: > > dirent.h > > getopt.h > > net/ethernet.h > > net/socket.h > > netinet/in.h > > netinet/tcp.h > > pthread.h > > rand48.h > > sched.h > > sys/_iovec.h > > sys/_sockaddr_storage.h > > sys/_termios.h > > sys/_types.h > > sys/cdefs.h > > sys/mman.h > > sys/netbsd/queue.h > > sys/queue.h > > sys/sysctl.h > > syslog.h > > termios.h > > unistd.h > > > > There will likely be more as more libraries are identified with > > dependencies on UNIX-like > > headers. > > I would like we find a good solution for these headers.
I agree. I think the EAL is supposed to do this, however the current implementation generally assums a UNIX OS under the EAL. The libbsd might be a possiblity. > How other cross-platform projects are getting such dependencies? One example is Python. I just briefly reviewed the code and they go through great lengths to abstract the OS and implement custom, OS independent layers wherever required (e.g. sockets, getopt). See Modules/posixmodule.c for a 14K LOC example. Another example is Nginx. The underlying OS is always abstracted with disparate implementations for, e.g. unix & windows. See src/os/unix and src/os/win32. An example is the "socket()" call on unix, nginx "core" would call "ngx_socket()" which is a macro that is defined to use "WSASocketW" on windows, and "socket" on unix. > Is Cygwin a solution? I think the goal is to be a native Windows application.