Page 1 of 2

Problem with cross-compiler compiling under Cygwin

Posted: Tue Oct 01, 2013 1:51 pm
by Sham
Hello, I have an problem, obviously. Problem is when i try to make cross-compiler for cygwin i get message like this:

Code: Select all

Cannot find fixincl
Makefile:4213: recipe for target `stmp-fixinc' failed
make[1]: *** [stmp-fixinc] Error 1
make[1]: Leaving directory `/home/Jani/cross/source/build-gcc/gcc'
Makefile:3908: recipe for target `all-gcc' failed
make: *** [all-gcc] Error 2
and this is while i am trying to do "make all-gcc" if anyone is wondering. So does anyone have any idea what i should be doing so i can get around this error (Telling to go with linux is not answer here, because i want to use my more powerful computer for OSdeving) so, please help me and everyone who "will" answer this, Thank you!

Re: Problem with cross-compiler compiling under Cygwin

Posted: Tue Oct 01, 2013 3:54 pm
by sortie
Hi,

Hopefully there isn't a bug in the GCC cross-compiler article. I wrote the latest revision, but as I don't use Windows, I was unable to test it with Cygwin. I've heard of people succeeding since then, I think though. That said, my guess is that you are doing someone wrong. Are you following the tutorial's instructions to the letter? Please read it more carefully. Note that you cannot use the binutils and gcc source code that cygwin uses, you should use the official binutils and gcc source code.

The problem seems to be related to fixincludes, which is a script that GCC uses to forcefully "fix" headers on its target system (such that they are more standards compliant). You are building a fully freestanding compiler (i586-elf-gcc) and it has no system root that contains headers for your OS (it's not needed, yet), so fixincludes shouldn't be run. This makes me wonder if you have accidentally used the wrong configure line. Could you post the ./configure line you used for GCC with variables expanded? You remembered to pass --without-headers right? Additionally, please attach more output from Make, there may be something further up that you missed. Please also double-check that you have installed all the dependencies for GCC.

If you deviated somehow from the tutorial, please tell us immediately.

Edit:
cross-compiler for cygwin
Do you mean "cross-compiler inside the cygwin environment" - or are you trying to build a cygwin compiler that produces executables for cygwin? If you are doing the latter, this means you are not building a cross-compiler and things will explode much like this.

Re: Problem with cross-compiler compiling under Cygwin

Posted: Wed Oct 02, 2013 12:19 am
by iansjack
Telling to go with linux is not answer here, because i want to use my more powerful computer for OSdeving
I'm not quite sure what you mean here. TBH, you would find a lot more help available if you did use Linux, as that is what so many other people use. And it would probably make better use of your powerful computer than Cygwin does.

But each to their own. (It's just that it seems you may be labouring under a misapprehension.) If you want to use Cygwin that's fine but just be aware that support will not be as good as under Linux.

Re: Problem with cross-compiler compiling under Cygwin

Posted: Wed Oct 02, 2013 9:19 pm
by Jvac
@sortie thank you it works on cygwin.

Code: Select all

$ /cygdrive/d//cygwin/usr/local/i386-jos-elf/bin/gcc --version
gcc (GCC) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Code: Select all

$ cd jos

myPC ~/6.828/jos
$ make
+ as kern/entry.S
+ cc kern/entrypgdir.c
+ cc kern/init.c
+ cc kern/console.c
+ cc kern/monitor.c
+ cc kern/printf.c
+ cc kern/kdebug.c
+ cc lib/printfmt.c
+ cc lib/readline.c
+ cc lib/string.c
+ ld obj/kern/kernel
+ as boot/boot.S
+ cc -Os boot/main.c
+ ld boot/boot
boot block is 382 bytes (max 510)
+ mk obj/kern/kernel.img

myPC ~/6.828/jos
$
The OP is definitely making a mistake.

@skorpion

try these instructions mit tools with combination of the SortieWikiSample

It should work. Good Luck....

Re: Problem with cross-compiler compiling under Cygwin

Posted: Thu Oct 03, 2013 12:44 am
by sortie
Jvac: Uh. You are not using a cross-compiler! Try use i586-elf-gcc and friends instead.

Re: Problem with cross-compiler compiling under Cygwin

Posted: Sat Oct 05, 2013 12:21 pm
by Jvac
sortie wrote:Jvac: Uh. You are not using a cross-compiler! Try use i586-elf-gcc and friends instead.

Code: Select all

my PC~

//this command invokes my cross compiler for the shell session
$ export PATH="/cygdrive/d/cygwin/usr/local/i386-jos-elf/bin:$PATH"


my PC~

//this command invokes the cross compiler to compile myOS
$ cd /cygdrive/d/cygwin/home/myOS//Configure/System/Integrator

my PC~
/cygdrive/d/cygwin/home/myOS//Configure/System/Integrator
$ make

rm -f *.map *.out core *_ctdt.s *..c Choices Choices.bin
rm -f [_a-m]*.[ilyCSso] [A-M]*.[ilyCSso]
rm -f [_n-z]*.[ilyCSso] [N-Z]*.[ilyCSso]
rm -f BROWSE browsefiles
rm -f tagfiles etags TAGS
rm -f msfiles mifiles
rm -f Choices *Star.cc *Star.h *.a
rm -f RAMDiskInfo.h vdisk0
rm -f zpipe
#rm -f D/[_a-m]* D/[A-M]*
#rm -f D/[_n-z]* D/[N-Z]*
rm -f D/*.dep
rm -f Make.dependencies

mkdir -p D && touch D/.exists
Creating Make.dependencies
Finished creating Make.dependencies

Generating BlockAllocatorStar
Generating CharacterInputStreamStar
Generating ClassStar
Generating ClassConstructorStar
Generating ConstructorDescriptorStar
Generating DomainStar
Generating FreeRunningTimerStar
Generating InputStreamStar
Generating MemoryObjectCacheStar
Generating MemoryObjectStar
Generating MemoryObjectViewStar
Generating MemoryRangeStar
Generating NameServerStar
Generating OutputStreamStar
Generating ObjectProxyManagerStar
Generating PhysicalMemoryRangeStar
Generating ProcessStar
Generating ProxyTableCopyStar
Generating SemaphoreStar
Generating SymbolicLinkStar
Generating SystemInterfaceStar
Generating TimerStar
Generating TimingInterfaceStar
Generating VersionObjectStar
Generating VMInterfaceStar
Generating RecordStreamStar
Generating FixedRecordFileStar
Generating FixedRecordStreamStar
Generating VariableRecordFileStar
Generating VariableRecordStreamStar
Generating RelativeRecordFileStar
Generating RecordFileStar
Generating IndexedRecordFileStar
Generating ELFDictionaryStar
Generating ELFContainerStar
Generating DiskStar
Generating FileObjectStar
Generating FileSystemInterfaceStar
Generating MemoryObjectContainerStar
Generating MemoryObjectDictionaryStar
Generating MountTableStar
Generating PersistentMemoryObjectStar
Generating PersistentArrayStar
Generating PersistentArrayStreamStar
Generating AutoloadPersistentObjectStar
Generating PersistentClassStar
Generating FileIndexStar
Generating PersistentIntArrayStar
Compiling BlockAllocatorStar.cc
You were saying?

Please explain

Re: Problem with cross-compiler compiling under Cygwin

Posted: Mon Oct 07, 2013 3:02 am
by Combuster
You didn't demonstrate anything.

I still don't see explicit invocations of 1586-elf-gcc - or even i386-jos-elf-gcc.

(Therefore it didn't happen... :wink:)

Re: Problem with cross-compiler compiling under Cygwin

Posted: Tue Oct 08, 2013 6:47 pm
by Jvac
@Combuster

i386-jos-elf-gcc example, believe me it works

Re: Problem with cross-compiler compiling under Cygwin

Posted: Tue Oct 08, 2013 9:28 pm
by Jvac
In fact just run into a problem with my ARM i686-pc cross using cygwin.

Code: Select all


myPC ~ myOS/Configure/Libraries/GeneralPurpose/arm
$ make

Creating Make.dependencies
Finished creating Make.dependencies
Compiling ../../../../Libraries/GeneralPurpose/Portable/Assert.cc
i686-pc-linux-gnu-g++.exe: error: unrecognized command line option '-mpoke-function-name'
i686-pc-linux-gnu-g++.exe: error: unrecognized command line option '-mapcs'
i686-pc-linux-gnu-g++.exe: error: unrecognized command line option '-mfpu=fpa'
../../../ARM.mk:84: recipe for target `Assert.o' failed
make: *** [Assert.o] Error 1
According to the 3.17.2 ARM Options on the gcc website these are ok.

