2007-02-23 03:43:33

by Deepak Saxena

[permalink] [raw]
Subject: [PATCH] Allow kernel to build on Cygwin


This patch contains a set of small fixes to allow the kernel to build under
the Cygwin environment, which is unfortunately used by more people than
one would think in the embedded world. :(

Signed-off-by: Deepak Saxena <[email protected]>

---
lib/gen_crc32table.c | 2 ++
scripts/kconfig/Makefile | 6 ++++++
scripts/kconfig/lxdialog/check-lxdialog.sh | 4 ++++
scripts/mod/file2alias.c | 4 ++++
scripts/mod/mk_elfconfig.c | 4 ++++
scripts/mod/modpost.h | 4 ++++
scripts/mod/sumversion.c | 6 +++++-
7 files changed, 29 insertions(+), 1 deletion(-)


diff --git a/lib/gen_crc32table.c b/lib/gen_crc32table.c
index bea5d97..ce447ff 100644
--- a/lib/gen_crc32table.c
+++ b/lib/gen_crc32table.c
@@ -1,6 +1,8 @@
#include <stdio.h>
#include "crc32defs.h"
+#ifndef __CYGWIN__
#include <inttypes.h>
+#endif

#define ENTRIES_PER_LINE 4

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 7e7e147..ca57efe 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -161,6 +161,12 @@ HOSTLOADLIBES_gconf = `pkg-config --libs
HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
-D LKC_DIRECT_LINK

+HOST_OS := $(shell uname -o)
+ifeq ($(HOST_OS),Cygwin)
+HOSTLOADLIBES_mconf = -lintl
+HOSTLOADLIBES_conf = -lintl
+endif
+
$(obj)/qconf.o: $(obj)/.tmp_qtcheck

ifeq ($(qconf-target),1)
diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh
index 120d624..c44b559 100644
--- a/scripts/kconfig/lxdialog/check-lxdialog.sh
+++ b/scripts/kconfig/lxdialog/check-lxdialog.sh
@@ -4,6 +4,10 @@ # Check ncurses compatibility
# What library to link
ldflags()
{
+ if [ "`uname -o`" == "Cygwin" ]; then
+ echo '-lintl -lncurses'
+ exit
+ fi
$cc -print-file-name=libncursesw.so | grep -q /
if [ $? -eq 0 ]; then
echo '-lncursesw'
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index f61c9cc..479293f 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -29,7 +29,11 @@ #endif

#include <ctype.h>

+#if defined(__CYGWIN__)
+typedef __uint32_t __u32;
+#else
typedef uint32_t __u32;
+#endif
typedef uint16_t __u16;
typedef unsigned char __u8;

diff --git a/scripts/mod/mk_elfconfig.c b/scripts/mod/mk_elfconfig.c
index 725d61c..4908f7a 100644
--- a/scripts/mod/mk_elfconfig.c
+++ b/scripts/mod/mk_elfconfig.c
@@ -1,7 +1,11 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#ifdef __CYGWIN__
+#include <libelf.h>
+#else
#include <elf.h>
+#endif

int
main(int argc, char **argv)
diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h
index d398c61..7cdf2c6 100644
--- a/scripts/mod/modpost.h
+++ b/scripts/mod/modpost.h
@@ -7,7 +7,11 @@ #include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
+#ifdef __CYGWIN__
+#include <libelf.h>
+#else
#include <elf.h>
+#endif

#include "elfconfig.h"

diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c
index 8a28756..4404f87 100644
--- a/scripts/mod/sumversion.c
+++ b/scripts/mod/sumversion.c
@@ -1,7 +1,11 @@
+#if defined(__sun__)
#include <netinet/in.h>
-#ifdef __sun__
#include <inttypes.h>
+#elif defined(__CYGWIN__)
+#include <asm/byteorder.h> /* For ntohl/htonl */
+#include <limits.h>
#else
+#include <netinet/in.h>
#include <stdint.h>
#endif
#include <ctype.h>

--
Deepak Saxena - [email protected] - http://www.plexity.net

In the end, they will not say, "those were dark times," they will ask
"why were their poets silent?" - Bertolt Brecht


2007-02-23 20:39:15

by matthieu castet

[permalink] [raw]
Subject: Re: [PATCH] Allow kernel to build on Cygwin

Hi,

Deepak Saxena <dsaxena <at> plexity.net> writes:

>
>
> This patch contains a set of small fixes to allow the kernel to build under
> the Cygwin environment, which is unfortunately used by more people than
> one would think in the embedded world. :(
Yes, I did similar patch, and there are needed for everything (busybox,
glibc, ...)
-D LKC_DIRECT_LINK
>
> +HOST_OS := $(shell uname -o)
> +ifeq ($(HOST_OS),Cygwin)
> +HOSTLOADLIBES_mconf = -lintl
> +HOSTLOADLIBES_conf = -lintl
> +endif
> +
Hum, this test should be done if we detect nls support. See ifeq
($(KBUILD_HAVE_NLS),no) ...



> --- a/scripts/kconfig/lxdialog/check-lxdialog.sh
> +++ b/scripts/kconfig/lxdialog/check-lxdialog.sh
> <at> <at> -4,6 +4,10 <at> <at> # Check ncurses compatibility
> # What library to link
> ldflags()
> {
> + if [ "`uname -o`" == "Cygwin" ]; then
> + echo '-lintl -lncurses'
> + exit
> + fi
You should test against libncurses.a and not hardcode it for cygwin...

Matthieu



2007-02-23 23:17:20

by Deepak Saxena

[permalink] [raw]
Subject: Re: [PATCH] Allow kernel to build on Cygwin

On Feb 23 2007, at 20:37, Matthieu CASTET was caught saying:
> Hi,
>
> Deepak Saxena <dsaxena <at> plexity.net> writes:
>
> >
> >
> > This patch contains a set of small fixes to allow the kernel to build under
> > the Cygwin environment, which is unfortunately used by more people than
> > one would think in the embedded world. :(
> Yes, I did similar patch, and there are needed for everything (busybox,
> glibc, ...)
> -D LKC_DIRECT_LINK
> >
> > +HOST_OS := $(shell uname -o)
> > +ifeq ($(HOST_OS),Cygwin)
> > +HOSTLOADLIBES_mconf = -lintl
> > +HOSTLOADLIBES_conf = -lintl
> > +endif
> > +
> Hum, this test should be done if we detect nls support. See ifeq
> ($(KBUILD_HAVE_NLS),no) ...

OK, will do. I'm running into the same issue trying to fix building
under uclibc and would defintely be nicer to have a single solution.

~Deepak

--
Deepak Saxena - [email protected] - http://www.plexity.net

In the end, they will not say, "those were dark times," they will ask
"why were their poets silent?" - Bertolt Brecht

2007-02-24 00:18:01

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] Allow kernel to build on Cygwin

Deepak Saxena wrote:
>
> diff --git a/lib/gen_crc32table.c b/lib/gen_crc32table.c
> index bea5d97..ce447ff 100644
> --- a/lib/gen_crc32table.c
> +++ b/lib/gen_crc32table.c
> @@ -1,6 +1,8 @@
> #include <stdio.h>
> #include "crc32defs.h"
> +#ifndef __CYGWIN__
> #include <inttypes.h>
> +#endif
>
> #define ENTRIES_PER_LINE 4
>

Cygwin has <inttypes.h> just fine; what are you trying to do here?

-hpa

2007-02-24 00:18:45

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] Allow kernel to build on Cygwin

Deepak Saxena wrote:
> This patch contains a set of small fixes to allow the kernel to build under
> the Cygwin environment, which is unfortunately used by more people than
> one would think in the embedded world. :(
>
> Signed-off-by: Deepak Saxena <[email protected]>

I have one major problem with this patch: none of the hacks are
commented, which invites cargo cult programming by people who needs to
further maintain the code.

-hpa

2007-02-24 22:58:11

by Jan Engelhardt

[permalink] [raw]
Subject: Re: [PATCH] Allow kernel to build on Cygwin


On Feb 23 2007 16:17, H. Peter Anvin wrote:
> Deepak Saxena wrote:
>>
>> diff --git a/lib/gen_crc32table.c b/lib/gen_crc32table.c
>> index bea5d97..ce447ff 100644
>> --- a/lib/gen_crc32table.c
>> +++ b/lib/gen_crc32table.c
>> @@ -1,6 +1,8 @@
>> # include <stdio.h>
>> # include "crc32defs.h"
>> +#ifndef __CYGWIN__
>> #include <inttypes.h>
>> +#endif
>>
>> #define ENTRIES_PER_LINE 4
>
> Cygwin has <inttypes.h> just fine; what are you trying to do here?

What's the benefit of inttypes.h over stdint.h?


Jan
--
ft: http://freshmeat.net/p/chaostables/

2007-02-24 23:41:01

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] Allow kernel to build on Cygwin

Jan Engelhardt wrote:
> On Feb 23 2007 16:17, H. Peter Anvin wrote:
>> Deepak Saxena wrote:
>>> diff --git a/lib/gen_crc32table.c b/lib/gen_crc32table.c
>>> index bea5d97..ce447ff 100644
>>> --- a/lib/gen_crc32table.c
>>> +++ b/lib/gen_crc32table.c
>>> @@ -1,6 +1,8 @@
>>> # include <stdio.h>
>>> # include "crc32defs.h"
>>> +#ifndef __CYGWIN__
>>> #include <inttypes.h>
>>> +#endif
>>>
>>> #define ENTRIES_PER_LINE 4
>> Cygwin has <inttypes.h> just fine; what are you trying to do here?
>
> What's the benefit of inttypes.h over stdint.h?
>

<inttypes.h> is a superset of <stdint.h>; some older platforms don't
have <stdint.h> (but has all the contents thereof in <inttypes.h>) however.

In general <inttypes.h> is what you want. The utility of <stdint.h> is
relatively limited; it looks like it's intended so that <stdint.h>
contains the compiler-specific portions rather than the library-specific
portions.

-hpa