LINUX.ORG.RU

gcc на mips

 , ,


0

1

Привет всем. Помогите скомпилировать пакет gcc для mips-архитектуры. А точнее для ротуера Keenetic. У них свой тулчейн для сборки пакетов. Пакеты можно собирать из openwrt. Но gcc там нет.

В общем, мне нужен только Makefile.


$ apt-cache search mips --names-only | grep gcc
gcc-4.3-mips-linux-gnu - The GNU C compiler
gcc-4.3-mips-linux-gnu-base - The GNU Compiler Collection (base package)
gcc-4.3-mipsel-linux-gnu - The GNU C compiler
gcc-4.3-mipsel-linux-gnu-base - The GNU Compiler Collection (base package)
gcc-4.4-base-mips-cross - The GNU Compiler Collection (base package) (for cross-compiling)
gcc-4.4-base-mipsel-cross - The GNU Compiler Collection (base package) (for cross-compiling)
gcc-4.4-mips-linux-gnu - The GNU C compiler
gcc-4.4-mips-linux-gnu-base - The GNU Compiler Collection (base package)
gcc-4.4-mipsel-linux-gnu - The GNU C compiler
gcc-4.4-mipsel-linux-gnu-base - The GNU Compiler Collection (base package)
gcc-4.4-multilib-mips-linux-gnu - The GNU C compiler (multilib files)
gcc-4.4-multilib-mipsel-linux-gnu - The GNU C compiler (multilib files)
lib64gcc1-dbg-mips-cross - GCC support library (debug symbols)
lib64gcc1-dbg-mipsel-cross - GCC support library (debug symbols)
lib64gcc1-mips-cross - GCC support library (64bit)
lib64gcc1-mipsel-cross - GCC support library (64bit)
libgcc1-dbg-mips-cross - GCC support library (debug symbols)
libgcc1-dbg-mipsel-cross - GCC support library (debug symbols)
libgcc1-mips-cross - GCC support library (for cross-compiling)
libgcc1-mipsel-cross - GCC support library (for cross-compiling)
libn32gcc1-dbg-mips-cross - GCC support library (debug symbols)
libn32gcc1-dbg-mipsel-cross - GCC support library (debug symbols)
libn32gcc1-mips-cross - GCC support library (n32) (for cross-compiling)
libn32gcc1-mipsel-cross - GCC support library (n32) (for cross-compiling)

и там еще много чего интересного, и это на debian squeeze

solovey ★★
()

Вы не совсем так меня поняли. Дело в том, что для сборки пакетов под данный роутер нужно установить их (ZyXEL) тулчейн - http://code.google.com/p/zyxel-keenetic-packages/wiki/linux_compile.

Для сборки пакетов нужно делать

make menuconfig

И выбирать нужные пакеты, а потом
make where/is/my/package/compile V=99


И после этого в выходной папке получает *.ipk файл. Все, что вы мне предложили - мне не подходит или я что-то не понял...
GeekLS
() автор топика
Ответ на: комментарий от GeekLS

чтобы сделать "make where/is..." тебе нужен компилятор. Ты спросил, как собрать компилятор для mips, я предложил тебе взять готовый пакет.

Или ты хочешь собрать нативный компилятор и запустить его на роутере?

solovey ★★
()
Ответ на: комментарий от GeekLS

а вот с этим хуже...

Тогда предлагаю кросс-компильнуть gcc и гуглить, как собрать ipk.

Либо расковырять какой-нибудь из готовых Makefile'ов и подсмотреть, как ipk создаются там.

solovey ★★
()
Ответ на: комментарий от x0r

тред-не-читай...

Он же сказал, что кросс-компилятор ему не нужен... Ему нужно gcc на роутер впихнуть.

solovey ★★
()
Ответ на: комментарий от anonymous

Вернулся? Ура!
С ЛОР'а не уходят.

И не уходил. =D

GeekLS
() автор топика
Ответ на: комментарий от solovey

а вот с этим хуже...
Тогда предлагаю кросс-компильнуть gcc и гуглить, как собрать ipk.
Либо расковырять какой-нибудь из готовых Makefile'ов и подсмотреть, как ipk создаются там.

Какой именно Makefile. Можно поподробнее.

GeekLS
() автор топика

Добавляем свои пакеты

svn co svn://svn.openwrt.org/openwrt/packages/ .

