Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Fucking MingW

Name: Cudder !MhMRSATORI!fR8duoqGZdD/iE5 2012-11-04 9:11

#include <stdio.h>

int main() {
 printf("Hello world!\n");
 return 0;
}


Default MingW compilation+link size: 47KB
Best MingW compilation+link size: 8KB

Default MSVC compilation+link size: 40KB
Best MSVC compilation+link size: 1KB

After postprocessing:
MingW (using MS's linker and libs): 1594 bytes
MSVC: 624 bytes

What the fuck? Am I missing something here?

MingW optimised command line (compile only):
gcc -nostdlib -Os -c -s -o hello.obj hello.c -Wl,--gc-sections,--section-alignment,4096,--file-alignment,512

MingW link command line:
link hello.obj msvcrtlib mainstub.obj /align:4096 /filealign:512 /entry:main /merge:.rdata=.text /merge:.eh_fram=.text /merge:.text.st=.text /section:.text,EWR /stub:mzstub64.exe

mainstub.obj is a dummy __main because libming32.a which is supposed to contain it also contains __CTOR_LIST_ and some other C++ shit. I'm compiling a C program, with gcc, and they force you to link with a bunch of C++ shit? Are you kidding me?

(Why won't it merge the bloody .eh_fram and .text.st sections?!?! Maybe this is a bug of MS's linker since it merges fine with its own compiler output, but the compiler shouldn't be generating .eh_fram and .text.st anyway!)

Executables for your inspecting:
MingW: http://pastebin.com/vZn5WtMz
MSVC: http://pastebin.com/AV63Hr5x

Therefore, I challenge anyone to come up with a smaller Hello World using MingW, and post the commands you used to do it.

Name: Anonymous 2012-11-04 17:30

>>14
I'm not entirely sure of the specifics any more, but here's the skeleton for every directory's module.mk:

DIRS    :=
OBJS    :=

### Do not edit below this line!
PWD    := $(dir $(lastword $(MAKEFILE_LIST)))
ALLOBJS    := $(ALLOBJS) $(addprefix $(PWD), $(OBJS))
ifneq ($(DIRS),)
include $(addprefix $(PWD)/, $(addsuffix /module.mk, $(DIRS)))
endif

DIRS being all subdirectories, and OBJS being source/object file names with extensions stripped.
The root Makefile includes
include ./module.mk
OBJECTS := $(addsuffix .o, $(ALLOBJS))


I guess I was slightly misleading when I said "without name clashes from identical filenames in different folders", because apparently all .o files get put alongside all .c files. But that's easy enough to change, I just didn't need to at the time.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List