Merge branch 'master' into core32
[profile/ivi/syslinux.git] / core / Makefile
1 ## -----------------------------------------------------------------------
2 ##
3 ##   Copyright 1998-2009 H. Peter Anvin - All Rights Reserved
4 ##   Copyright 2009 Intel Corporation; author: H. Peter Anvin
5 ##
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.
11 ##
12 ## -----------------------------------------------------------------------
13
14 #
15 # Makefile for the SYSLINUX core
16 #
17
18 # No builtin rules
19 MAKEFLAGS += -r
20 MAKE      += -r
21
22 topdir = ..
23 include $(topdir)/MCONFIG.embedded
24 -include $(topdir)/version.mk
25
26 OPTFLAGS =
27 INCLUDES = -I./include -I$(com32)/include
28
29 # This is very similar to cp437; technically it's for Norway and Denmark,
30 # but it's unlikely the characters that are different will be used in
31 # filenames by other users.
32 CODEPAGE = cp865
33
34 # The targets to build in this directory...
35 BTARGET  = kwdhash.gen \
36            ldlinux.bss ldlinux.sys ldlinux.bin \
37            pxelinux.0 isolinux.bin isolinux-debug.bin \
38            extlinux.bin extlinux.bss extlinux.sys
39
40 # All primary source files for the main syslinux files
41 NASMSRC  := $(wildcard *.asm)
42 NASMHDR  := $(wildcard *.inc)
43 CSRC     := $(wildcard *.c)
44 SSRC     := $(wildcard *.S lzo/*.S)
45 CHDR     := $(wildcard *.h)
46 OTHERSRC := keywords
47 ALLSRC    = $(NASMSRC) $(NASMHDR) $(CSRC) $(SSRC) $(CHDR) $(OTHERSRC)
48
49 COBJ     := $(patsubst %.c,%.o,$(CSRC))
50 SOBJ     := $(patsubst %.S,%.o,$(SSRC))
51
52 LIB      = libcore.a
53 LIBS     = $(LIB) $(com32)/lib/libcom32.a $(LIBGCC)
54 LIBOBJS  = $(COBJ) $(SOBJ)
55
56 NASMDEBUG = -g -F stabs
57 NASMOPT  += $(NASMDEBUG)
58
59 PREPCORE = ../lzo/prepcore
60
61 # The DATE is set on the make command line when building binaries for
62 # official release.  Otherwise, substitute a hex string that is pretty much
63 # guaranteed to be unique to be unique from build to build.
64 ifndef HEXDATE
65 HEXDATE := $(shell $(PERL) ../now.pl $(SRCS))
66 endif
67 ifndef DATE
68 DATE    := $(shell sh ../gen-id.sh $(VERSION) $(HEXDATE))
69 endif
70
71 all: $(BTARGET)
72
73 kwdhash.gen: keywords genhash.pl
74         $(PERL) genhash.pl < keywords > kwdhash.gen
75
76 .PRECIOUS: %.elf
77
78 %.raw: %.elf
79         $(OBJCOPY) -O binary $< $(@:.bin=.raw)
80
81 %.bin: %.raw $(PREPCORE)
82         $(PREPCORE) $< $@
83
84 %.o: %.asm kwdhash.gen ../version.gen
85         ( $(NASM) -f elf $(NASMOPT) -M -DDEPEND $(NINCLUDE) \
86           -o $@ $< ; echo '' ) > .$@.d; true
87         $(NASM) -f elf $(NASMOPT) -DDATE_STR="'$(DATE)'" \
88                 -DHEXDATE="$(HEXDATE)" \
89                 -l $(@:.o=.lsr) -o $@ $<
90
91 %.elf: %.o $(LIBS) syslinux.ld
92         $(LD) $(LDFLAGS) -T syslinux.ld -M -o $@ $< $(LIBS) > $(@:.elf=.map)
93         $(OBJDUMP) -h $@ > $(@:.elf=.sec)
94         $(PERL) lstadjust.pl $(@:.elf=.lsr) $(@:.elf=.sec) $(@:.elf=.lst)
95
96 $(LIB): $(LIBOBJS)
97         rm -f $@
98         $(AR) cq $@ $^
99         $(RANLIB) $@
100
101 pxelinux.0: pxelinux.bin
102         cp -f $< $@
103
104 ldlinux.bss: ldlinux.bin
105         dd if=$< of=$@ bs=512 count=1
106
107 ldlinux.sys: ldlinux.bin
108         dd if=$< of=$@ bs=512 skip=1
109
110 extlinux.bss: extlinux.bin
111         dd if=$< of=$@ bs=512 count=1
112
113 extlinux.sys: extlinux.bin
114         dd if=$< of=$@ bs=512 skip=1
115
116 # NASM prior to 2.03 wouldn't auto-generate this dependency...
117 ldlinux.o: codepage.cp
118
119 codepage.cp: ../codepage/$(CODEPAGE).cp
120         cp -f $< $@
121
122 install: installer
123
124 install-lib: installer
125
126 install-all: install install-lib
127
128 netinstall: installer
129
130 tidy dist:
131         rm -f codepage.cp *.o *.elf *.a stupid.* patch.offset .depend .*.d
132         rm -f *.lsr *.lst *.map *.sec *.raw
133         rm -f */*.o */*.lst */.*.d
134         rm -f $(OBSOLETE)
135
136 clean: tidy
137
138 spotless: clean
139         rm -f $(BTARGET) *.bin *_bin.c
140
141 # Include dependencies file
142 -include .*.d */.*.d