#include<stdio.h> #include<stdlib.h> #ifndef WEXITSTATUS #include <sys/wait.h> #endif char buf[32768]; #if (HAS_DEVENV == 0) char * __dev_env; #endif // version-specific switches #if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 #define GCCOPT "-fno-stack-protector -mincoming-stack-boundary=2 " #elif __GNUC__ >= 4 && __GNUC_MINOR__ >= 1 #define GCCOPT "-fno-stack-protector " #else #define GCCOPT #endif static void __env(void) { char * p=getenv("MENUETDEV"); if(!p) { printf("MENUETDEV system variable not set !!!\n"); exit(-1); } #if (HAS_DEVENV == 0) __dev_env=p; #endif } int main(int argc,char * argv[]) { int u; __env(); if(argc<3) { fprintf(stderr,"Usage: %s infile.c outfile.o\n",argv[0]); return 1; } #if (HAS_DEVENV==1) sprintf(buf,"gcc -c %s -o %s -Os -nostdinc -fno-builtin -I/dev/env/MENUETDEV/include -fno-pic " GCCOPT "-mno-stack-arg-probe -mpreferred-stack-boundary=2 " "-fno-common -DMENUETDEV='\"/dev/env/MENUETDEV\"' " "-D__DEV_CONFIG_H='</dev/env/MENUETDEV/config.h>' -D__MENUETOS__ ",argv[1],argv[2]); #else sprintf(buf,"gcc -c %s -o %s -Os -nostdinc -fno-builtin -I%s/include -fno-pic " GCCOPT "-mno-stack-arg-probe -mpreferred-stack-boundary=2 " "-fno-common -DMENUETDEV='\"%s\"' " "-D__DEV_CONFIG_H=\"<%s/config.h>\" -D__MENUETOS__ ",argv[1],argv[2],__dev_env,__dev_env,__dev_env); #endif if(argc>3) for(u=3;u<argc;u++) { strcat(buf,argv[u]); strcat(buf," "); } return WEXITSTATUS(system(buf)); }