build-sys: fix typo
[platform/upstream/gummiboot.git] / Makefile.am
1 #
2 #  This file is part of gummiboot
3 #
4 #  Copyright (C) 2013 Karel Zak <kzak@redhat.com>
5 #
6 #  gummiboot is free software; you can redistribute it and/or modify it
7 #  under the terms of the GNU Lesser General Public License as published by
8 #  the Free Software Foundation; either version 2.1 of the License, or
9 #  (at your option) any later version.
10 #
11 #  gummiboot is distributed in the hope that it will be useful, but
12 #  WITHOUT ANY WARRANTY; without even the implied warranty of
13 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 #  Lesser General Public License for more details.
15 #
16 #  You should have received a copy of the GNU Lesser General Public License
17 #  along with systemd; If not, see <http://www.gnu.org/licenses/>.
18
19 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
20 AM_MAKEFLAGS = --no-print-directory
21
22 gummibootlibdir = $(prefix)/lib/gummiboot
23
24 AM_CPPFLAGS = -include config.h
25 AM_CFLAGS = \
26         -D_GNU_SOURCE \
27         -Wall \
28         -Wextra \
29         -Wmissing-prototypes \
30         -Wno-unused-parameter
31 AM_LDFLAGS =
32
33 EXTRA_DIST = autogen.sh README LICENSE
34 CLEANFILES =
35
36 # ------------------------------------------------------------------------------
37 if HAVE_BLKID
38 bin_PROGRAMS = gummiboot
39
40 gummiboot_SOURCES = \
41         src/setup/setup.c \
42         src/setup/efivars.c \
43         src/setup/efivars.h
44
45 gummiboot_CPPFLAGS = \
46         $(AM_CPPFLAGS) \
47         -DMACHINE_TYPE_NAME=\"$(MACHINE_TYPE_NAME)\" \
48         -DGUMMIBOOTLIBDIR=\"$(gummibootlibdir)\"
49
50 gummiboot_CFLAGS = \
51         $(AM_CFLAGS) \
52         $(BLKID_CFLAGS)
53
54 gummiboot_LDADD = \
55         $(BLKID_LIBS)
56 endif
57
58 if ENABLE_MANPAGES
59 %.8: %.xml
60         $(AM_V_GEN)$(XSLTPROC) -o $@ --nonet \
61           --stringparam man.output.quietly 1 \
62           --stringparam man.th.extra1.suppress 1 \
63           --stringparam man.authors.section.enabled 0 \
64           --stringparam man.copyright.section.enabled 0 \
65           http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
66
67 dist_man_MANS = man/gummiboot.8
68 endif
69
70 EXTRA_DIST += man/gummiboot.xml
71 CLEANFILES += man/gummiboot.8
72
73 # ------------------------------------------------------------------------------
74 # EFI compilation -- this part of the build system uses custom make rules and
75 # bypasses regular automake to provide absolute control on compiler and linker
76 # flags.
77 efi_cppflags = \
78         $(EFI_CPPFLAGS) \
79         -I$(top_builddir) -include config.h \
80         -I$(EFI_INC_DIR)/efi \
81         -I$(EFI_INC_DIR)/efi/$(ARCH) \
82         -DMACHINE_TYPE_NAME=\"$(MACHINE_TYPE_NAME)\"
83
84 efi_cflags = \
85         $(EFI_CFLAGS) \
86         -Wall \
87         -Wextra \
88         -nostdinc \
89         -ggdb -O0 \
90         -fpic \
91         -fshort-wchar \
92         -nostdinc \
93         -ffreestanding \
94         -fno-strict-aliasing \
95         -fno-stack-protector \
96         -Wsign-compare \
97         -mno-sse \
98         -mno-mmx
99
100 if ARCH_X86_64
101 efi_cflags += \
102         -mno-red-zone \
103         -DEFI_FUNCTION_WRAPPER \
104         -DGNU_EFI_USE_MS_ABI
105 endif
106
107 efi_ldflags = \
108         $(EFI_LDLAGS) \
109         -T $(EFI_LDS_DIR)/elf_$(ARCH)_efi.lds \
110         -shared \
111         -Bsymbolic \
112         -nostdlib \
113         -znocombreloc \
114         -L $(EFI_LIB_DIR) \
115         $(EFI_LDS_DIR)/crt0-efi-$(ARCH).o
116
117 # ------------------------------------------------------------------------------
118 gummiboot_headers = \
119         src/efi/util.h \
120         src/efi/console.h \
121         src/efi/graphics.h \
122         src/efi/pefile.h
123
124 gummiboot_sources = \
125         src/efi/util.c \
126         src/efi/console.c \
127         src/efi/graphics.c \
128         src/efi/pefile.c \
129         src/efi/gummiboot.c
130
131 gummiboot_objects = $(addprefix $(top_builddir)/,$(gummiboot_sources:.c=.o))
132 gummiboot_solib = $(top_builddir)/src/efi/gummiboot.so
133 gummiboot = gummiboot$(MACHINE_TYPE_NAME).efi
134
135 gummibootlib_DATA = $(gummiboot)
136 CLEANFILES += $(gummiboot_objects) $(gummiboot_solib) $(gummiboot)
137 EXTRA_DIST += $(gummiboot_sources) $(gummiboot_headers)
138
139 $(top_builddir)/src/efi/%.o: $(top_srcdir)/src/efi/%.c $(addprefix $(top_srcdir)/,$(gummiboot_headers))
140         @$(MKDIR_P) $(top_builddir)/src/efi/
141         $(AM_V_CC)$(EFI_CC) $(efi_cppflags) $(efi_cflags) -c $< -o $@
142
143 $(gummiboot_solib): $(gummiboot_objects)
144         $(AM_V_CCLD)$(LD) $(efi_ldflags) $(gummiboot_objects) \
145                 -o $@ -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name); \
146         nm -D -u $@ | grep ' U ' && exit 1 || :
147 .DELETE_ON_ERROR: $(gummboot_solib)
148
149 $(gummiboot): $(gummiboot_solib)
150         $(AM_V_GEN) objcopy -j .text -j .sdata -j .data -j .dynamic \
151           -j .dynsym -j .rel -j .rela -j .reloc \
152           --target=efi-app-$(ARCH) $< $@
153
154 # ------------------------------------------------------------------------------
155 stub_headers = \
156         src/efi/util.h \
157         src/efi/pefile.h \
158         src/efi/linux.h
159
160 stub_sources = \
161         src/efi/util.c \
162         src/efi/pefile.c \
163         src/efi/linux.c \
164         src/efi/stub.c
165
166 stub_objects = $(addprefix $(top_builddir)/,$(stub_sources:.c=.o))
167 stub_solib = $(top_builddir)/src/efi/stub.so
168 stub = linux$(MACHINE_TYPE_NAME).efi.stub
169
170 gummibootlib_DATA += $(stub)
171 CLEANFILES += $(stub_objects) $(stub_solib) $(stub)
172 EXTRA_DIST += $(stub_sources) $(stub_headers)
173
174 $(top_builddir)/src/efi/%.o: $(top_srcdir)/src/efi/%.c $(addprefix $(top_srcdir)/,$(stub_headers))
175         @$(MKDIR_P) $(top_builddir)/src/efi/
176         $(AM_V_CC)$(EFI_CC) $(efi_cppflags) $(efi_cflags) -c $< -o $@
177
178 $(stub_solib): $(stub_objects)
179         $(AM_V_CCLD)$(LD) $(efi_ldflags) $(stub_objects) \
180                 -o $@ -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name); \
181         nm -D -u $@ | grep ' U ' && exit 1 || :
182 .DELETE_ON_ERROR: $(gummboot_solib)
183
184 $(stub): $(stub_solib)
185         $(AM_V_GEN) objcopy -j .text -j .sdata -j .data -j .dynamic \
186           -j .dynsym -j .rel -j .rela -j .reloc \
187           --target=efi-app-$(ARCH) $< $@
188
189 # ------------------------------------------------------------------------------
190 CLEANFILES += test-disk.img
191 EXTRA_DIST += test/test-create-disk.sh
192
193 test-disk.img: gummiboot$(MACHINE_TYPE_NAME).efi test/test-create-disk.sh
194         $(AM_V_GEN)test/test-create-disk.sh
195
196 qemu: test-disk.img
197         $(QEMU) -machine accel=kvm -m 256 -bios $(QEMU_BIOS) -snapshot test-disk.img
198
199 install-tree: all
200         rm -rf $(abs_srcdir)/install-tree
201         $(MAKE) install DESTDIR=$(abs_srcdir)/install-tree
202         tree $(abs_srcdir)/install-tree