| From foo@baz Wed Nov 21 18:50:25 CET 2018 |
| From: Vinícius Tinti <viniciustinti@gmail.com> |
| Date: Mon, 24 Apr 2017 13:04:58 -0700 |
| Subject: kbuild: Add support to generate LLVM assembly files |
| |
| From: Vinícius Tinti <viniciustinti@gmail.com> |
| |
| commit 433db3e260bc8134d4a46ddf20b3668937e12556 upstream. |
| |
| Add rules to kbuild in order to generate LLVM assembly files with the .ll |
| extension when using clang. |
| |
| # from c code |
| make CC=clang kernel/pid.ll |
| |
| Signed-off-by: Vinícius Tinti <viniciustinti@gmail.com> |
| Signed-off-by: Behan Webster <behanw@converseincode.com> |
| Signed-off-by: Matthias Kaehlcke <mka@chromium.org> |
| Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> |
| Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| .gitignore | 1 + |
| Makefile | 5 +++++ |
| scripts/Makefile.build | 8 ++++++++ |
| 3 files changed, 14 insertions(+) |
| |
| --- a/.gitignore |
| +++ b/.gitignore |
| @@ -33,6 +33,7 @@ |
| *.lzo |
| *.patch |
| *.gcno |
| +*.ll |
| modules.builtin |
| Module.symvers |
| *.dwo |
| --- a/Makefile |
| +++ b/Makefile |
| @@ -1390,6 +1390,8 @@ help: |
| @echo ' (default: $$(INSTALL_MOD_PATH)/lib/firmware)' |
| @echo ' dir/ - Build all files in dir and below' |
| @echo ' dir/file.[ois] - Build specified target only' |
| + @echo ' dir/file.ll - Build the LLVM assembly file' |
| + @echo ' (requires compiler support for LLVM assembly generation)' |
| @echo ' dir/file.lst - Build specified mixed source/assembly target only' |
| @echo ' (requires a recent binutils and recent build (System.map))' |
| @echo ' dir/file.ko - Build module including final link' |
| @@ -1574,6 +1576,7 @@ clean: $(clean-dirs) |
| -o -name '*.symtypes' -o -name 'modules.order' \ |
| -o -name modules.builtin -o -name '.tmp_*.o.*' \ |
| -o -name '*.c.[012]*.*' \ |
| + -o -name '*.ll' \ |
| -o -name '*.gcno' \) -type f -print | xargs rm -f |
| |
| # Generate tags for editors |
| @@ -1677,6 +1680,8 @@ endif |
| $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) |
| %.symtypes: %.c prepare scripts FORCE |
| $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) |
| +%.ll: %.c prepare scripts FORCE |
| + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) |
| |
| # Modules |
| /: prepare scripts FORCE |
| --- a/scripts/Makefile.build |
| +++ b/scripts/Makefile.build |
| @@ -176,6 +176,14 @@ cmd_cc_symtypes_c = |
| $(obj)/%.symtypes : $(src)/%.c FORCE |
| $(call cmd,cc_symtypes_c) |
| |
| +# LLVM assembly |
| +# Generate .ll files from .c |
| +quiet_cmd_cc_ll_c = CC $(quiet_modtag) $@ |
| + cmd_cc_ll_c = $(CC) $(c_flags) -emit-llvm -S -o $@ $< |
| + |
| +$(obj)/%.ll: $(src)/%.c FORCE |
| + $(call if_changed_dep,cc_ll_c) |
| + |
| # C (.c) files |
| # The C file is compiled and updated dependency information is generated. |
| # (See cmd_cc_o_c + relevant part of rule_cc_o_c) |