split out util.[ch]
[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 bin_PROGRAMS = gummiboot
38
39 gummiboot_SOURCES = \
40         src/setup/setup.c \
41         src/setup/efivars.c \
42         src/setup/efivars.h
43
44 gummiboot_CPPFLAGS = \
45         $(AM_CPPFLAGS) \
46         -DMACHINE_TYPE_NAME=\"$(MACHINE_TYPE_NAME)\" \
47         -DGUMMIBOOTLIBDIR=\"$(gummibootlibdir)\"
48
49 gummiboot_CFLAGS = \
50         $(AM_CFLAGS) \
51         $(BLKID_CFLAGS)
52
53 gummiboot_LDADD = \
54         $(BLKID_LIBS)
55
56 if ENABLE_MANPAGES
57 %.8: %.xml
58         $(AM_V_GEN)$(XSLTPROC) -o $@ --nonet \
59           --stringparam man.output.quietly 1 \
60           --stringparam man.th.extra1.suppress 1 \
61           --stringparam man.authors.section.enabled 0 \
62           --stringparam man.copyright.section.enabled 0 \
63           http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
64
65 dist_man_MANS = man/gummiboot.8
66 endif
67
68 EXTRA_DIST += man/gummiboot.xml
69 CLEANFILES += man/gummiboot.8
70
71 # ------------------------------------------------------------------------------
72 # EFI compilation -- this part of the build system uses custom make rules and
73 # bypasses regular automake to provide absolute control on compiler and linker
74 # flags.
75 efi_loadername = gummiboot$(MACHINE_TYPE_NAME).efi
76 efi_sources = \
77         src/efi/util.c \
78         src/efi/graphics.c \
79         src/efi/gummiboot.c
80
81 efi_cppflags = \
82         $(EFI_CPPFLAGS) \
83         -I$(top_builddir) -include config.h \
84         -I$(EFI_INC_DIR)/efi \
85         -I$(EFI_INC_DIR)/efi/$(ARCH) \
86         -DMACHINE_TYPE_NAME=\"$(MACHINE_TYPE_NAME)\"
87
88 efi_cflags = \
89         $(EFI_CFLAGS) \
90         -Wall \
91         -Wextra \
92         -nostdinc \
93         -ggdb -O0 \
94         -fpic \
95         -fshort-wchar \
96         -nostdinc \
97         -ffreestanding \
98         -fno-strict-aliasing \
99         -fno-stack-protector \
100         -Wsign-compare \
101         -mno-sse \
102         -mno-mmx
103
104 if ARCH_X86_64
105 efi_cflags += \
106         -mno-red-zone \
107         -DEFI_FUNCTION_WRAPPER \
108         -DGNU_EFI_USE_MS_ABI
109 endif
110
111 efi_ldflags = \
112         $(EFI_LDLAGS) \
113         -T $(EFI_LDS_DIR)/elf_$(ARCH)_efi.lds \
114         -shared \
115         -Bsymbolic \
116         -nostdlib \
117         -znocombreloc \
118         -L $(EFI_LIB_DIR) \
119         $(EFI_LDS_DIR)/crt0-efi-$(ARCH).o
120
121 efi_objects = $(addprefix $(top_builddir)/,$(efi_sources:.c=.o))
122 efi_solib = $(top_builddir)/src/efi/gummiboot.so
123
124 # ------------------------------------------------------------------------------
125 gummibootlib_DATA = $(efi_loadername)
126 CLEANFILES += $(efi_objects) $(efi_solib) $(efi_loadername)
127 EXTRA_DIST += $(efi_sources)
128
129 $(top_builddir)/src/efi/%.o: $(top_srcdir)/src/efi/%.c
130         @$(MKDIR_P) $(top_builddir)/src/efi/
131         $(AM_V_CC)$(EFI_CC) $(efi_cppflags) $(efi_cflags) -c $< -o $@
132
133 $(efi_solib): $(efi_objects)
134         $(AM_V_CCLD)$(LD) $(efi_ldflags) $(efi_objects) \
135                 -o $@ -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name); \
136         nm -D -u $@ | grep ' U ' && exit 1 || :
137 .DELETE_ON_ERROR: $(efi_solib)
138
139 $(efi_loadername): $(efi_solib)
140         $(AM_V_GEN) objcopy -j .text -j .sdata -j .data -j .dynamic \
141           -j .dynsym -j .rel -j .rela -j .reloc -j .eh_frame \
142           --target=efi-app-$(ARCH) $< $@
143
144 # ------------------------------------------------------------------------------
145 CLEANFILES += test-disk.img
146 EXTRA_DIST += test/test-create-disk.sh
147
148 test-disk.img: gummiboot$(MACHINE_TYPE_NAME).efi test/test-create-disk.sh
149         $(AM_V_GEN)test/test-create-disk.sh
150
151 qemu: test-disk.img
152         $(QEMU) -m 256 -bios $(QEMU_BIOS) -snapshot test-disk.img
153
154 install-tree: all
155         rm -rf $(abs_srcdir)/install-tree
156         $(MAKE) install DESTDIR=$(abs_srcdir)/install-tree
157         tree $(abs_srcdir)/install-tree