⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcc-uclibc.c

📁 Axis 221 camera embedded programing interface
💻 C
📖 第 1 页 / 共 2 页
字号:
				case 'l': 		/* library */					libraries[m++] = argv[i];					libraries[m] = NULL;					argv[i] = NULL;					break;				case 'x': 		/* Set target language */					minusx = 1;					i++;					break;				case 'v':		/* verbose */					if (argv[i][2] == '\0') verbose = 1;					printf("Invoked as %s\n", argv[0]);					break;				case 'n':					if (strcmp(nostdinc, argv[i]) == 0) {						use_stdinc = 0;					} else if (strcmp(nostartfiles, argv[i]) == 0) {#ifdef __UCLIBC_CTOR_DTOR__						ctor_dtor = 0;#endif						use_start = 0;					} else if (strcmp(nodefaultlibs, argv[i]) == 0) {						use_stdlib = 0;						argv[i] = NULL;					} else if (strcmp(nostdlib, argv[i]) == 0) {#ifdef __UCLIBC_CTOR_DTOR__						ctor_dtor = 0;#endif						use_start = 0;						use_stdlib = 0;					} #ifdef __UCLIBC_CTOR_DTOR__					else if (strcmp(nostdinc_plus, argv[i]) == 0) {						if (cplusplus) {							use_nostdinc_plus = 0;						}					}#endif					break;				case 's':					if (strstr(argv[i], static_linking) != NULL) {						use_static_linking = 1;					}					if (strcmp("-shared", argv[i]) == 0) {						use_start = 0;						use_pic = 1;					}					break;				case 'W':		/* -static could be passed directly to ld */					if (strncmp("-Wl,", argv[i], 4) == 0) {						if (strstr(argv[i], static_linking) != NULL) {							use_static_linking = 1;						}						if (strstr(argv[i], "--dynamic-linker") != NULL) {							dlstr = NULL;						}					}					break;#ifdef __UCLIBC_PROFILING__				case 'p':					if (strcmp("-pg", argv[i]) == 0) {						profile = 1;					}					break;#endif				case 'f':					/* Check if we are doing PIC */					if (strcmp("-fPIC", argv[i]) == 0) {						use_pic = 1;					} else if (strcmp("-fpic", argv[i]) == 0) {						use_pic = 1;					} #ifdef __UCLIBC_PROFILING__					else if (strcmp("-fprofile-arcs", argv[i]) == 0) {						profile = 1;					}#endif					break;				case '-':					if (strstr(argv[i]+1, static_linking) != NULL) {						use_static_linking = 1;						argv[i] = NULL;					} else if (strcmp("--uclibc-use-build-dir", argv[i]) == 0) {						use_build_dir = 1;						argv[i] = NULL;					} else if (strcmp("--uclibc-use-rpath", argv[i]) == 0) {						use_rpath = 1;						argv[i] = NULL;					} else if (strcmp ("--uclibc-cc", argv[i]) == 0 && argv[i + 1]) {						cc = argv[i + 1];						argv[i++] = NULL;						argv[i] = NULL;					} else if (strncmp ("--uclibc-cc=", argv[i], 12) == 0) {						cc = argv[i] + 12;						argv[i] = NULL;					}#ifdef __UCLIBC_CTOR_DTOR__					else if (strcmp("--uclibc-no-ctors",argv[i]) == 0) {						ctor_dtor = 0;						argv[i] = NULL;					}#endif					break;			}		} else if (argv[i][0] == '-' && argv[i][1] == '\0') {			/* Reading code from stdin - crazy eh? */			++source_count;		} else {				/* assume it is an existing source file */			++source_count;		}	}	gcc_argv = __builtin_alloca(sizeof(char*) * (argc + 64));	gcc_argument = __builtin_alloca(sizeof(char*) * (argc + 20));	i = 0; k = 0;#ifdef __UCLIBC_CTOR_DTOR__	if (ctor_dtor) {		struct stat statbuf;		if (findlibgcc || stat(LIBGCC_DIR, &statbuf) < 0 ||		    !S_ISDIR(statbuf.st_mode))		{			/* Bummer, gcc is hiding from us. This is going			 * to really slow things down... bummer.  */			int status, gcc_pipe[2];			pid_t pid, wpid;			pipe(gcc_pipe);			if (!(pid = fork())) {				char *argv[4];				close(gcc_pipe[0]);				close(1);				close(2);				dup2(gcc_pipe[1], 1);				dup2(gcc_pipe[1], 2);				argv[0] = cc;				argv[1] = "-print-libgcc-file-name";				argv[2] = NULL;				execvp(cc, argv);				close(gcc_pipe[1]);				_exit(EXIT_FAILURE);			}			wpid = 0;			while (wpid != pid) {				wpid = wait(&status);			}			close(gcc_pipe[1]);			if (WIFEXITED(status) && WEXITSTATUS(status)) {crash_n_burn:				fprintf(stderr, "Unable to locale crtbegin.o provided by gcc");				exit(EXIT_FAILURE);			}			if (WIFSIGNALED(status)) {				fprintf(stderr, "%s exited because of uncaught signal %d", cc, WTERMSIG(status));				exit(EXIT_FAILURE);			}			{				char buf[1024], *dir;				status = read(gcc_pipe[0], buf, sizeof(buf));				close(gcc_pipe[0]);				if (status < 0) {					goto crash_n_burn;				}				dir = dirname(buf);				xstrcat(&(crtbegin_path[0]), dir, "/crtbegin.o", NULL);				xstrcat(&(crtbegin_path[1]), dir, "/crtbeginS.o", NULL);				xstrcat(&(crtend_path[0]), dir, "/crtend.o", NULL);				xstrcat(&(crtend_path[1]), dir, "/crtendS.o", NULL);			}		} else {			xstrcat(&(crtbegin_path[0]), LIBGCC_DIR, "crtbegin.o", NULL);			xstrcat(&(crtbegin_path[1]), LIBGCC_DIR, "crtbeginS.o", NULL);			xstrcat(&(crtend_path[0]), LIBGCC_DIR, "crtend.o", NULL);			xstrcat(&(crtend_path[1]), LIBGCC_DIR, "crtendS.o", NULL);		}	}	if (cplusplus && cpp)		gcc_argv[i++] = cpp;	else#endif		gcc_argv[i++] = cc;	for ( j = 1 ; j < argc ; j++ ) {		if (argv[j] != NULL) {			gcc_argument[k++] = argv[j];		}	}	gcc_argument[k] = NULL;	if (linking && source_count) {#if defined __HAVE_ELF__ && ! defined __UCLIBC_HAS_MMU__		gcc_argv[i++] = "-Wl,-elf2flt";#endif		gcc_argv[i++] = nostdlib;		if (use_static_linking) {			gcc_argv[i++] = static_linking;		}		if (!use_static_linking) {			if (dlstr && use_build_dir) {				gcc_argv[i++] = build_dlstr;			} else if (dlstr) {				gcc_argv[i++] = dlstr;			}			if (use_rpath) {				gcc_argv[i++] = rpath[use_build_dir];			}		}		for ( l = 0 ; l < n ; l++ ) {			if (libpath[l]) gcc_argv[i++] = libpath[l];		}		gcc_argv[i++] = rpath_link[use_build_dir]; /* just to be safe */		if (libstr)			gcc_argv[i++] = libstr;		gcc_argv[i++] = our_lib_path[use_build_dir];		if (!use_build_dir) {			gcc_argv[i++] = our_usr_lib_path;		}	}	if (use_stdinc && source_count) {		gcc_argv[i++] = nostdinc;#ifdef __UCLIBC_CTOR_DTOR__		if (cplusplus) {			char *cppinc;			if (use_nostdinc_plus) {				gcc_argv[i++] = nostdinc_plus;			}			xstrcat(&cppinc, uClibc_inc[use_build_dir], "g++/", NULL);			gcc_argv[i++] = "-isystem";			gcc_argv[i++] = cppinc;			xstrcat(&cppinc, uClibc_inc[use_build_dir], "g++-v3/", NULL);			gcc_argv[i++] = "-isystem";			gcc_argv[i++] = cppinc;		}#endif		gcc_argv[i++] = "-isystem";		gcc_argv[i++] = uClibc_inc[use_build_dir];		gcc_argv[i++] = "-iwithprefix";		gcc_argv[i++] = "include";		if (incstr)			gcc_argv[i++] = incstr;	}	if (linking && source_count) {#ifdef __UCLIBC_PROFILING__		if (profile) {			gcc_argv[i++] = gcrt1_path[use_build_dir];		}#endif#ifdef __UCLIBC_CTOR_DTOR__		if (ctor_dtor) {			gcc_argv[i++] = crti_path[use_build_dir];			if (use_pic) {				gcc_argv[i++] = crtbegin_path[1];			} else {				gcc_argv[i++] = crtbegin_path[0];			}		}#endif		if (use_start) {#ifdef __UCLIBC_PROFILING__			if (!profile)#endif			{				gcc_argv[i++] = crt0_path[use_build_dir];			}		}		for ( l = 0 ; l < k ; l++ ) {			if (gcc_argument[l]) gcc_argv[i++] = gcc_argument[l];		}		if (use_stdlib) {			//gcc_argv[i++] = "-Wl,--start-group";			gcc_argv[i++] = "-lgcc";		}		for ( l = 0 ; l < m ; l++ ) {			if (libraries[l]) gcc_argv[i++] = libraries[l];		}		if (use_stdlib) {#ifdef __UCLIBC_CTOR_DTOR__			if (cplusplus) {				gcc_argv[i++] = "-lstdc++";				gcc_argv[i++] = "-lm";			}#endif			gcc_argv[i++] = "-lc";			gcc_argv[i++] = "-lgcc";			//gcc_argv[i++] = "-Wl,--end-group";		}#ifdef __UCLIBC_CTOR_DTOR__		if (ctor_dtor) {			if (minusx) {				gcc_argv[i++] = "-x";				gcc_argv[i++] = "none";			}			if (use_pic) {				gcc_argv[i++] = crtend_path[1];			} else {				gcc_argv[i++] = crtend_path[0];			}			gcc_argv[i++] = crtn_path[use_build_dir];		}#endif	} else {		for ( l = 0 ; l < k ; l++ ) {			if (gcc_argument[l]) gcc_argv[i++] = gcc_argument[l];		}	}	gcc_argv[i++] = NULL;	if (verbose) {		for ( j = 0 ; gcc_argv[j] ; j++ ) {			printf("arg[%2i] = %s\n", j, gcc_argv[j]);		}		fflush(stdout);	}	//no need to free memory from xstrcat because we never return... #ifdef __UCLIBC_CTOR_DTOR__	if (cplusplus && cpp) {		execvp(cpp, gcc_argv);		fprintf(stderr, "%s: %s\n", cpp, strerror(errno));	} else#endif	{		execvp(cc, gcc_argv);		fprintf(stderr, "%s: %s\n", cc, strerror(errno));	}	exit(EXIT_FAILURE);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -