dmi: check both the AC and ID flags at the same time
[syslinux.git] / mk / lib.mk
blobf8591e56ef5ef7cecd2d6906808a167c096d5d9b
1 # -*- makefile -*-
3 include $(MAKEDIR)/syslinux.mk
5 # Support IA32 and x86_64 platforms with one build
6 # Set up architecture specifics; for cross compilation, set ARCH as apt
7 GCCOPT := $(call gcc_ok,-std=gnu99,)
8 ifeq ($(ARCH),i386)
9 GCCOPT += $(call gcc_ok,-m32,)
10 GCCOPT += $(call gcc_ok,-mpreferred-stack-boundary=2,)
11 MARCH = i386
12 endif
13 ifeq ($(ARCH),x86_64)
14 GCCOPT += $(call gcc_ok,-m64,)
15 #let preferred-stack-boundary be default(=4)
16 MARCH = x86-64
17 endif
18 GCCOPT += $(call gcc_ok,-fno-stack-protector,)
19 GCCOPT += $(call gcc_ok,-fwrapv,)
20 GCCOPT += $(call gcc_ok,-freg-struct-return,)
21 # Note -fPIE does not work with ld on x86_64, try -fPIC instead
22 # Does BIOS build require -fPIE?
23 GCCOPT += $(call gcc_ok,-fPIC)
24 GCCOPT += $(call gcc_ok,-fno-exceptions,)
25 GCCOPT += $(call gcc_ok,-fno-asynchronous-unwind-tables,)
26 GCCOPT += $(call gcc_ok,-fno-strict-aliasing,)
27 GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
28 GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
29 GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
30 GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
32 INCLUDE = -I$(SRC)
33 STRIP = strip --strip-all -R .comment -R .note
35 # zlib configuration flags
36 LIBFLAGS = -DDYNAMIC_CRC_TABLE
38 # We need some features in libpng which apparently aren't available in the
39 # fixed-point versions. It's OK, because we have to have a non-graphical
40 # fallback anyway, just use that on old machines...
41 # LIBFLAGS += -DPNG_NO_FLOATING_POINT_SUPPORTED
43 REQFLAGS = $(GCCOPT) -g -D__COM32__ -D__FIRMWARE_$(FIRMWARE)__ \
44 -nostdinc -iwithprefix include -I. -I$(SRC)/sys \
45 -I$(SRC)/../include -I$(com32)/include/sys \
46 -I$(topdir)/core/include -I$(com32)/lib/ \
47 -I$(com32)/lib/sys/module -I$(OBJ)/../..
48 OPTFLAGS = -Os -march=$(MARCH) -falign-functions=0 -falign-jumps=0 \
49 -falign-labels=0 -ffast-math -fomit-frame-pointer
50 WARNFLAGS = $(GCCWARN) -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Winline
52 CFLAGS = $(OPTFLAGS) $(REQFLAGS) $(WARNFLAGS) $(LIBFLAGS)
54 ifeq ($(FWCLASS),EFI)
55 CFLAGS += -mno-red-zone
56 else
57 CFLAGS += -mregparm=3 -DREGPARM=3
58 endif
60 ARCH_MATH_OBJS = \
61 $(patsubst $(com32)/lib/%.c,%.o,$(wildcard $(com32)/lib/$(ARCH)/math/*.c)) \
62 $(patsubst $(com32)/lib/%.S,%.o,$(wildcard $(com32)/lib/$(ARCH)/math/*.S))
64 VPATH = $(SRC)
65 LIBOTHER_OBJS = \
66 atoi.o atol.o atoll.o calloc.o creat.o \
67 fgets.o fprintf.o fputc.o \
68 putchar.o \
69 getopt.o getopt_long.o \
70 lrand48.o stack.o memccpy.o memchr.o \
71 mempcpy.o memmem.o memmove.o memswap.o \
72 perror.o qsort.o seed48.o \
73 srand48.o sscanf.o \
74 strerror.o errlist.o \
75 strnlen.o \
76 strncat.o strndup.o \
77 stpncpy.o \
78 strntoimax.o strsep.o strspn.o strstr.o \
79 strtoimax.o strtok.o strtol.o strtoll.o strtoull.o \
80 strtoumax.o vprintf.o vsprintf.o \
81 asprintf.o vasprintf.o \
82 vsscanf.o \
83 skipspace.o \
84 chrreplace.o \
85 bufprintf.o \
86 inet.o dhcppack.o dhcpunpack.o \
87 strreplace.o \
88 lstrdup.o \
90 suffix_number.o \
92 getcwd.o fdopendir.o \
94 sys/line_input.o \
95 sys/colortable.o sys/screensize.o \
97 sys/stdcon_read.o sys/stdcon_write.o sys/rawcon_read.o \
98 sys/rawcon_write.o \
99 sys/null_read.o sys/null_write.o sys/serial_write.o \
101 sys/xserial_write.o \
103 sys/ansi.o \
105 sys/ansicon_write.o sys/ansiserial_write.o \
107 pci/cfgtype.o pci/scan.o pci/bios.o \
108 pci/readb.o pci/readw.o pci/readl.o \
109 pci/writeb.o pci/writew.o pci/writel.o \
111 math/strtod.o \
112 $(ARCH_MATH_OBJS) \
113 syslinux/disk.o \
115 syslinux/setup_data.o
117 ## CORE OBJECTS, INCLUDED IN THE ROOT COM32 MODULE
118 LIBENTRY_OBJS = \
119 sys/intcall.o sys/farcall.o sys/cfarcall.o sys/zeroregs.o \
120 sys/argv.o sys/sleep.o \
121 sys/fileinfo.o sys/opendev.o sys/read.o sys/write.o sys/ftell.o \
122 sys/close.o sys/open.o sys/fileread.o sys/fileclose.o \
123 sys/openmem.o \
124 sys/isatty.o sys/fstat.o \
126 dprintf.o vdprintf.o \
128 syslinux/idle.o \
130 exit.o
132 LIBGCC_OBJS = \
133 $(patsubst $(com32)/lib/%.c,%.o,$(wildcard $(com32)/lib/$(ARCH)/libgcc/*.c)) \
134 $(patsubst $(com32)/lib/%.S,%.o,$(wildcard $(com32)/lib/$(ARCH)/libgcc/*.S))
136 LIBCONSOLE_OBJS = \
138 sys/openconsole.o sys/line_input.o \
139 sys/colortable.o sys/screensize.o \
141 sys/stdcon_read.o sys/rawcon_read.o \
142 sys/rawcon_write.o \
143 sys/null_write.o sys/serial_write.o \
145 sys/xserial_write.o \
147 sys/ansi.o \
149 sys/ansicon_write.o sys/ansiserial_write.o \
151 syslinux/serial.o
153 LIBLOAD_OBJS = \
154 syslinux/addlist.o syslinux/freelist.o syslinux/memmap.o \
155 syslinux/movebits.o syslinux/shuffle.o syslinux/shuffle_pm.o \
156 syslinux/shuffle_rm.o syslinux/biosboot.o syslinux/zonelist.o \
157 syslinux/dump_mmap.o syslinux/dump_movelist.o \
159 syslinux/run_default.o syslinux/run_command.o \
160 syslinux/cleanup.o syslinux/localboot.o syslinux/runimage.o \
162 syslinux/loadfile.o syslinux/floadfile.o syslinux/zloadfile.o \
164 syslinux/load_linux.o syslinux/initramfs.o \
165 syslinux/initramfs_file.o syslinux/initramfs_loadfile.o \
166 syslinux/initramfs_archive.o
168 LIBMODULE_OBJS = \
169 sys/module/common.o sys/module/$(ARCH)/elf_module.o \
170 sys/module/elfutils.o \
171 sys/module/exec.o sys/module/elf_module.o
173 # ZIP library object files
174 LIBZLIB_OBJS = \
175 zlib/adler32.o zlib/compress.o zlib/crc32.o \
176 zlib/uncompr.o zlib/deflate.o zlib/trees.o zlib/zutil.o \
177 zlib/inflate.o zlib/infback.o zlib/inftrees.o zlib/inffast.o \
178 sys/zfile.o sys/zfopen.o
180 MINLIBOBJS = \
181 $(addprefix $(OBJ)/,syslinux/ipappend.o \
182 syslinux/dsinfo.o \
183 $(LIBOTHER_OBJS) \
184 $(LIBGCC_OBJS) \
185 $(LIBCONSOLE_OBJS) \
186 $(LIBLOAD_OBJS) \
187 $(LIBZLIB_OBJS))
188 # $(LIBVESA_OBJS)
190 CORELIBOBJS = \
191 memcmp.o printf.o strncmp.o vfprintf.o \
192 strlen.o vsnprintf.o snprintf.o stpcpy.o strcmp.o strdup.o \
193 strcpy.o strncpy.o fopen.o fread.o fread2.o puts.o \
194 strtoul.o strntoumax.o strcasecmp.o \
195 sprintf.o strlcat.o strchr.o strlcpy.o strncasecmp.o ctypes.o \
196 fputs.o fwrite2.o fwrite.o fgetc.o fclose.o lmalloc.o \
197 sys/err_read.o sys/err_write.o sys/null_read.o \
198 sys/stdcon_write.o \
199 syslinux/memscan.o strrchr.o strcat.o \
200 syslinux/debug.o \
201 $(LIBGCC_OBJS) \
202 $(LIBENTRY_OBJS) \
203 $(LIBMODULE_OBJS)
205 ifneq ($(FWCLASS),EFI)
206 # For EFI, these are part of gnu-efi
207 CORELIBOBJS += $(ARCH)/setjmp.o memcpy.o memset.o
208 endif
210 LDFLAGS = -m elf_$(ARCH) --hash-style=gnu -T $(com32)/lib/$(ARCH)/elf.ld
212 .SUFFIXES: .c .o .a .so .lo .i .S .s .ls .ss .lss
214 % : %.c # Cancel default rule
216 % : %.S
218 %.o: %.c
219 $(CC) $(MAKEDEPS) $(CFLAGS) -c -o $@ $<
221 .c.i:
222 $(CC) $(MAKEDEPS) $(CFLAGS) -E -o $@ $<
224 %.s: %.c
225 $(CC) $(MAKEDEPS) $(CFLAGS) -S -o $@ $<
227 %.o: %.S
228 $(CC) $(MAKEDEPS) $(CFLAGS) -D__ASSEMBLY__ -c -o $@ $<
230 .S.s:
231 $(CC) $(MAKEDEPS) $(CFLAGS) -D__ASSEMBLY__ -E -o $@ $<
233 .S.lo:
234 $(CC) $(MAKEDEPS) $(CFLAGS) $(SOFLAGS) -D__ASSEMBLY__ -c -o $@ $<
236 .S.ls:
237 $(CC) $(MAKEDEPS) $(CFLAGS) $(SOFLAGS) -D__ASSEMBLY__ -E -o $@ $<
239 %(OBJ)/%.o: $(SRC)/%.s
240 $(CC) $(MAKEDEPS) $(CFLAGS) -x assembler -c -o $@ $<
242 .ls.lo:
243 $(CC) $(MAKEDEPS) $(CFLAGS) $(SOFLAGS) -x assembler -c -o $@ $<
245 .c.lo:
246 $(CC) $(MAKEDEPS) $(CFLAGS) $(SOFLAGS) -c -o $@ $<
248 .c.ls:
249 $(CC) $(MAKEDEPS) $(CFLAGS) $(SOFLAGS) -S -o $@ $<
251 %.c32: %.elf
252 $(OBJCOPY) --strip-debug --strip-unneeded $< $@