使用当前的autotools移植Newlib

Cal*_*994 3 operating-system kernel autotools

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

configure.in:5: error: support for Cygnus-style trees has been removed
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

和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
Run Code Online (Sandbox Code Playgroud)

是的,我试过删除AUTOMAKE_OPTIONS=cygnus.

我用Google搜索并试图理解这一点,据我所知,这是因为我正在使用的autotools的版本.根据我最初使用的教程(OSDev - 操作系统特定工具链),我需要一个旧版本.我的问题是我正在使用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

Die*_*enò 5

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