summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Landden <shawn@git.icu>2021-09-27 21:18:09 +0400
committerGitHub <noreply@github.com>2021-09-27 21:18:09 +0400
commitda7412679d16d161f1e6d23e8f93f15f11fcbf73 (patch)
treebcf505b2c33a8a86c4611a1ee33a9fc050480c41
parenta91aef9cf64b259536d0dbfbe4cc58f45a6b594e (diff)
parent7f0d80dfe16577f55822ba86a1539e53f9d54417 (diff)
downloaddistcc-git-da7412679d16d161f1e6d23e8f93f15f11fcbf73.tar.gz
Merge pull request #417 from asheplyakov/clang-distcc-linuxkernel-compile
Improved cross-compilation with clang
-rw-r--r--src/argutil.c13
-rw-r--r--src/compile.c5
-rw-r--r--src/distcc.h1
3 files changed, 19 insertions, 0 deletions
diff --git a/src/argutil.c b/src/argutil.c
index feab385..ac61902 100644
--- a/src/argutil.c
+++ b/src/argutil.c
@@ -67,6 +67,19 @@ int dcc_argv_search(char **a,
}
+/**
+ * Return true if argv contains argument starting with needle.
+ */
+int dcc_argv_startswith(char **a,
+ const char *needle)
+{
+ size_t needle_len = strlen(needle);
+ for (; *a; a++)
+ if (!strncmp(*a, needle, needle_len))
+ return 1;
+ return 0;
+}
+
unsigned int dcc_argv_len(char **a)
{
unsigned int i;
diff --git a/src/compile.c b/src/compile.c
index 26d7d18..9c02a6e 100644
--- a/src/compile.c
+++ b/src/compile.c
@@ -557,9 +557,14 @@ static void dcc_add_clang_target(char **argv)
else
return;
+ /* -target aarch64-linux-gnu */
if (dcc_argv_search(argv, "-target"))
return;
+ /* --target=aarch64-linux-gnu */
+ if (dcc_argv_startswith(argv, "--target"))
+ return;
+
rs_log_info("Adding '-target %s' to support clang cross-compilation.",
target);
dcc_argv_append(argv, strdup("-target"));
diff --git a/src/distcc.h b/src/distcc.h
index 7860a2c..4b94aec 100644
--- a/src/distcc.h
+++ b/src/distcc.h
@@ -262,6 +262,7 @@ int dcc_expand_preprocessor_options(char ***argv_ptr);
/* argutil.c */
unsigned int dcc_argv_len(char **a);
int dcc_argv_search(char **a, const char *);
+int dcc_argv_startswith(char **a, const char *);
int dcc_copy_argv(char **argv, char ***out_argv, int extra_args);
int dcc_argv_append(char **argv, char *toadd);
char *dcc_argv_tostr(char **a);