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 # Don't include console and network stack specific objects
71 FILTER_OBJS
= %rawcon.o
%plaincon.o
%pxelinux-c.o
%ldlinux-c.o
%isolinux-c.o \
72 $(subst $(OBJ
)/,,$(LPXELINUX_OBJS
)) \
73 $(subst $(OBJ
)/,,$(PXELINUX_OBJS
))
76 # EFI is single-threaded.
77 FILTER_OBJS
+= $(subst $(SRC
)/,, \
78 $(patsubst %.c
,%.o
, $(wildcard $(SRC
)/thread
/*.c
)) \
79 $(patsubst %.S
,%.o
, $(wildcard $(SRC
)/thread
/*.S
)))
82 COBJS
= $(filter-out $(FILTER_OBJS
),$(COBJ
))
83 SOBJS
= $(filter-out $(FILTER_OBJS
),$(SOBJ
))
86 COBJS
+= $(subst $(SRC
)/,,$(CORE_PXE_CSRC
:%.c
=%.o
) fs
/pxe
/ftp.o fs
/pxe
/ftp_readdir.o \
87 fs
/pxe
/http.o fs
/pxe
/http_readdir.o
)
91 LIBS
= $(LIB
) --whole-archive
$(objdir
)/com32
/lib
/libcom32core.a
92 LIBDEP
= $(filter-out -% %start
%,$(LIBS
))
93 LIBOBJS
= $(COBJS
) $(SOBJS
)
95 NASMDEBUG
= -g
-F dwarf
96 NASMOPT
+= $(NASMDEBUG
)
98 PREPCORE
= $(OBJ
)/..
/lzo
/prepcore
100 CFLAGS
+= -D__SYSLINUX_CORE__
-I
$(objdir
) -DLDLINUX
=\"$(LDLINUX
)\"
102 # The DATE is set on the make command line when building binaries for
103 # official release. Otherwise, substitute a hex string that is pretty much
104 # guaranteed to be unique to be unique from build to build.
106 HEXDATE
:= $(shell $(PERL
) $(SRC
)/..
/now.pl
$(SRCS
))
109 DATE
:= $(shell sh
$(SRC
)/..
/gen-id.sh
$(VERSION
) $(HEXDATE
))
112 # Set up the NASM and LD options for the architecture
119 ifeq ($(ARCH
),x86_64
)
121 #LD_PIE = --pic-executable
126 all: makeoutputdirs
$(filter-out %bios.o
,$(COBJS
) $(SOBJS
)) codepage.o
128 all: makeoutputdirs
$(BTARGET
)
132 @mkdir
-p
$(sort $(dir $(COBJ
) $(SOBJ
)))
134 kwdhash.gen
: keywords genhash.pl
135 $(PERL
) $(SRC
)/genhash.pl
< $(SRC
)/keywords
> $(OBJ
)/kwdhash.gen
140 $(OBJCOPY
) -O binary
-S
$< $(@
:.bin
=.raw
)
142 # GNU make 3.82 gets confused by the first form
143 .PRECIOUS
: $(OBJ
)/%.raw
145 %.bin
: %.raw
$(PREPCORE
)
148 %.o
: %.asm kwdhash.gen
$(OBJ
)/..
/version.gen
149 $(NASM
) -f
$(NASM_ELF
) $(NASMOPT
) -DDATE_STR
="'$(DATE)'" \
150 -DHEXDATE
="$(HEXDATE)" \
153 -l
$(@
:.o
=.lsr
) -o
$@
-MP
-MD
$(dir $@
).
$(notdir $@
).d
$<
155 AUXLIBS
= libisolinux.a libisolinux-debug.a libldlinux.a \
156 libpxelinux.a liblpxelinux.a
157 LDSCRIPT
= $(SRC
)/$(ARCH
)/syslinux.
ld
159 %.elf
: %.o
$(LIBDEP
) $(LDSCRIPT
) $(AUXLIBS
)
160 $(LD
) $(LDFLAGS
) -Bsymbolic
$(LD_PIE
) -E
--hash-style
=gnu
-T
$(LDSCRIPT
) -M
-o
$@
$< \
161 --start-group
$(LIBS
) $(subst $(*F
).elf
,lib
$(*F
).a
,$@
) --end-group \
163 $(OBJDUMP
) -h
$@
> $(@
:.elf
=.sec
)
164 $(PERL
) $(SRC
)/lstadjust.pl
$(@
:.elf
=.lsr
) $(@
:.elf
=.sec
) $(@
:.elf
=.lst
)
166 libisolinux.a
: rawcon.o isolinux-c.o
171 libisolinux-debug.a
: libisolinux.a
174 # Legacy network stack
175 libpxelinux.a
: rawcon.o pxelinux-c.o
$(PXELINUX_OBJS
)
181 liblpxelinux.a
: rawcon.o pxelinux-c.o
$(LPXELINUX_OBJS
)
186 libldlinux.a
: plaincon.o ldlinux-c.o
196 pxelinux.o
: pxelinux.asm kwdhash.gen ..
/version.gen
197 $(NASM
) -f
$(NASM_ELF
) $(NASMOPT
) -DDATE_STR
="'$(DATE)'" \
198 -DHEXDATE
="$(HEXDATE)" \
202 -l
$(@
:.o
=.lsr
) -o
$@
-MP
-MD
$(dir $@
).
$(notdir $@
).d
$<
204 pxelinux
.0: pxelinux.bin
207 lpxelinux.o
: pxelinux.asm kwdhash.gen ..
/version.gen
208 $(NASM
) -f
$(NASM_ELF
) $(NASMOPT
) -DDATE_STR
="'$(DATE)'" \
209 -DHEXDATE
="$(HEXDATE)" \
213 -l
$(@
:.o
=.lsr
) -o
$@
-MP
-MD
$(dir $@
).
$(notdir $@
).d
$<
215 lpxelinux
.0: lpxelinux.bin
218 ldlinux.bss
: ldlinux.bin
219 dd if
=$< of
=$@ bs
=512 count
=1
221 ldlinux.sys
: ldlinux.bin
222 dd if
=$< of
=$@ bs
=512 skip
=2
224 codepage.cp
: $(OBJ
)/..
/codepage
/$(CODEPAGE
).cp
227 codepage.o
: codepage.S codepage.cp
231 install-lib
: installer
233 install-all
: install install-lib
235 netinstall
: installer
238 find .
-type f \
( -name
'*.o' -o
-name
'*.a' -o
-name
'.*.d' \
239 -o
-name
'*.lst' \
) -print | xargs
-rt
rm -f
240 rm -f codepage.cp
*.elf stupid.
* patch.offset .depend
241 rm -f
*.elf.tmp
*.sym
242 rm -f
*.lsr
*.map
*.sec
*.raw
243 rm -f
$(OBSOLETE
) $(LIB
)
248 rm -f
$(BTARGET
) *.bin
*_bin.c
250 # Include dependencies file
251 -include $(shell find .
-name
'.*.d' -print)