浏览代码

Yet another iteration...

Eric Andersen 23 年之前
父节点
当前提交
879c34fb14
共有 1 个文件被更改,包括 62 次插入51 次删除
  1. 62 51
      extra/gcc-uClibc/gcc-uClibc.c

+ 62 - 51
extra/gcc-uClibc/gcc-uClibc.c

@@ -172,8 +172,8 @@ int main(int argc, char **argv)
 	xstrcat(&(rpath[0]), "-Wl,-rpath,", devprefix, "/lib", NULL);
 	xstrcat(&(rpath[1]), "-Wl,-rpath,", builddir, "/lib", NULL);
 
-	xstrcat(&(uClibc_inc[0]), "-isystem", devprefix, "/include/", NULL);
-	xstrcat(&(uClibc_inc[1]), "-isystem", builddir, "/include/", NULL);
+	xstrcat(&(uClibc_inc[0]), devprefix, "/include/", NULL);
+	xstrcat(&(uClibc_inc[1]), builddir, "/include/", NULL);
 
 	xstrcat(&(crt0_path[0]), devprefix, "/lib/crt0.o", NULL);
 	xstrcat(&(crt0_path[1]), builddir, "/lib/crt0.o", NULL);
@@ -302,63 +302,74 @@ int main(int argc, char **argv)
 	}
 
 	if (linking && source_count) {
-		if (use_stdlib) {
-			gcc_argv[i++] = nostdlib;
+	    if (use_stdlib) {
+		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_static_linking) {
-			gcc_argv[i++] = static_linking;
+		if (use_rpath) {
+		    gcc_argv[i++] = rpath[use_build_dir];
 		}
-		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];
-			}
-		}
-		gcc_argv[i++] = rpath_link[use_build_dir]; /* just to be safe */
-		if( libstr )
-			gcc_argv[i++] = libstr;
-		gcc_argv[i++] = lib_path[use_build_dir];
-		if (!use_build_dir) {
-			gcc_argv[i++] = usr_lib_path;
+	    }
+	    gcc_argv[i++] = rpath_link[use_build_dir]; /* just to be safe */
+	    if( libstr )
+		gcc_argv[i++] = libstr;
+	    gcc_argv[i++] = lib_path[use_build_dir];
+	    if (!use_build_dir) {
+		gcc_argv[i++] = usr_lib_path;
+	    }
+	}
+	if (use_stdinc && source_count) {
+	    gcc_argv[i++] = nostdinc;
+	    gcc_argv[i++] = "-isystem";
+	    gcc_argv[i++] = uClibc_inc[use_build_dir];
+	    gcc_argv[i++] = "-isystem";
+	    gcc_argv[i++] = GCC_INCDIR;
+	    if( incstr )
+		gcc_argv[i++] = incstr;
+	}
+
+	if (linking && source_count) {
+	    if (use_start) {
+#ifdef ENABLE_CRTBEGIN_END
+		if (use_static_linking) {
+		    gcc_argv[i++] = GCC_LIB_DIR "crtbegin.o" ;
+		} else {
+		    gcc_argv[i++] = GCC_LIB_DIR "crtbeginS.o" ;
 		}
-#ifdef ENABLE_CRTBE
-			gcc_argv[i++] = GCC_LIB_DIR "crtbegin.o" ;
-			//gcc_argv[i++] = GCC_LIB_DIR "crti.o" ;
 #endif
-		if (use_start) {
-			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 = m ; l >= 0 ; l-- ) {
-				if (libraries[l]) gcc_argv[i++] = libraries[l];
-			}
-			gcc_argv[i++] = "-lc";
-			gcc_argv[i++] = "-lgcc";
-			//gcc_argv[i++] = "-Wl,--end-group";
+		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 = m ; l >= 0 ; l-- ) {
+		    if (libraries[l]) gcc_argv[i++] = libraries[l];
 		}
-#ifdef ENABLE_CRTBE
-		if (use_start) {
-			gcc_argv[i++] = GCC_LIB_DIR "crtend.o" ;
-			//gcc_argv[i++] = GCC_LIB_DIR "crtn.o" ;
+		gcc_argv[i++] = "-lc";
+		gcc_argv[i++] = "-lgcc";
+		//gcc_argv[i++] = "-Wl,--end-group";
+	    }
+#ifdef ENABLE_CRTBEGIN_END
+	    if (use_start) {
+		if (use_static_linking) {
+		    gcc_argv[i++] = GCC_LIB_DIR "crtend.o" ;
+		} else {
+		    gcc_argv[i++] = GCC_LIB_DIR "crtendS.o" ;
 		}
+	    }
 #endif
 	} else {
-	    if (use_stdinc && source_count) {
-		gcc_argv[i++] = nostdinc;
-		gcc_argv[i++] = uClibc_inc[use_build_dir];
-		gcc_argv[i++] = "-isystem" GCC_INCDIR;
-		if( incstr )
-		    gcc_argv[i++] = incstr;
-	    }
 	    for ( l = 0 ; l < k ; l++ ) {
 		if (gcc_argument[l]) gcc_argv[i++] = gcc_argument[l];
 	    }