1 # Created by: Guerkan Karaman <gk.freebsd@googlemail.com>
8 MAINTAINER= tobik@FreeBSD.org
9 COMMENT= Open source network boot firmware
13 ONLY_FOR_ARCHS= amd64 i386
14 ONLY_FOR_ARCHS_REASON= not yet ported to anything other than amd64/i386
16 USES= gmake perl5 shebangfix
20 GH_TAGNAME= 9ee70fb95bc266885ff88be228b044a2bb226eeb
22 SHEBANG_FILES= util/geniso util/gensdsk
24 ARCH=${ARCH:S/amd64/i386/} \
37 # Append user-settable build args from make.conf
38 MAKE_ARGS+= ${IPXE_MAKE_ARGS}
39 ALL_TARGET= bin/ipxe.dsk bin/ipxe.lkrn bin/ipxe.pxe bin/ipxe.usb \
42 ALL_TARGET+= bin/8086100f.mrom bin/808610d3.mrom bin/10222000.rom \
44 SUB_FILES= pkg-message
46 PLIST_FILES= ${ALL_TARGET:S@^bin/@${DATADIR}/@}
48 # Possible options are listed in ${WRKSRC}/config/*.h and
49 # http://ipxe.org/buildcfg. Add a ! prefix to an option to undef it
51 _IPXE_BUILDCFG= branding:PRODUCT_NAME="${PKGNAME} (${OPSYS} ${OSREL}/${ARCH})" \
52 console:CONSOLE_SERIAL \
53 console:KEYBOARD_MAP=us \
54 general:!DOWNLOAD_PROTO_FTP \
55 general:DOWNLOAD_PROTO_HTTPS \
56 general:DOWNLOAD_PROTO_NFS \
57 general:IMAGE_TRUST_CMD \
58 general:NET_PROTO_IPV6 \
62 OPTIONS_DEFINE= EFI ISO
63 OPTIONS_DEFAULT= EFI ISO
65 EFI_DESC= Create EFI images
66 ISO_DESC= Create bootable CD image
68 EFI_BUILD_DEPENDS= bash:shells/bash \
69 mformat:emulators/mtools
71 _EFI_TARGETS= ipxe snp snponly
72 .for _arch in ${_EFI_ARCHS}
73 . for _target in ${_EFI_TARGETS}
74 EFI_PLIST_FILES+= ${DATADIR}/${_target}.efi-${_arch}
76 EFI_PLIST_FILES+= ${DATADIR}/ipxe.efi-${_arch}.usb
79 ISO_BUILD_DEPENDS= ${LOCALBASE}/share/syslinux/bios/core/isolinux.bin:sysutils/syslinux \
81 mkisofs:sysutils/cdrtools
82 ISO_MAKE_ARGS= ISOLINUX_BIN="${WRKSRC}/isolinux.bin" \
83 LDLINUX_C32="${LOCALBASE}/share/syslinux/bios/com32/elflink/ldlinux/ldlinux.c32"
84 ISO_ALL_TARGET= bin/ipxe.iso
86 .include <bsd.port.pre.mk>
88 # Add user supplied build configuration after port options etc have
89 # been processed as they might want to overwrite some settings.
90 _IPXE_BUILDCFG+= ${IPXE_BUILDCFG}
92 # XXX: iPXE uses csplit when embedding certificates and assumes
93 # it's GNU csplit, so give it what it wants as a workaround if
94 # CERT=... is in {IPXE_,}MAKE_ARGS.
95 .if ${MAKE_ARGS:MCERT=*}
96 BUILD_DEPENDS+= gcsplit:sysutils/coreutils
97 MAKE_ARGS+= CSPLIT=gcsplit
101 .for _cat _opt in ${_IPXE_BUILDCFG:C/\:/ /}
102 @${ECHO_CMD} '#undef ${_opt:S/^!//:C/(.*)=(.*)/\1/}' >> ${WRKSRC}/config/local/${_cat}.h
104 @${ECHO_CMD} '#define ${_opt:C/=/ /:S/^'//:S/'$//}' >> ${WRKSRC}/config/local/${_cat}.h
109 # ISO creation fails if isolinux.bin is read only
110 ${INSTALL} -m 644 ${LOCALBASE}/share/syslinux/bios/core/isolinux.bin ${WRKSRC}/isolinux.bin
113 .for _arch in ${_EFI_ARCHS}
114 ${DO_MAKE_BUILD} ARCH=${_arch} -C ${WRKSRC} ${_EFI_TARGETS:@.target.@bin-${_arch}-efi/${.target.}.efi@} \
115 bin-${_arch}-efi/ipxe.usb
119 @${MKDIR} ${STAGEDIR}${DATADIR}
120 cd ${WRKSRC} && ${INSTALL_DATA} ${ALL_TARGET} ${STAGEDIR}${DATADIR}
123 .for _arch in ${_EFI_ARCHS}
124 . for _target in ${_EFI_TARGETS}
125 ${INSTALL_DATA} ${WRKSRC}/bin-${_arch}-efi/${_target}.efi \
126 ${STAGEDIR}${DATADIR}/${_target}.efi-${_arch}
128 ${INSTALL_DATA} ${WRKSRC}/bin-${_arch}-efi/ipxe.usb \
129 ${STAGEDIR}${DATADIR}/ipxe.efi-${_arch}.usb
132 .include <bsd.port.post.mk>
134 RUN_DEPENDS:= ${RUN_DEPENDS:Ngcc*}