Date: Mon, 20 Jul 2015 09:19:07 +1030 From: Michael Vale <m.vale@live.com.au> To: "freebsd-embedded@freebsd.org" <freebsd-embedded@freebsd.org>, "freebsd-mips@freebsd.org" <freebsd-mips@freebsd.org>, "freebsd-arm@freebsd.org" <freebsd-arm@freebsd.org>, "bapt@freebsd.org" <bapt@freebsd.org>, "portmgr@freebsd.org" <portmgr@freebsd.org>, Adrian Chadd <adrian@freebsd.org> Subject: X_BUILD_FOR is back! Message-ID: <COL130-W43DE42FD6856F6C29B9D29C4860@phx.gbl>
index | next in thread | raw e-mail
[-- Attachment #1 --]
Okay!
Patch and go!
bmake X_BUILD_FOR=mips BUILD_AS_USER= SRC_BASE=/home/masked/src
Will build and install ports into /home/masked/src/../root/mips/
By default at first it will want to build and install mips-gcc to cross compile. Next it will want to build and install pkg-1.5.5. Personally I had problems with pkg's configure script and external/libucl/xxhash.c that needed debugging. "cross_compiling" = "yes" after a search for "git head" in pkg's configure needs to be changed from "yes" to "maybe" and a search for swap32 in xxhash.c, finds you with an elif for __bswap32 that needs to be erased, then pkg should compile. Please let me know if you have different results.
Currently ports "install" is broken. I'm not sure what is wrong with it, but rather than wait until it is fixed, I thought I would post this anyway as I have been using the stage target as install, pointing STAGEDIR to SYSROOT.
Next I will go through it and remove SHARE files, DOCs, MAN pages, and other stuff that we don't need on embedded systems.
I did do some changes to Scripts/do-depends.sh and Scripts/find-lib.sh, I'm unsure now if any of those changes were needed and I don't have a copy of the originals right now so rather than post patches, I've posted the entire files, sorry about that.
Correction = Install /does/ work for some ports, it depends on a few factors, I will iron them out ASAP. Other than that, and the excess junk from the ports (DOC's MAN's SHARE, etc). This iteration is for the most-part complete.
Practically /all/ of the pkg support is complete, it will register packages to a database on the embedded filesystems root and successfully delete packages, regardless of the fact that install is not working 100% right now.
The majority of ports should build, "stage-install", install and package up without a fuss. Dependency checking and building should all be sane.
Please let me know what you think.
Regards,
Michael.
[-- Attachment #2 --]
--- bsd.port.mk 2015-07-11 03:25:50.184416000 +1000
+++ bsd.port.mk.stage 2015-07-20 08:24:17.659589000 +1000
@@ -1,7 +1,7 @@
#-*- tab-width: 4; -*-
# ex:ts=4
#
-# $FreeBSD$
+# $FreeBSD: head/Mk/bsd.port.mk 392510 2015-07-19 15:32:35Z bapt $
# $NetBSD: $
#
# bsd.port.mk - 940820 Jordan K. Hubbard.
@@ -342,27 +342,6 @@
# CXXFLAGS_${ARCH}
# Append the cxxflags to CXXFLAGS only on the specified architecture
##
-# USE_GHOSTSCRIPT
-# - If set, this port needs ghostscript to both
-# build and run. If a number is specified,
-# the specified version will be used.
-# The valid value is '7', '8', or '9' in that case.
-# USE_GHOSTSCRIPT_BUILD
-# - If set, this port needs ghostscript to build.
-# USE_GHOSTSCRIPT_RUN
-# - If set, this port needs ghostscript to run.
-# GHOSTSCRIPT_PORT
-# - The port that provides postscript functionality.
-# Some installations may wish to override the default
-# to specify a version without X11 and/or localized
-# versions for their nationality.
-# Default: print/ghostscript9
-# WITH_GHOSTSCRIPT_VER
-# - If set, the specified version of ghostscript will be
-# used. The valid value is "7", "8", or "9". Note that
-# this is for users, not for port maintainers. This
-# should not be used in Makefile.
-##
# USE_GL - A list of Mesa or GL related dependencies needed by the port.
# Supported components are: egl, glesv2, glut, glu, glw, and gl.
# If set to "yes", this is equivalent to "glu". Note that
@@ -1078,25 +1057,30 @@
.if !defined(.PARSEDIR)
IGNORE= Cross building can only be done when using bmake(1) as make(1)
.endif
+.if !defined(ARCH)
+ARCH= ${X_BUILD_FOR}
+.endif
# Do not define CPP on purpose
.if !defined(HOSTCC)
HOSTCC:= ${CC}
HOSTCXX:= ${CXX}
.endif
-.if !exists(/usr/${X_BUILD_FOR}/usr/bin/cc)
-X_SYSROOT= ${LOCALBASE}/${X_BUILD_FOR}
-.else
-X_SYSROOT= /usr/${X_BUILD_FOR}
+
+.if defined(BUILD_AS_USER)
+SRC_BASE= ${HOME}/src
+DISTDIR= ${SRC_BASE}/../distfiles
+WRKDIR= ${SRC_BASE}/../work/${.CURDIR}
+MAKEOBJDIRPREFIX?= ${SRC_BASE}/../obj
+SYSROOT= ${SRC_BASE}/../root/${ARCH}
+STAGEDIR= ${SYSROOT}
+DESTDIR= ${SYSROOT}
+CHROOTED= yes
+LIB_DIRS= ${SYSROOT}/lib ${SYSROOT}${LOCALBASE}/lib
.endif
-CC= ${X_SYSROOT}/usr/bin/cc
-CXX= ${X_SYSROOT}/usr/bin/c++
-NM= ${X_BUILD_FOR}-nm
-STRIP_CMD= ${X_BUILD_FOR}-strip
-# only bmake support the below
-STRIPBIN= ${STRIP_CMD}
-.export.env STRIPBIN
+
.endif
+
#
# DESTDIR section to start a chrooted process if invoked with DESTDIR set
#
@@ -1517,7 +1501,8 @@
LINUXBASE=${LINUXBASE} \
LOCALBASE=${LOCALBASE} \
"STRIP=${STRIP}" \
- TMPPLIST=${TMPPLIST}
+ TMPPLIST=${TMPPLIST} \
+ PKGBASE=${PKGBASE}
.if !empty(USES:Mdesktop-file-utils)
QA_ENV+= USESDESKTOPFILEUTILS=yes
.endif
@@ -1541,12 +1526,50 @@
PORTSDIR="${PORTSDIR}"
.if defined(X_BUILD_FOR)
-BUILD_DEPENDS+= ${X_BUILD_FOR}-cc:${PORTSDIR}/devel/${X_BUILD_FOR}-xdev
-PKG_ENV+= ABI_FILE=${X_SYSROOT}/usr/lib/crt1.o
-MAKE_ENV+= NM=${NM} \
- STRIPBIN=${X_BUILD_FOR}-strip \
- PKG_CONFIG_SYSROOT_DIR="${X_SYSROOT}"
-CONFIGURE_ENV+= PKG_CONFIG_SYSROOT_DIR="${X_SYSROOT}"
+.if ${CC} == gcc
+.if ${X_BUILD_FOR} == mips
+BUILD_DEPENDS+= ${ARCH}-portbld-${OPSYS:tl}${OSREL}-gcc:${PORTSDIR}/devel/${ARCH}-gcc
+.endif
+CC= ${ARCH}-portbld-${OPSYS:tl}${OSREL}-gcc
+CXX= ${ARCH}-portbld-${OPSYS:tl}${OSREL}-g++
+ @if [ ! -h /usr/local/bin/mips-portbld-freebsd11.0-ar ]; then \
+ ln -sf /usr/local/bin/mips-freebsd-ar /usr/local/bin/mips-portbld-freebsd11.0-ar ; \
+ fi ;
+ if [ ! -h /usr/local/bin/mips-portbld-freebsd11.0-nm ]; then \
+ ln -sf /usr/local/bin/mips-freebsd-nm /usr/local/bin/mips-portbld-freebsd11.0-nm ; \
+ fi ;
+ if [ ! -h /usr/local/bin/mips-portbld-freebsd11.0-ranlib ]; then \
+ ln -sf /usr/local/bin/mips-freebsd-ranlib /usr/local/bin/mips-portbld-freebsd11.0-ranlib ; \
+ fi ;
+ if [ ! -h /usr/local/bin/mips-portbld-freebsd11.0-strip ]; then \
+ ln -sf /usr/local/bin/mips-freebsd-strip /usr/local/bin/mips-portbld-freebsd11.0-strip ; \
+ fi
+
+.endif
+.if ${CC} == cc || ${CC} == clang
+CFLAGS+= --target=${CONFIGURE_TARGET}
+.endif
+
+PKG_ENV+= ABI_FILE=${SYSROOT}/usr/lib/crt1.o PKG_DBDIR=${SYSROOT}/var/db/pkg
+PKG_DBDIR= ${SYSROOT}/var/db/pkg
+PORT_DBDIR= ${SYSROOT}/var/db/ports
+NM= ${ARCH}-portbld-${OPSYS:tl}${OSREL}-gcc-nm
+LD= ${ARCH}-portbld-${OPSYS:tl}${OSREL}-gcc-ld
+CCLD= ${ARCH}-portbld-${OPSYS:tl}${OSREL}-gcc-ld
+AR= ${ARCH}-portbld-${OPSYS:tl}${OSREL}-gcc-ar
+RANLIB= ${ARCH}-portbld-${OPSYS:tl}${OSREL}-gcc-ranlib
+#STRIP= ${CONFIGURE_TARGET}-strip
+INCS= -I${SYSROOT}/usr/include
+CROSS_COMPILE= ${ARCH}-portbld-freebsd${OS_REL}
+.if ${X_BUILD_FOR} == mips
+CPU_ARGS+= "-march=mips32r2"
+.endif
+CFLAGS+= --sysroot=${SYSROOT} ${CPU_ARGS} ${INCS} -O
+CXXFLAGS+= --sysroot=${SYSROOT} ${CPU_ARGS} ${INCS} -O
+LDFLAGS+= --sysroot=${SYSROOT}
+STRIPBIN= ${STRIP}
+PKG_CONFIG_SYSROOT_DIR= "${SYSROOT}"
+CONFIGURE_ENV+= PKG_CONFIG_SYSROOT_DIR="${SYSROOT}"
.endif
WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/work
@@ -1673,7 +1696,7 @@
.endif
.if !defined(PKG_DEPENDS) && !defined(CLEAN_FETCH_ENV)
-PKG_DEPENDS+= ${LOCALBASE}/sbin/pkg:${PORTSDIR}/${PKG_ORIGIN}
+PKG_DEPENDS+= ${SYSROOT}/${LOCALBASE}/sbin/pkg:${PORTSDIR}/${PKG_ORIGIN}
.endif
.if defined(USE_GCC)
@@ -1927,58 +1950,6 @@
.endif
.endif
-# Set the default for the installation of Postscript(TM)-
-# compatible functionality.
-.if !defined(USE_GHOSTSCRIPT)
-. if defined(USE_GHOSTSCRIPT_BUILD)
-_USE_GHOSTSCRIPT= ${USE_GHOSTSCRIPT_BUILD}
-. elif defined(USE_GHOSTSCRIPT_RUN)
-_USE_GHOSTSCRIPT= ${USE_GHOSTSCRIPT_RUN}
-. endif
-.else
-_USE_GHOSTSCRIPT= ${USE_GHOSTSCRIPT}
-.endif
-
-.if defined(WITH_GHOSTSCRIPT_VER) && !empty(WITH_GHOSTSCRIPT_VER:M[789])
-_USE_GHOSTSCRIPT_DEFAULT_VER= ${WITH_GHOSTSCRIPT_VER}
-.else
-_USE_GHOSTSCRIPT_DEFAULT_VER= 9
-.endif
-
-.if defined(_USE_GHOSTSCRIPT)
-. if !defined(WITHOUT_X11)
-_USE_GHOSTSCRIPT_PKGNAME_SUFFIX=
-. else
-_USE_GHOSTSCRIPT_PKGNAME_SUFFIX=-nox11
-. endif
-. if !empty(_USE_GHOSTSCRIPT:M[789])
-_USE_GHOSTSCRIPT_VER=${_USE_GHOSTSCRIPT:M[789]}
-. else
-_USE_GHOSTSCRIPT_VER=${_USE_GHOSTSCRIPT_DEFAULT_VER}
-. endif
-.else
-_USE_GHOSTSCRIPT_VER=${_USE_GHOSTSCRIPT_DEFAULT_VER}
-.endif
-
-# Sanity check
-.if defined(_USE_GHOSTSCRIPT) && defined(WITH_GHOSTSCRIPT_VER)
-. if empty(WITH_GHOSTSCRIPT_VER:M[789])
-. error You set an invalid value "${WITH_GHOSTSCRIPT_VER}" in WITH_GHOSTSCRIPT_VER. Abort.
-. elif ${_USE_GHOSTSCRIPT_VER} != ${WITH_GHOSTSCRIPT_VER}
-. error You set WITH_GHOSTSCRIPT_VER as ${WITH_GHOSTSCRIPT_VER} but ${PKGNAME} requires print/ghostscript${_USE_GHOSTSCRIPT_VER}. Abort.
-. endif
-.endif
-
-GHOSTSCRIPT_PORT?= print/ghostscript${_USE_GHOSTSCRIPT_VER}${_USE_GHOSTSCRIPT_PKGNAME_SUFFIX}
-
-# Set up the ghostscript dependencies.
-.if defined(USE_GHOSTSCRIPT) || defined(USE_GHOSTSCRIPT_BUILD)
-BUILD_DEPENDS+= gs:${PORTSDIR}/${GHOSTSCRIPT_PORT}
-.endif
-.if defined(USE_GHOSTSCRIPT) || defined(USE_GHOSTSCRIPT_RUN)
-RUN_DEPENDS+= gs:${PORTSDIR}/${GHOSTSCRIPT_PORT}
-.endif
-
# Macro for doing in-place file editing using regexps
REINPLACE_ARGS?= -i.bak
REINPLACE_CMD?= ${SED} ${REINPLACE_ARGS}
@@ -2138,7 +2109,9 @@
INSTALL_LIB= ${INSTALL} ${COPY} ${STRIP} -m ${SHAREMODE}
INSTALL_SCRIPT= ${INSTALL} ${COPY} -m ${BINMODE}
INSTALL_DATA= ${INSTALL} ${COPY} -m ${_SHAREMODE}
+.if !defined(X_BUILD_FOR)
INSTALL_MAN= ${INSTALL} ${COPY} -m ${MANMODE}
+.endif
INSTALL_MACROS= BSD_INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
BSD_INSTALL_LIB="${INSTALL_LIB}" \
@@ -2621,8 +2594,16 @@
CONFIGURE_SCRIPT?= configure
CONFIGURE_CMD?= ./${CONFIGURE_SCRIPT}
-CONFIGURE_TARGET?= ${ARCH}-portbld-${OPSYS:tl}${OSREL}
-CONFIGURE_TARGET:= ${CONFIGURE_TARGET:S/--build=//}
+BUILD_ARCH!= ${UNAME} -p
+CONFIGURE_BUILD?= ${BUILD_ARCH}-portbld-${OPSYS:tl}${OSREL}
+CONFIGURE_BUILD:= ${CONFIGURE_BUILD:S/--build=//}
+#HOST_ARCH!= ${UNAME} -m
+CONFIGURE_HOST?= ${ARCH}-portbld-${OPSYS:tl}${OSREL}
+CONFIGURE_HOST:= ${CONFIGURE_HOST:S/--host=//}
+.if defined(X_BUILD_FOR)
+CONFIGURE_TARGET?= ${ARCH}-portbld-${OPSYS:tl}${OSREL}
+CONFIGURE_TARGET:= ${CONFIGURE_TARGET:S/--target=//}
+.endif
CONFIGURE_LOG?= config.log
# A default message to print if do-configure fails.
@@ -2637,9 +2618,6 @@
GNU_CONFIGURE_MANPREFIX?= ${MANPREFIX}
CONFIG_SITE?= ${PORTSDIR}/Templates/config.site
CONFIGURE_ARGS+= --prefix=${GNU_CONFIGURE_PREFIX} $${_LATE_CONFIGURE_ARGS}
-.if defined(X_BUILD_FOR)
-CONFIGURE_ARGS+= --host=${X_BUILD_FOR}
-.endif
CONFIGURE_ENV+= CONFIG_SITE=${CONFIG_SITE} lt_cv_sys_max_cmd_len=${CONFIGURE_MAX_CMD_LEN}
HAS_CONFIGURE= yes
@@ -2656,7 +2634,7 @@
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --infodir=${GNU_CONFIGURE_PREFIX}/${INFO_PATH}/${INFO_SUBDIR}" ; \
fi ; \
if [ -z "`./${CONFIGURE_SCRIPT} --version 2>&1 | ${EGREP} -i '(autoconf.*2\.13|Unrecognized option)'`" ]; then \
- _LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --build=${CONFIGURE_TARGET}" ; \
+ _LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --build=${CONFIGURE_BUILD} --host=${CONFIGURE_HOST}" ; \
else \
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} ${CONFIGURE_TARGET}" ; \
fi ;
@@ -3583,9 +3561,13 @@
.if !target(check-already-installed)
.if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER)
+.if defined(X_BUILD_FOR)
+PKG_BIN= ${LOCALBASE}/sbin/pkg-static
+PKG_DBDIR= ${SYSROOT}/var/db/pkg
+.endif
check-already-installed:
@${ECHO_MSG} "===> Checking if ${PKGBASE} already installed"; \
- pkgname=`${PKG_INFO} -q -O ${PKGBASE}`; \
+ pkgname=`env PKG_DBDIR="${PKG_DBDIR}" ${PKG_INFO} -q -O ${PKGBASE}`; \
if [ -n "$${pkgname}" ]; then \
v=`${PKG_VERSION} -t $${pkgname} ${PKGNAME}`; \
if [ "$${v}" = "<" ]; then \
@@ -3863,10 +3845,10 @@
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${PKGBASE}"
- @if ${PKG_INFO} -e ${PKGBASE}; then \
- p=`${PKG_INFO} -q -O ${PKGBASE}`; \
+ @if env ${$PKG_ENV} ${PKG_INFO} -e ${PKGBASE}; then \
+ p=`env ${PKG_ENV} ${PKG_INFO} -q -O ${PKGBASE}`; \
${ECHO_MSG} "===> Deinstalling $${p}"; \
- ${PKG_DELETE} -f ${PKGBASE} ; \
+ env PKG_DBDIR=${PKG_DBDIR} ${PKG_DELETE} -f ${PKGBASE} ; \
else \
${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \
fi
@@ -3887,14 +3869,14 @@
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}"
- @deinstall_names=`${PKG_INFO} -q -O ${PKGORIGIN}`; \
+ @deinstall_names=`env ${PKG_ENV} ${PKG_INFO} -q -O ${PKGORIGIN}`; \
for oldpkgorigin in $$(${GREP} "|${PKGORIGIN}|" ${PORTSDIR}/MOVED | ${CUT} -f 1 -d '|' | ${SORT} -u); do \
deinstall_names="$${deinstall_names} $$(${PKG_INFO} -q -O $${oldpkgorigin})"; \
done; \
if [ -n "$${deinstall_names}" ]; then \
for d in $${deinstall_names}; do \
${ECHO_MSG} "===> Deinstalling $${d}"; \
- ${PKG_DELETE} -f $${d}; \
+ env ${PKG_ENV} ${PKG_DELETE} -f $${d}; \
done; \
else \
${ECHO_MSG} "===> ${PKGORIGIN} not installed, skipping"; \
@@ -4335,6 +4317,7 @@
dp_SCRIPTSDIR="${SCRIPTSDIR}" \
dp_PORTSDIR="${PORTSDIR}" \
dp_MAKE="${MAKE}" \
+ dp_SYSROOT="${SYSROOT}" \
${SH} ${SCRIPTSDIR}/do-depends.sh
.endif
.endfor
@@ -4495,8 +4478,8 @@
RUN-DEPENDS-LIST= \
for dir in $$(${ECHO_CMD} "${_LIB_RUN_DEPENDS:C,.*:([^:]*).*,\1,}" | ${SED} -e 'y/ /\n/' | ${SORT} -u); do \
- if [ -d $$dir ]; then \
- ${ECHO_CMD} $$dir; \
+ if [ -d ${SYSROOT}/$$dir ]; then \
+ ${ECHO_CMD} ${SYSROOT}/$$dir; \
else \
${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
fi; \
@@ -4527,7 +4510,7 @@
fi; \
checked="${PARENT_CHECKED}"; \
for dir in ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,}; do \
- dir=$$(${REALPATH} $$dir); \
+ dir=$$(${SYSROOT}/${REALPATH} $$dir); \
if [ -d $$dir ]; then \
case $$checked in \
$$dir|$$dir\ *|*\ $$dir|*\ $$dir\ *) continue;; \
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?COL130-W43DE42FD6856F6C29B9D29C4860>
