Porting questions
Craig Leres
leres at freebsd.org
Tue May 1 17:26:37 UTC 2018
I'm working a port for the Espressif ESP32 toolchain so I can move
development of some projects (FreeRTOS and Arduino) from Ubuntu to
FreeBSD. I have a few questions.
(1) Naming: The pre-built linux 64 bit toolchain is called:
xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
so I thought the port should be called xtensa-esp32-elf; is this a
reasonable name?
(2) Port version: The toolchain is built from the latest version:
https://github.com/espressif/crosstool-NG
There is not a release that corresponds to this version; is it legit for
me to use:
DISTVERSION= 1.22.0-80-g6c4433a5
GH_TUPLE= espressif:crosstool-NG:${DISTVERSION}
which apparently gives me 1.22.0.80.g6.c4433.a5 as the PORTVERSION?
(3) USES=gcc doesn't provide a binary named gcc: crosstool-NG has the
string "gcc" firmly baked into it. When I have USES=gcc (today) I get
gcc6 but without patching a ton of files I need gcc to exist when
poudriere is building. I solved this by also adding:
BUILD_DEPENDS+= gcc:lang/gcc
but it seems wrong to me that USES=gcc doesn't provide a binary named gcc.
(4) How to handle downloads that shouldn't be extracted: The toolchain
uses specific versions of a bunch of things:
TARBALLS= \
binutils-2.25.1.tar.bz2 \
expat-2.1.0.tar.gz \
gcc-5.2.0.tar.bz2 \
gdb-7.10.tar.xz \
gmp-6.0.0a.tar.xz \
isl-0.14.tar.xz \
mpc-1.0.3.tar.gz \
mpfr-3.1.3.tar.xz \
ncurses-6.0.tar.gz \
newlib-2.2.0.tar.gz
Normally the build process downloads these which doesn't work well with
poudriere; you don't want to download these every time you build port. I
put copies in my /usr/ports/distfiles and add symlinks to the work tree
in post-extract and later the build script correctly skips downloading
them when it finds them already there. I'd like to add these to
DISTFILES for auto-download and checksums but I don't want them
extracted by do-extract. Is my best option to override the do-extract
target?
I've attached the current version of the Makefile for informal review.
Craig
-------------- next part --------------
# Created by: Craig Leres <leres at freebsd.org>
# $FreeBSD$
PORTNAME= xtensa-esp32-elf
DISTVERSION= 1.22.0-80-g6c4433a5
CATEGORIES= devel
#DISTFILES=
#MASTER_SITES= SF
DIST_SUBDIR= xtensa-esp32-elf
MAINTAINER= leres at freebsd.org
COMMENT= Toolchain for xtensa-esp32-elf
LICENSE= GPLv2 LGPL21
LICENSE_COMB= multi
BUILD_DEPENDS+= bash:shells/bash \
gawk:lang/gawk \
gcc:lang/gcc \
git:devel/git \
gpatch:devel/patch \
${LOCALBASE}/bin/grep:textproc/gnugrep \
gperf:devel/gperf \
gsed:textproc/gsed \
help2man:misc/help2man \
makeinfo:print/texinfo \
wget:ftp/wget
USES= autoreconf:build bison gmake libtool python:build
USE_GITHUB= yes
GH_TUPLE= espressif:crosstool-NG:${DISTVERSION}
USE_GCC= yes
TARBALLS= \
binutils-2.25.1.tar.bz2 \
expat-2.1.0.tar.gz \
gcc-5.2.0.tar.bz2 \
gdb-7.10.tar.xz \
gmp-6.0.0a.tar.xz \
isl-0.14.tar.xz \
mpc-1.0.3.tar.gz \
mpfr-3.1.3.tar.xz \
ncurses-6.0.tar.gz \
newlib-2.2.0.tar.gz
post-extract:
${MKDIR} ${BUILD_WRKSRC}/.build/tarballs
.for F in $(TARBALLS)
${LN} -s ${DISTDIR}/${DIST_SUBDIR}/${F} ${BUILD_WRKSRC}/.build/tarballs
.endfor
pre-configure:
cd ${BUILD_WRKSRC} && ./bootstrap
do-configure:
cd ${BUILD_WRKSRC} && \
./configure --enable-local --with-grep=${LOCALBASE}/bin/grep
pre-build:
cd ${BUILD_WRKSRC} && \
${SETENV} -uMAKELEVEL -uMAKEFLAGS -u.MAKE.LEVEL.ENV \
${MAKE_CMD} install && ./ct-ng xtensa-esp32-elf
do-build:
cd ${BUILD_WRKSRC} && CT_ALLOW_BUILD_AS_ROOT_SURE=1 ./ct-ng build
.include <bsd.port.mk>
More information about the freebsd-hackers
mailing list