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