Yo Hal! On Sun, 02 Feb 2025 21:35:02 -0800 Hal Murray <halmur...@sonic.net> wrote:
> >> That was my first try. It didn't work on BSD. > > Care to share what the failure was? > > It didn't know what a struct timeval was. Did you set the required defines first? Any place I can go to see the BSD man page and the include file contents? > > Where can I find that man page? > > man timeval on this Linux box says: > SYNOPSIS > #include <sys/time.h> Odd. Not on Gentoo. What linux are you on? > Without the sys, it worked on Linux but not on BSD. On Linux you usually need both. > With the sys it works on everything I've tried so I moved on to other > things. If it is working, why are we talking about it? > > Oh, now I have context. The only extra code for cross builds would > > be the --march. When you use --march then /usr/include/sys may not > > be used for <sys/time.h>. cc swaps sys directory to one approriate > > to the target. > > Are you sure of that? 100% > I don't understand this area. It is a PITA. > That's what I > was expecting, but look in .gitlab-ci.yml in the cross-armhf area. > There are a couple of runs that include: > --cross-cflags "-I/usr/include/ -I/usr/include/python${pyver}" > Isn't that using the same headers? No. As I said in the part you trimmed, it is the "<sys/XXX.h>" that gets swapped. And, it is very, very, rare that you use your (usr/include) system headers when cross compiling. > My guess is that the same kernel header files work for all > architectures and they are conditioned on #defines that the compiler > provides. But what if you are complaining for a BSD kernel on a Linux kernel? Or building for a Linus 4.10 kernel on a 6.13 host? As many embedded systems do. When cross-ccompiling you have to assume the worst. > /usr/include/bits/timex.h has stuff like this > # if defined __USE_TIME64_REDIRECTS || (__TIMESIZE == 64 && > __WORDSIZE == 32) > Where do they come from? Oh boy. You have not been following along. The short answer is that variable starting with "__" are reserved for the system and you should never touch tehem. So don't touch them! Those are usually set from the --march= option to fit the ABI. > "gcc -dM -E -" tells you the compiler predefines. 397 of them on > this box. But no __TIMESIZE or __WORDSIZE 1. You forgot the important part: --march= 2. gcc does not define them. The (proper) include files do, using defines that gcc sets from the ABI (--marh-) > [After more grepping...] > /usr/include/bits/wordsize.h says > /* Determine the wordsize from the preprocessor defines. */ > > #if defined __x86_64__ && !defined __ILP32__ > # define __WORDSIZE 64 > #else > # define __WORDSIZE 32 Note that x86_64 and ILP32 are part of the selected (--march) ABI. > Similar stuff in /usr/include/bits/timesize.h And a thousand other places. You are many layers away from user configurable defines. RGDS GARY --------------------------------------------------------------------------- Gary E. Miller Rellim 109 NW Wilmington Ave., Suite E, Bend, OR 97703 g...@rellim.com Tel:+1 541 382 8588 Veritas liberabit vos. -- Quid est veritas? "If you can't measure it, you can't improve it." - Lord Kelvin _______________________________________________ devel mailing list devel@ntpsec.org https://lists.ntpsec.org/mailman/listinfo/devel