там есть пакет devel/gcc, внутри Makefile который лезет за исходниками примерно так:

PKG_SOURCE_URL:=ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-$(PKG_VERSION) \
    http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(PKG_VERSION) \
            ftp://ftp.gnu.org/gnu/gcc/releases/gcc-$(PKG_VERSION)

anonymous
()
Ответ на: комментарий от GeekLS

Какой именно Makefile

Ну когда ты выбираешь пакеты в make menuconfig, они же собираются не просто так. Скорее всего, для них либо генерируются Makefile'ы, либо они уже есть готовые. Вот один из таких и расковыряй.

solovey ★★
()
Ответ на: комментарий от solovey

Makefile я нашел, вот только он для x86, как его переделать под MIPS

# 
# Copyright (C) 2008 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=gcc
PKG_VERSION:=$(strip $(subst ",, $(CONFIG_GCC_VERSION)))#"))
PKG_RELEASE:=1
PATCH_DIR=$(TOPDIR)/toolchain/gcc/patches/$(PKG_VERSION)
PKG_SOURCE_URL:=ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-$(PKG_VERSION) \
    http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(PKG_VERSION) \
	    ftp://ftp.gnu.org/gnu/gcc/releases/gcc-$(PKG_VERSION)

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2

include $(INCLUDE_DIR)/package.mk

SEP:=,
TARGET_LANGUAGES:="c$(if $(CONFIG_INSTALL_LIBSTDCPP),$(SEP)c++)$(if $(CONFIG_INSTALL_LIBGCJ),$(SEP)java)"
EXTRA_TARGET=$(if $(CONFIG_EXTRA_TARGET_ARCH),--enable-biarch --enable-targets=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-linux-uclibc)

define Package/gcc
  SECTION:=devel
  CATEGORY:=Development
  TITLE:=gcc
  DEPENDS:=@TARGET_x86 @NO_STRIP
endef

define Package/gcc/description
	build a native toolchain for compiling on target
endef

define Build/Prepare
	$(call Build/Prepare/Default)
	$(SED) 's,\(version_string.. = "[0-9\.]*\).*\(";\),\1 (OpenWrt-2.0)\2,' $(PKG_BUILD_DIR)/gcc/version.c
	$(SED) 's,\(bug_report_url.. = "\).*\(";\),\1<URL:https://dev.openwrt.org/>\2,' $(PKG_BUILD_DIR)/gcc/version.c
	(cd $(PKG_BUILD_DIR)/libstdc++-v3; autoconf;);
	$(SED) 's,gcc_no_link=yes,gcc_no_link=no,' $(PKG_BUILD_DIR)/libstdc++-v3/configure
endef

define Build/Configure
	(cd $(PKG_BUILD_DIR); rm -f config.cache; \
		SHELL="$(BASH)" \
		$(TARGET_CONFIGURE_OPTS) \
		$(PKG_BUILD_DIR)/configure \
			$(TARGET_CONFIGURE_ARGS) \
			--build=$(GNU_HOST_NAME) \
			--host=$(REAL_GNU_TARGET_NAME) \
			--target=$(REAL_GNU_TARGET_NAME) \
			--enable-languages=$(TARGET_LANGUAGES) \
			--enable-shared \
			--disable-__cxa_atexit \
			--enable-target-optspace \
			--with-gnu-ld \
			--disable-nls \
			--disable-libmudflap \
			--disable-multilib \
			$(EXTRA_TARGET) \
			$(SOFT_FLOAT_CONFIG_OPTION) \
			$(call qstrip,$(CONFIG_EXTRA_GCC_CONFIG_OPTIONS)) \
	);
endef

