xref: /kvm-unit-tests/scripts/asm-offsets.mak (revision b9423a4fc5a9332150c48b8c8d28c81e44935660)
1d3aacb4fSAndrew Jones#
2d3aacb4fSAndrew Jones# asm-offsets adapted from the kernel, see
3d3aacb4fSAndrew Jones#   Kbuild
4d3aacb4fSAndrew Jones#   scripts/Kbuild.include
5d3aacb4fSAndrew Jones#   scripts/Makefile.build
6d3aacb4fSAndrew Jones#
7d3aacb4fSAndrew Jones#   Authors: Andrew Jones <drjones@redhat.com>
8d3aacb4fSAndrew Jones#
9d3aacb4fSAndrew Jones
10d3aacb4fSAndrew Jonesdefine sed-y
11132f6f18SThomas Huth	's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; \
12132f6f18SThomas Huth	/^->/{s:->#\(.*\):/* \1 */:; \
13d3aacb4fSAndrew Jones	s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
14d3aacb4fSAndrew Jones	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
15132f6f18SThomas Huth	s:->::; p;}'
16d3aacb4fSAndrew Jonesendef
17d3aacb4fSAndrew Jones
18*b9423a4fSClément Légerdefine asm_offset_name
19*b9423a4fSClément Léger	$(shell echo $(notdir $(1)) | tr [:lower:]- [:upper:]_)
20*b9423a4fSClément Légerendef
21*b9423a4fSClément Léger
22d3aacb4fSAndrew Jonesdefine make_asm_offsets
23d3aacb4fSAndrew Jones	(set -e; \
24*b9423a4fSClément Léger	 echo "#ifndef __$(strip $(asm_offset_name))_H__"; \
25*b9423a4fSClément Léger	 echo "#define __$(strip $(asm_offset_name))_H__"; \
26d3aacb4fSAndrew Jones	 echo "/*"; \
27d3aacb4fSAndrew Jones	 echo " * Generated file. DO NOT MODIFY."; \
28d3aacb4fSAndrew Jones	 echo " *"; \
29d3aacb4fSAndrew Jones	 echo " */"; \
30d3aacb4fSAndrew Jones	 echo ""; \
31d3aacb4fSAndrew Jones	 sed -ne $(sed-y) $<; \
32d3aacb4fSAndrew Jones	 echo ""; \
33d3aacb4fSAndrew Jones	 echo "#endif" ) > $@
34d3aacb4fSAndrew Jonesendef
35d3aacb4fSAndrew Jones
36*b9423a4fSClément Légerdefine gen_asm_offsets_rules
37*b9423a4fSClément Léger$(1).s: $(1).c
38*b9423a4fSClément Léger	$(CC) $(CFLAGS) -fverbose-asm -S -o $$@ $$<
39d3aacb4fSAndrew Jones
40*b9423a4fSClément Léger$(1).h: $(1).s
41*b9423a4fSClément Léger	$$(call make_asm_offsets,$(1))
42*b9423a4fSClément Léger	cp -f $$@ lib/generated/
43*b9423a4fSClément Légerendef
44*b9423a4fSClément Léger
45*b9423a4fSClément Léger$(foreach o,$(asm-offsets),$(eval $(call gen_asm_offsets_rules, $(o:.h=))))
464a18bde1SAlex Bennée
474a18bde1SAlex BennéeOBJDIRS += lib/generated
48d3aacb4fSAndrew Jones
49d3aacb4fSAndrew Jonesasm_offsets_clean:
50d3aacb4fSAndrew Jones	$(RM) $(asm-offsets) $(asm-offsets:.h=.s) \
51d3aacb4fSAndrew Jones	      $(addprefix lib/generated/,$(notdir $(asm-offsets)))
52d3aacb4fSAndrew Jones
53