Update net/ipxe to version 20200610
[dports.git] / net / ipxe / Makefile
1 # Created by: Guerkan Karaman <gk.freebsd@googlemail.com>
2 # $FreeBSD$
3
4 PORTNAME=       ipxe
5 DISTVERSION=    20200610
6 CATEGORIES=     net
7
8 MAINTAINER=     tobik@FreeBSD.org
9 COMMENT=        Open source network boot firmware
10
11 LICENSE=        GPLv2
12
13 ONLY_FOR_ARCHS= amd64 i386
14 ONLY_FOR_ARCHS_REASON=  not yet ported to anything other than amd64/i386
15
16 USES=           gmake perl5 shebangfix
17 USE_BINUTILS=   yes
18 USE_GCC=        yes
19 USE_GITHUB=     yes
20 GH_TAGNAME=     9ee70fb95bc266885ff88be228b044a2bb226eeb
21 USE_PERL5=      build
22 SHEBANG_FILES=  util/geniso util/gensdsk
23 MAKE_ARGS=      AR=${AR} \
24                 ARCH=${ARCH:S/amd64/i386/} \
25                 AS=${AS} \
26                 CC=${CC} \
27                 HOST_CC=${CC} \
28                 LD=${LD} \
29                 NM=${NM} \
30                 NO_WERROR=1 \
31                 OBJCOPY=${OBJCOPY} \
32                 OBJDUMP=${OBJDUMP} \
33                 PERL=${PERL} \
34                 RANLIB=${RANLIB} \
35                 SIZE=${SIZE} \
36                 V=1
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 \
40                 bin/undionly.kpxe
41 # VMware ROMs
42 ALL_TARGET+=    bin/8086100f.mrom bin/808610d3.mrom bin/10222000.rom \
43                 bin/15ad07b0.rom
44 SUB_FILES=      pkg-message
45 WRKSRC_SUBDIR=  src
46 PLIST_FILES=    ${ALL_TARGET:S@^bin/@${DATADIR}/@}
47
48 # Possible options are listed in ${WRKSRC}/config/*.h and
49 # http://ipxe.org/buildcfg.  Add a ! prefix to an option to undef it
50 # i.e. turn it off.
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 \
59                 general:PING_CMD \
60                 general:POWEROFF_CMD
61
62 OPTIONS_DEFINE=         EFI ISO
63 OPTIONS_DEFAULT=        EFI ISO
64
65 EFI_DESC=       Create EFI images
66 ISO_DESC=       Create bootable CD image
67
68 EFI_BUILD_DEPENDS=      bash:shells/bash \
69                         mformat:emulators/mtools
70 _EFI_ARCHS=             x86_64
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}
75 . endfor
76 EFI_PLIST_FILES+=       ${DATADIR}/ipxe.efi-${_arch}.usb
77 .endfor
78
79 ISO_BUILD_DEPENDS=      ${LOCALBASE}/share/syslinux/bios/core/isolinux.bin:sysutils/syslinux \
80                         bash:shells/bash \
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
85
86 .include <bsd.port.pre.mk>
87
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}
91
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
98 .endif
99
100 do-configure:
101 .for _cat _opt in ${_IPXE_BUILDCFG:C/\:/ /}
102         @${ECHO_CMD} '#undef ${_opt:S/^!//:C/(.*)=(.*)/\1/}' >> ${WRKSRC}/config/local/${_cat}.h
103 .if ${_opt:N!*}
104         @${ECHO_CMD} '#define ${_opt:C/=/ /:S/^'//:S/'$//}' >> ${WRKSRC}/config/local/${_cat}.h
105 .endif
106 .endfor
107
108 pre-build-ISO-on:
109 # ISO creation fails if isolinux.bin is read only
110         ${INSTALL} -m 644 ${LOCALBASE}/share/syslinux/bios/core/isolinux.bin ${WRKSRC}/isolinux.bin
111
112 do-build-EFI-on:
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
116 .endfor
117
118 do-install:
119         @${MKDIR} ${STAGEDIR}${DATADIR}
120         cd ${WRKSRC} && ${INSTALL_DATA} ${ALL_TARGET} ${STAGEDIR}${DATADIR}
121
122 do-install-EFI-on:
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}
127 . endfor
128         ${INSTALL_DATA} ${WRKSRC}/bin-${_arch}-efi/ipxe.usb \
129                 ${STAGEDIR}${DATADIR}/ipxe.efi-${_arch}.usb
130 .endfor
131
132 .include <bsd.port.post.mk>
133
134 RUN_DEPENDS:=   ${RUN_DEPENDS:Ngcc*}