here are the ARMOPTS from my make file.

Code: Select all

ARMOPTS = -msoft-float -mpoke-function-name -mapcs -march=armv5te -mfpu=fpa -fnon-call-exceptions -fasynchronous-unwind-tables
Any idea guys what is causing this?

Re: Problem with cross-compiler compiling under Cygwin

Posted: Tue Oct 08, 2013 11:08 pm
by xenos
Are you kidding? You are giving ARM options to an i686-pc-linux-gnu targeted compiler? i686? Seriously?

Re: Problem with cross-compiler compiling under Cygwin

Posted: Tue Oct 08, 2013 11:44 pm
by Combuster
Jvac wrote:i386-jos-elf-gcc example
screenshot wrote:cc (...)
cc (...)
cc (...)
Image

It says "cc", not "i386-jos-elf-gcc". i.e. the same as with XenOS: Learn to invoke the correct compiler.

Re: Problem with cross-compiler compiling under Cygwin

Posted: Wed Oct 09, 2013 4:32 am
by Owen
It says "+ cc", which tells me that the standard makefile output was suppressed and "pretty" output used instead. I.E. the rule looks like

Code: Select all

%.o: %.c
    @echo +cc $@
    @my-gcc -c -o $@ $< $(CFLAGS)

Re: Problem with cross-compiler compiling under Cygwin

