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