diff options
author | Shawn Landden <shawn@git.icu> | 2021-09-27 21:18:09 +0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-27 21:18:09 +0400 |
commit | da7412679d16d161f1e6d23e8f93f15f11fcbf73 (patch) | |
tree | bcf505b2c33a8a86c4611a1ee33a9fc050480c41 | |
parent | a91aef9cf64b259536d0dbfbe4cc58f45a6b594e (diff) | |
parent | 7f0d80dfe16577f55822ba86a1539e53f9d54417 (diff) | |
download | distcc-git-da7412679d16d161f1e6d23e8f93f15f11fcbf73.tar.gz |
Merge pull request #417 from asheplyakov/clang-distcc-linuxkernel-compile
Improved cross-compilation with clang
-rw-r--r-- | src/argutil.c | 13 | ||||
-rw-r--r-- | src/compile.c | 5 | ||||
-rw-r--r-- | src/distcc.h | 1 |
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); |