Posted: Wed Oct 09, 2013 11:23 am
by Combuster
Or it looks like... a better implementation?

Code: Select all

%.o: %.c
        @echo + $(CC) $@
        @$(CC) $(CFLAGS)  $< -o $@
After all, the only thing he demonstrated is an attempt at adding the crosscompiler to the path and being unable to read. (both error messages and my earlier point that he didn't prove anything) :wink:

Re: Problem with cross-compiler compiling under Cygwin

Posted: Wed Oct 09, 2013 12:36 pm
by Jvac
Combuster wrote:Or it looks like... a better implementation?

Code: Select all

%.o: %.c
        @echo + $(CC) $@
        @$(CC) $(CFLAGS)  $< -o $@
After all, the only thing he demonstrated is an attempt at adding the crosscompiler to the path and being unable to read. (both error messages and my earlier point that he didn't prove anything) :wink:
Combuster wrote:It says "cc", not "i386-jos-elf-gcc". i.e. the same as with XenOS: Learn to invoke the correct compiler.
Guess you are right. Back to the lab to re-study compilers.

Thanks for the explanation guys.

Ill be back....... :)

Re: Problem with cross-compiler compiling under Cygwin

Posted: Wed Oct 09, 2013 1:05 pm
by Jvac
My mistake :mrgreen:

I forgot to invoke the command make v=1 to call for my i386-jos-elf compiler.

Code: Select all



myPC ~
$ cd 6.828

myPC ~/6.828
$ cd jos

my PC ~/6.828/jos
$ make v=1
echo "   -O1 -fno-builtin -I. -MD -fno-omit-frame-pointer -Wall -Wno-format -Wno                                                                                                    -unused -Werror -gstabs -m32 -fno-stack-protector -DJOS_KERNEL -gstabs" | cmp -s                                                                                                     obj/.vars.KERN_CFLAGS || echo "   -O1 -fno-builtin -I. -MD -fno-omit-frame-poin                                                                                                    ter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJO                                                                                                    S_KERNEL -gstabs" > obj/.vars.KERN_CFLAGS
+ as kern/entry.S
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/entry.o kern/entry.S
+ cc kern/entrypgdir.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/entrypgdir.o kern/entrypgdir.c
echo "" | cmp -s obj/.vars.INIT_CFLAGS || echo "" > obj/.vars.INIT_CFLAGS
+ cc kern/init.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs  -c -o obj/kern/init.o kern/init.c
+ cc kern/console.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/console.o kern/console.c
+ cc kern/monitor.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/monitor.o kern/monitor.c
+ cc kern/printf.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/printf.o kern/printf.c
+ cc kern/kdebug.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/kdebug.o kern/kdebug.c
+ cc lib/printfmt.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/printfmt.o lib/printfmt.c
+ cc lib/readline.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/readline.o lib/readline.c
+ cc lib/string.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/kern/string.o lib/string.c
echo "-m elf_i386 -T kern/kernel.ld -nostdlib" | cmp -s obj/.vars.KERN_LDFLAGS |                                                                                                    | echo "-m elf_i386 -T kern/kernel.ld -nostdlib" > obj/.vars.KERN_LDFLAGS
+ ld obj/kern/kernel
i386-jos-elf-ld -o obj/kern/kernel -m elf_i386 -T kern/kernel.ld -nostdlib obj/k                                                                                                    ern/entry.o obj/kern/entrypgdir.o obj/kern/init.o obj/kern/console.o obj/kern/mo                                                                                                    nitor.o obj/kern/printf.o obj/kern/kdebug.o  obj/kern/printfmt.o  obj/kern/readl                                                                                                    ine.o  obj/kern/string.o /usr/local/lib/gcc/i386-jos-elf/4.5.1/libgcc.a -b binar                                                                                                    y
i386-jos-elf-objdump -S obj/kern/kernel > obj/kern/kernel.asm
i386-jos-elf-nm -n obj/kern/kernel > obj/kern/kernel.sym
+ as boot/boot.S
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -c -o obj/boot/boot.o boot/boot.S
+ cc -Os boot/main.c
i386-jos-elf-gcc -pipe -nostdinc    -O1 -fno-builtin -I. -MD -fno-omit-frame-poi                                                                                                    nter -Wall -Wno-format -Wno-unused -Werror -gstabs -m32 -fno-stack-protector -DJ                                                                                                    OS_KERNEL -gstabs -Os -c -o obj/boot/main.o boot/main.c
+ ld boot/boot
i386-jos-elf-ld -m elf_i386 -N -e start -Ttext 0x7C00 -o obj/boot/boot.out obj/b                                                                                                    oot/boot.o obj/boot/main.o
i386-jos-elf-objdump -S obj/boot/boot.out >obj/boot/boot.asm
i386-jos-elf-objcopy -S -O binary -j .text obj/boot/boot.out obj/boot/boot
perl boot/sign.pl obj/boot/boot
boot block is 382 bytes (max 510)
+ mk obj/kern/kernel.img
dd if=/dev/zero of=obj/kern/kernel.img~ count=10000 2>/dev/null
dd if=obj/boot/boot of=obj/kern/kernel.img~ conv=notrunc 2>/dev/null
dd if=obj/kern/kernel of=obj/kern/kernel.img~ seek=1 conv=notrunc 2>/dev/null
mv obj/kern/kernel.img~ obj/kern/kernel.img

myPC ~/6.828/jos
$

Sweet :P