Boot stuff dependencies from NetBSD. Patch by Antoine Leca. Relocated to src/sys. The port is using the same libminc.a as usual MINIX services (and does not use NetBSD libkern); the headers imported from NetBSD sys/ tree have been kept to a minimum (still numbers higher than 30 though.) Note the peculiar way to use libraries (libsa, libi386, etc.): the source code is shared, but each component builds its own copy of the library, with its own set of preprocessor defines.
186 lines
4.6 KiB
Clojure
186 lines
4.6 KiB
Clojure
# $NetBSD: Makefile.boot,v 1.56 2011/12/25 06:09:09 tsutsui Exp $
|
|
|
|
S= ${.CURDIR}/../../../../..
|
|
|
|
NOMAN=
|
|
PROG?= boot
|
|
NEWVERSWHAT?= "BIOS Boot"
|
|
VERSIONFILE?= ${.CURDIR}/../version
|
|
|
|
ACTIVE_CC?= ${CC}
|
|
AFLAGS.biosboot.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:}
|
|
|
|
SOURCES?= biosboot.S boot2.c conf.c devopen.c exec.c
|
|
SRCS= ${SOURCES}
|
|
.if !make(depend)
|
|
SRCS+= vers.c
|
|
.endif
|
|
|
|
PIE_CFLAGS=
|
|
PIE_AFLAGS=
|
|
PIE_LDFLAGS=
|
|
|
|
.include <bsd.own.mk>
|
|
|
|
STRIPFLAG= # nothing
|
|
|
|
LIBCRT0= # nothing
|
|
LIBCRTBEGIN= # nothing
|
|
LIBCRTEND= # nothing
|
|
LIBC= # nothing
|
|
|
|
BINDIR=/usr/mdec
|
|
BINMODE=444
|
|
|
|
.PATH: ${.CURDIR}/.. ${.CURDIR}/../../lib
|
|
|
|
LDFLAGS+= -nostdlib -Wl,-N -Wl,-e,boot_start
|
|
CPPFLAGS+= -I ${.CURDIR}/.. -I ${.CURDIR}/../../lib -I ${S}/lib/libsa
|
|
CPPFLAGS+= -I ${.OBJDIR}
|
|
# Make sure we override any optimization options specified by the user
|
|
COPTS= -Os
|
|
|
|
.if defined(HAVE_GCC)
|
|
.if ${MACHINE_ARCH} == "x86_64"
|
|
LDFLAGS+= -Wl,-m,elf_i386
|
|
AFLAGS+= -m32
|
|
CPUFLAGS= -m32
|
|
LIBKERN_ARCH=i386
|
|
KERNMISCMAKEFLAGS="LIBKERN_ARCH=i386"
|
|
.else
|
|
CPUFLAGS= -march=i386 -mtune=i386
|
|
.endif
|
|
.endif
|
|
|
|
CFLAGS+= -mno-sse -mno-sse2 -mno-sse3
|
|
|
|
COPTS+= -ffreestanding
|
|
CFLAGS+= -Wall -Wmissing-prototypes -Wstrict-prototypes
|
|
CPPFLAGS+= -nostdinc -D_STANDALONE
|
|
CPPFLAGS+= -I$S
|
|
.if defined(__MINIX)
|
|
CPPFLAGS+= -I${DESTDIR}/usr/include
|
|
CPPFLAGS+= -I${.CURDIR}/../../../../../../
|
|
.endif
|
|
|
|
CPPFLAGS+= -DSUPPORT_PS2
|
|
CPPFLAGS+= -DDIRECT_SERIAL
|
|
CPPFLAGS+= -DSUPPORT_SERIAL=boot_params.bp_consdev
|
|
|
|
CPPFLAGS+= -DCONSPEED=boot_params.bp_conspeed
|
|
CPPFLAGS+= -DCONSADDR=boot_params.bp_consaddr
|
|
CPPFLAGS+= -DCONSOLE_KEYMAP=boot_params.bp_keymap
|
|
|
|
CPPFLAGS+= -DSUPPORT_CD9660
|
|
CPPFLAGS+= -DSUPPORT_USTARFS
|
|
CPPFLAGS+= -DSUPPORT_DOSFS
|
|
CPPFLAGS+= -DSUPPORT_EXT2FS
|
|
CPPFLAGS+= -DSUPPORT_MINIXFS3
|
|
CPPFLAGS+= -DPASS_BIOSGEOM
|
|
CPPFLAGS+= -DPASS_MEMMAP
|
|
#CPPFLAGS+= -DBOOTPASSWD
|
|
CPPFLAGS+= -DEPIA_HACK
|
|
#CPPFLAGS+= -DDEBUG_MEMSIZE
|
|
#CPPFLAGS+= -DBOOT_MSG_COM0
|
|
CPPFLAGS+= -DLIBSA_ENABLE_LS_OP
|
|
|
|
# The biosboot code is linked to 'virtual' address of zero and is
|
|
# loaded at physical address 0x10000.
|
|
# XXX The heap values should be determined from _end.
|
|
SAMISCCPPFLAGS+= -DHEAP_START=0x40000 -DHEAP_LIMIT=0x70000
|
|
SAMISCCPPFLAGS+= -DLIBSA_PRINTF_LONGLONG_SUPPORT
|
|
SAMISCMAKEFLAGS+= SA_USE_CREAD=yes # Read compressed kernels
|
|
SAMISCMAKEFLAGS+= SA_INCLUDE_NET=no # Netboot via TFTP, NFS
|
|
|
|
.if defined(HAVE_GCC) || defined(HAVE_PCC)
|
|
CPPFLAGS+= -Wno-pointer-sign
|
|
.endif
|
|
|
|
# CPPFLAGS+= -DBOOTXX_RAID1_SUPPORT
|
|
|
|
I386_STAND_DIR?= $S/arch/i386/stand
|
|
|
|
CLEANFILES+= machine x86
|
|
|
|
.if !make(obj) && !make(clean) && !make(cleandir)
|
|
.BEGIN:
|
|
-rm -f machine && ln -s $S/arch/i386/include machine
|
|
-rm -f x86 && ln -s $S/arch/x86/include x86
|
|
.ifdef LIBOBJ
|
|
-rm -f lib && ln -s ${LIBOBJ}/lib lib
|
|
mkdir -p ${LIBOBJ}/lib
|
|
.endif
|
|
.endif
|
|
|
|
### find out what to use for libi386
|
|
I386DIR= ${I386_STAND_DIR}/lib
|
|
.include "${I386DIR}/Makefile.inc"
|
|
LIBI386= ${I386LIB}
|
|
|
|
### find out what to use for libsa
|
|
SA_AS= library
|
|
SAMISCMAKEFLAGS+="SA_USE_LOADFILE=yes"
|
|
SAMISCMAKEFLAGS+="SA_ENABLE_LS_OP=yes"
|
|
.include "${S}/lib/libsa/Makefile.inc"
|
|
LIBSA= ${SALIB}
|
|
|
|
.ifndef __MINIX
|
|
### find out what to use for libkern
|
|
KERN_AS= library
|
|
.include "${S}/lib/libkern/Makefile.inc"
|
|
LIBKERN= ${KERNLIB}
|
|
.else
|
|
# MINIX
|
|
LIBKERN= # use MINIX minc
|
|
.endif
|
|
|
|
### find out what to use for libz
|
|
Z_AS= library
|
|
.include "${S}/lib/libz/Makefile.inc"
|
|
LIBZ= ${ZLIB}
|
|
## XXX ??? LIBZ is set up as usual, we use the regular one
|
|
|
|
|
|
cleandir distclean: .WAIT cleanlibdir
|
|
|
|
cleanlibdir:
|
|
-rm -rf lib
|
|
|
|
LIBLIST= ${LIBI386} ${LIBSA} ${LIBZ} ${LIBKERN} ${LIBI386} ${LIBSA}
|
|
# LIBLIST= ${LIBSA} ${LIBKERN} ${LIBI386} ${LIBSA} ${LIBZ} ${LIBKERN}
|
|
|
|
CLEANFILES+= ${PROG}.tmp ${PROG}.map ${PROG}.syms vers.c
|
|
|
|
vers.c: ${VERSIONFILE} ${SOURCES} ${LIBLIST} ${.CURDIR}/../Makefile.boot
|
|
${HOST_SH} ${S}/conf/newvers_stand.sh ${VERSIONFILE} x86 ${NEWVERSWHAT}
|
|
|
|
# Anything that calls 'real_to_prot' must have a %pc < 0x10000.
|
|
# We link the program, find the callers (all in libi386), then
|
|
# explicitly pull in the required objects before any other library code.
|
|
${PROG}: ${OBJS} ${LIBLIST} ${.CURDIR}/../Makefile.boot
|
|
${_MKTARGET_LINK}
|
|
bb="$$( ${CC} -o ${PROG}.syms ${LDFLAGS} -Wl,-Ttext,0 -Wl,-cref \
|
|
${OBJS} ${LIBLIST} ${LDADD} | ( \
|
|
while read symbol file; do \
|
|
[ -z "$$file" ] && continue; \
|
|
[ "$$symbol" = real_to_prot ] && break; \
|
|
done; \
|
|
while \
|
|
oifs="$$IFS"; \
|
|
IFS='()'; \
|
|
set -- $$file; \
|
|
IFS="$$oifs"; \
|
|
[ -n "$$2" ] && echo "${I386DST}/$$2"; \
|
|
read file rest && [ -z "$$rest" ]; \
|
|
do :; \
|
|
done; \
|
|
) )"; \
|
|
${CC} -o ${PROG}.syms ${LDFLAGS} -Wl,-Ttext,0 \
|
|
-Wl,-Map,${PROG}.map -Wl,-cref ${OBJS} $$bb ${LIBLIST} ${LDADD}
|
|
${OBJCOPY} -O binary ${PROG}.syms ${PROG}
|
|
|
|
.ifndef __MINIX
|
|
.include <bsd.prog.mk>
|
|
.else
|
|
.include <minix.service.mk>
|
|
.endif
|