使用当前的autotools移植Newlib

时间:2014-06-01 03:10:25

标签: operating-system kernel autotools

我正在尝试为我的业余爱好内核构建一个工具链,但是在构建Newlib时我遇到了问题。每当我尝试在newlib / libc / sys /下的kernels目录中运行autoreconf时,我都会收到错误:

configure.in:5: error: support for Cygnus-style trees has been removed

以下是configure.in的内容(基本上,取自以下教程):

AC_PREREQ(2.59)
AC_INIT([newlib], [NEWLIB_VERSION])
AC_CONFIG_SRCDIR([crt0.S])
AC_CONFIG_AUX_DIR(../../../..)
NEWLIB_CONFIGURE(../../..)
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

和Makefile.am的源代码(再次主要来自教程):

AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
AM_CCASFLAGS = $(INCLUDES)

noinst_LIBRARIES = lib.a

if MAY_SUPPLY_SYSCALLS
    extra_objs = $(lpfx)syscalls.o
else
    extra_objs =
endif

lib_a_SOURCES =
lib_a_LIBADD = $(extra_objs)
EXTRA_lib_a_SOURCES = syscalls.c crt0.S
lib_a_DEPENDENCIES = $(extra_objs)
lib_a_CCASFLAGS = $(AM_CCASFLAGS)
lib_a_CFLAGS = $(AM_CFLAGS)

if MAY_SUPPLY_SYSCALLS
    all: crt0.o
endif

ACLOCAL_AMFLAGS = -I ../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host

是的,我尝试删除AUTOMAKE_OPTIONS=cygnus

我已经用Google搜索并试图理解这一点,据我所知,这是因为我正在使用的autotools版本。根据我最初使用的教程(OSDev - OS Specific Toolchain),我需要一个旧版本。我的问题是我正在使用Kubuntu,它使用apt软件包管理器,而且该版本暂时无法恢复。必须有一些解决方案。要么Newlib已经过时了(这个版本是从2013年12月开始......),或者开发人员因为过时的autotools版本而疯狂。

我能想到的另一件事是,这是来自newlib配置方案本身的消息,在这种情况下,我不知道如何修改我的configure.in和Makefile.am以与新的newlib配置格式保持一致。那个教程是我发现的唯一一个没有使用libgloss(我不想做的)到目前为止,并且在newlib的文档中缺少添加新目标的文档(或者我错过了一些东西)

以下是一些版本信息:

  • 系统:Kubuntu 14.04
  • Automake:1.14.1
  • Autoconf:2.69
  • Newlib:2.1.0

2 个答案:

答案 0 :(得分:5)

不幸的是,我担心使用automake 1.12或更早版本是你唯一的选择。如果我没有弄错的话,Ubuntu有一个Automake1.11单独的软件包可以帮助你,因为1.12和1.14之间的兼容性通常很好,但在此之前它很不稳定。

答案 1 :(得分:1)

我正在为那些正在努力学习here教程的人写这个答案。

我和你(或者是)的情况相同,我正在从头构建一个内核,我想将newlib移植到我的工具链中。不幸的是我觉得这个教程已经过时了,因为我完全按照说明操作,甚至安装了正确版本的软件(包括正确的newlib版本)。上面接受的解决方案对我没有用,但我找到了另一种可能对其他人有用的解决方案:

第1步 - 获取正确的软件

第2步 - 构建过程

解压两个档案:

tar xf automake-1.12.tar.gz
tar xf autoconf-2.65.tar.gz

创建目标文件夹:

mkdir ~/bin

创建构建文件夹:

mkdir build
cd build

首先配置automake:

../automake-1.12/configure --prefix="~/bin"

制作并安装

make && make install

现在让我们配置autoconf

../autoconf-2.65/configure --prefix=~/bin

然后制作并安装:

make && make install

您现在应该在~/bin中拥有正确的二进制文件!

第3步 - 更新路径

暂时将这些二进制文件添加到您的路径中(推荐):

export PATH=~/bin:$PATH

更新路径后,请重新运行autoconfautoreconf,然后就可以完成。