sysprog21 / shecc

A self-hosting and educational C optimizing compiler
BSD 2-Clause "Simplified" License
1.12k stars 118 forks source link

Unable to bootstrap due to corrupted libc.inc #141

Open ChAoSUnItY opened 3 months ago

ChAoSUnItY commented 3 months ago

In the latest commit (cb34939), after using command make distclean config ARCH=arm then executes make to bootstrap, the process panicks about the corrupted libc.inc generated by tools/inliner.c. The generated corrupted libc.inc could be seen here.

Here's the sneak peek of the corrupted libc.inc, notice that this corruption is caused due to unmatched string double quotation mark:

/* Created by tools/inliner - DO NOT EDIT. */
void __c(char *src) {
    for (int i = 0; src[i]; i++)
        SOURCE[source_idx++] = src[i];
}
void libc_generate() {
  __c("/*
\n");
  __c(" * shecc - Self-Hosting and Educational C Compiler.
\n");
  __c(" *
\n");
  __c(" * shecc is freely redistributable under the BSD 2 clause license. See the
\n");
  __c(" * file \"LICENSE\" for information on usage and redistribution of this file.
\n");
  __c(" */
\n");
  __c("
\n");

I can only reproduce this result on current laptop's WSL2 but on previous desktop's WSL2.

jserv commented 3 months ago

Can you check CR LF, LF and CR line break characters?

ChAoSUnItY commented 3 months ago

Yes, this is caused by setting of git which defaults line break characters to CR LF.

Maybe we can attempt to detect files' line break character and give proper warning message in the MAKEFILE?

jserv commented 3 months ago

Yes, this is caused by setting of git which defaults line break characters to CR LF. Maybe we can attempt to detect files' line break character and give proper warning message in the MAKEFILE?

For bootstrapping, stage0 is initially compiled with a standard compiler to generate a native executable. This compiler can then function as a cross-compiler, regardless of the operating system or computer architecture. It would be great if we can deal with CR/LF issue, allowing more toolchains such as MinGW-w64.