define Build/Compile
	export SHELL="$(BASH)"; $(MAKE_VARS) $(MAKE) -C $(PKG_BUILD_DIR) \
			DESTDIR="$(PKG_INSTALL_DIR)" $(MAKE_ARGS) all install
	# Set up the symlinks to enable lying about target name.
	set -e; \
	(cd $(TOOLCHAIN_DIR); \
		ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \
		cd bin; \
		for app in $(REAL_GNU_TARGET_NAME)-* ; do \
			ln -sf $$$${app} \
			$(GNU_TARGET_NAME)$$$${app##$(REAL_GNU_TARGET_NAME)}; \
		done; \
	);
endef

define Package/gcc/install
	$(INSTALL_DIR) $(1)/usr/lib/
	cp -r $(PKG_INSTALL_DIR)/* $(1)
	cp -r $(TOOLCHAIN_DIR)/include $(1)/usr/
	cp $(TOOLCHAIN_DIR)/lib/crt* $(1)/usr/lib/
	cp $(TOOLCHAIN_DIR)/lib/libc.so $(1)/usr/lib/
endef

$(eval $(call BuildPackage,gcc))
GeekLS
() автор топика
Ответ на: комментарий от GeekLS

а как ты определил что он не для MIPS?

anonymous
()
Ответ на: комментарий от GeekLS

Во-первых, плюсую вопрос анонимуса, а во-вторых, я предлагал немного не такое решение.

Ты говорил, что тебе нужно получить ipk. Я предлагал расковырять Makefile пакета, которые заведомо собирается в ipk и посмотреть, как там это реализовано. Возможно надо ковырять не пакет, а сам тулчейн, но сути это не меняет - главное понять, как сделать ipk.

А потом просто собираешь gcc с помощью имеющегося у тебя тулчейна, делаешь из него ipk и заливаешь на свой роутер. Это если я правильно понимаю твою задачу...

solovey ★★
()

а как ты определил что он не для MIPS?

DEPENDS:=@TARGET_x86 @NO_STRIP

Ты говорил, что тебе нужно получить ipk. Я предлагал расковырять Makefile пакета, которые заведомо собирается в ipk и посмотреть, как там это реализовано. Возможно надо ковырять не пакет, а сам тулчейн, но сути это не меняет - главное понять, как сделать ipk.

Смотрел и нихрена не понял что и куда совать.

GeekLS
() автор топика
Ответ на: комментарий от anonymous

он собирается на x86, но это не означает что он собирается для x86

Странно. Я всегда думал, что TARGET - это выходной целевой пакет

GeekLS
() автор топика
Ответ на: комментарий от anonymous

После этого руками перенесем нужный пакет из ~/openwrt/packages в ~/keenetic/package/build. После этого запустим make menuconfig и добавим пакет в сборку через меню.

Попробую и отпишусь. Вот от туда я и собирал aircrack-ng и vim. А вот gcc отказывался, мотивируя тем, что он не выбран, хотя при make menuconfig я его выбирал.

GeekLS
() автор топика
Ответ на: комментарий от GeekLS

Так это баг, похоже..

Еще нагуглилось вот это. Может, надо так же сделать?

P.S.: Да, и если ты будешь отвечать самому себе, то вряд ли кто-нибудь это увидит...

solovey ★★
()
Ответ на: комментарий от GeekLS

тот патч вообще для libtiff. Я просто предполагаю, что можно сделать нечто похожее... Поищи, где у тебя определяется _AC_ARG_VAR_PRECIOUS. Я бы начал с acinclude.m4, если верить твоим логам.

solovey ★★
()
Ответ на: комментарий от Artificial_Thought

Зачем тебе на роутер gcc? Ты же будешь им чо угоднов ечность собирать.

Пригодится... Просто ради эксперимента. Хочется научиться быть не просто Linux-пользователем и ничего сложнее, чем make && make install знать...

тот патч вообще для libtiff. Я просто предполагаю, что можно сделать нечто похожее... Поищи, где у тебя определяется _AC_ARG_VAR_PRECIOUS. Я бы начал с acinclude.m4, если верить твоим логам

Куда копать? У меня есть только Makefile, а acinclude.m4 - нет.

GeekLS
() автор топика
Ответ на: комментарий от GeekLS

Еще раз настоятельно рекомендую смотреть, кому ты отвечаешь :)

Куда копать? У меня есть только Makefile, а acinclude.m4 - нет.

Ты же скидывал на pastebin:

...
configure.ac:83: error: m4_copy: won't overwrite defined macro: _AC_ARG_VAR_PRECIOUS
acinclude.m4:48: GLIBCXX_CONFIGURE is expanded from...
configure.ac:83: the top level
...

Вот там и ищи. Или откуда этот файл взялся?

solovey ★★
()
11 января 2014 г.
Ответ на: комментарий от GeekLS

@TARGET_x86 таргет - это и есть целевая конфигурация архитектуры ЦПУ. Для мипс ахитектуры - @TARGET_mips

Плюс законный, хотя нубам можно было и простить. Все мы были нубами.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.