1 ## -----------------------------------------------------------------------
3 ## Copyright 1998-2009 H. Peter Anvin - All Rights Reserved
4 ## Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
6 ## This program is free software; you can redistribute it and/or modify
7 ## it under the terms of the GNU General Public License as published by
8 ## the Free Software Foundation, Inc., 53 Temple Place Ste 330,
9 ## Boston MA 02111-1307, USA; either version 2 of the License, or
10 ## (at your option) any later version; incorporated herein by reference.
12 ## -----------------------------------------------------------------------
15 # Makefile for the SYSLINUX core
24 include $(MAKEDIR
)/embedded.mk
25 -include $(objdir
)/version.mk
28 INCLUDES
= -I
$(SRC
)/include -I
$(com32
)/include -I
$(com32
)/include/sys
-I
$(com32
)/lib \
29 -I
$(SRC
)/lwip
/src
/include -I
$(SRC
)/lwip
/src
/include/ipv4
-I
$(SRC
)/fs
/pxe
31 # This is very similar to cp437; technically it's for Norway and Denmark,
32 # but it's unlikely the characters that are different will be used in
33 # filenames by other users.
36 # The targets to build in this directory...
37 BTARGET
= kwdhash.gen \
38 ldlinux.bss ldlinux.sys ldlinux.bin \
39 isolinux.bin isolinux-debug.bin pxelinux
.0 lpxelinux
.0
41 # All primary source files for the main syslinux files
42 NASMSRC
:= $(wildcard $(SRC
)/*.asm
)
43 NASMHDR
:= $(wildcard $(SRC
)/*.inc
)
44 CSRC
:= $(shell find
$(SRC
) -name
'*.c' -print)
45 SSRC
:= $(shell find
$(SRC
) -name
'*.S' -print)
46 CHDR
:= $(shell find
$(SRC
) -name
'*.h' -print)
48 ALLSRC
= $(NASMSRC
) $(NASMHDR
) $(CSRC
) $(SSRC
) $(CHDR
) $(OTHERSRC
)
50 COBJ
:= $(subst $(SRC
)/,,$(patsubst %.c
,%.o
,$(CSRC
)))
51 SOBJ
:= $(subst $(SRC
)/,,$(patsubst %.S
,%.o
,$(SSRC
)))
53 # To make this compatible with the following $(filter-out), make sure
54 # we prefix everything with $(SRC)
56 $(addprefix $(SRC
)/fs
/pxe
/, dhcp_option.c pxe.c tftp.c urlparse.c bios.c
)
58 LPXELINUX_CSRC
= $(CORE_PXE_CSRC
) \
59 $(shell find
$(SRC
)/lwip
-name
'*.c' -print) \
60 $(addprefix $(SRC
)/fs
/pxe
/, \
61 core.c dnsresolv.c ftp.c ftp_readdir.c gpxeurl.c http.c \
62 http_readdir.c idle.c isr.c tcp.c
)
64 PXELINUX_CSRC
= $(CORE_PXE_CSRC
) \
65 $(shell find
$(SRC
)/legacynet
-name
'*.c' -print)
67 LPXELINUX_OBJS
= $(subst $(SRC
)/,,$(LPXELINUX_CSRC
:%.c
=%.o
))
68 PXELINUX_OBJS
= $(subst $(SRC
)/,,$(PXELINUX_CSRC
:%.c
=%.o
))
70 UNITTEST_CSRC
= $(shell find
$(SRC
) -path
'*/tests/*.c' -print)
71 UNITTEST_OBJS
= $(subst $(SRC
)/,,$(UNITTEST_CSRC
:%.c
=%.o
))
73 # Don't include console and network stack specific objects or unit tests
74 FILTER_OBJS
= %rawcon.o
%plaincon.o
%pxelinux-c.o
%ldlinux-c.o \
75 %isolinux-c.o
%localboot.o
%pxeboot.o \
76 $(subst $(OBJ
)/,,$(UNITTEST_OBJS
)) \
77 $(subst $(OBJ
)/,,$(LPXELINUX_OBJS
)) \
78 $(subst $(OBJ
)/,,$(PXELINUX_OBJS
))
81 # EFI is single-threaded.
82 FILTER_OBJS
+= $(subst $(SRC
)/,, \
83 $(patsubst %.c
,%.o
, $(wildcard $(SRC
)/thread
/*.c
)) \
84 $(patsubst %.S
,%.o
, $(wildcard $(SRC
)/thread
/*.S
)))
87 COBJS
= $(filter-out $(FILTER_OBJS
),$(COBJ
))
88 SOBJS
= $(filter-out $(FILTER_OBJS
),$(SOBJ
))
91 COBJS
+= $(subst $(SRC
)/,,$(CORE_PXE_CSRC
:%.c
=%.o
) fs
/pxe
/ftp.o fs
/pxe
/ftp_readdir.o \
92 fs
/pxe
/http.o fs
/pxe
/http_readdir.o
)
96 LIBS
= $(LIB
) --whole-archive
$(objdir
)/com32
/lib
/libcom32core.a
97 LIBDEP
= $(filter-out -% %start
%,$(LIBS
))
98 LIBOBJS
= $(COBJS
) $(SOBJS
)
100 NASMDEBUG
= -g
-F dwarf
101 NASMOPT
+= $(NASMDEBUG
)
103 PREPCORE
= $(OBJ
)/..
/lzo
/prepcore
105 CFLAGS
+= -D__SYSLINUX_CORE__
-I
$(objdir
) -DLDLINUX
=\"$(LDLINUX
)\"
107 # The DATE is set on the make command line when building binaries for
108 # official release. Otherwise, substitute a hex string that is pretty much
109 # guaranteed to be unique to be unique from build to build.
111 HEXDATE
:= $(shell $(PERL
) $(SRC
)/..
/now.pl
$(SRCS
))
114 DATE
:= $(shell sh
$(SRC
)/..
/gen-id.sh
$(VERSION
) $(HEXDATE
))
117 # Set up the NASM and LD options for the architecture
124 ifeq ($(ARCH
),x86_64
)
126 #LD_PIE = --pic-executable
131 all: makeoutputdirs
$(filter-out %bios.o
,$(COBJS
) $(SOBJS
)) codepage.o
133 all: makeoutputdirs
$(BTARGET
)
137 @mkdir
-p
$(sort $(dir $(COBJ
) $(SOBJ
)))
139 kwdhash.gen
: keywords genhash.pl
140 $(PERL
) $(SRC
)/genhash.pl
< $(SRC
)/keywords
> $(OBJ
)/kwdhash.gen
145 $(OBJCOPY
) -O binary
-S
$< $(@
:.bin
=.raw
)
147 # GNU make 3.82 gets confused by the first form
148 .PRECIOUS
: $(OBJ
)/%.raw
150 %.bin
: %.raw
$(PREPCORE
)
153 %.o
: %.asm kwdhash.gen
$(OBJ
)/..
/version.gen
154 $(NASM
) -f
$(NASM_ELF
) $(NASMOPT
) -DDATE_STR
="'$(DATE)'" \
155 -DHEXDATE
="$(HEXDATE)" \
158 -l
$(@
:.o
=.lsr
) -o
$@
-MP
-MD
$(dir $@
).
$(notdir $@
).d
$<
160 AUXLIBS
= libisolinux.a libisolinux-debug.a libldlinux.a \
161 libpxelinux.a liblpxelinux.a
162 LDSCRIPT
= $(SRC
)/$(ARCH
)/syslinux.
ld
164 %.elf
: %.o
$(LIBDEP
) $(LDSCRIPT
) $(AUXLIBS
)
165 $(LD
) $(LDFLAGS
) -Bsymbolic
$(LD_PIE
) -E
--hash-style
=gnu
-T
$(LDSCRIPT
) -M
-o
$@
$< \
166 --start-group
$(LIBS
) $(subst $(*F
).elf
,lib
$(*F
).a
,$@
) --end-group \
168 $(OBJDUMP
) -h
$@
> $(@
:.elf
=.sec
)
169 $(PERL
) $(SRC
)/lstadjust.pl
$(@
:.elf
=.lsr
) $(@
:.elf
=.sec
) $(@
:.elf
=.lst
)
171 libisolinux.a
: rawcon.o localboot.o isolinux-c.o
176 libisolinux-debug.a
: libisolinux.a
179 # Legacy network stack
180 libpxelinux.a
: rawcon.o pxeboot.o pxelinux-c.o
$(PXELINUX_OBJS
)
186 liblpxelinux.a
: rawcon.o pxeboot.o pxelinux-c.o
$(LPXELINUX_OBJS
)
191 libldlinux.a
: plaincon.o localboot.o ldlinux-c.o
201 pxelinux.o
: pxelinux.asm kwdhash.gen ..
/version.gen
202 $(NASM
) -f
$(NASM_ELF
) $(NASMOPT
) -DDATE_STR
="'$(DATE)'" \
203 -DHEXDATE
="$(HEXDATE)" \
207 -l
$(@
:.o
=.lsr
) -o
$@
-MP
-MD
$(dir $@
).
$(notdir $@
).d
$<
209 pxelinux
.0: pxelinux.bin
212 lpxelinux.o
: pxelinux.asm kwdhash.gen ..
/version.gen
213 $(NASM
) -f
$(NASM_ELF
) $(NASMOPT
) -DDATE_STR
="'$(DATE)'" \
214 -DHEXDATE
="$(HEXDATE)" \
218 -l
$(@
:.o
=.lsr
) -o
$@
-MP
-MD
$(dir $@
).
$(notdir $@
).d
$<
220 lpxelinux
.0: lpxelinux.bin
223 ldlinux.bss
: ldlinux.bin
224 dd if
=$< of
=$@ bs
=512 count
=1
226 ldlinux.sys
: ldlinux.bin
227 dd if
=$< of
=$@ bs
=512 skip
=2
229 codepage.cp
: $(OBJ
)/..
/codepage
/$(CODEPAGE
).cp
232 codepage.o
: codepage.S codepage.cp
236 install-lib
: installer
238 install-all
: install install-lib
240 netinstall
: installer
243 find .
-type f \
( -name
'*.o' -o
-name
'*.a' -o
-name
'.*.d' \
244 -o
-name
'*.lst' \
) -print | xargs
-rt
rm -f
245 rm -f codepage.cp
*.elf stupid.
* patch.offset .depend
246 rm -f
*.elf.tmp
*.sym
247 rm -f
*.lsr
*.map
*.sec
*.raw
248 rm -f
$(OBSOLETE
) $(LIB
)
253 rm -f
$(BTARGET
) *.bin
*_bin.c
255 # Include dependencies file
256 -include $(shell find .
-name
'.*.d' -print)