zoukankan      html  css  js  c++  java
  • openwrt拆离dl目录和toolchain的方法

    公司为了把openwrt的代码用svn集中管理,又避免每个人重复的下载dl,以及编译toolchain,因此需要所有人共用dl和toolchain。

    先总结一下方法:

    1. 修改rules.mk

    PREBUILT_DIR:=$(TOPDIR)/prebuilt/$(BOARD)
    ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
    GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION))
    LIBC:=$(call qstrip,$(CONFIG_LIBC))
    LIBCV:=$(call qstrip,$(CONFIG_LIBC_VERSION))
    REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
    GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux
    DIR_SUFFIX:=_$(LIBC)-$(LIBCV)$(if $(CONFIG_arm),_eabi)
    BUILD_DIR:=$(BUILD_DIR_BASE)/target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
    STAGING_DIR:=$(TOPDIR)/staging_dir/target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
    BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)
    #TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)
    TOOLCHAIN_DIR:=/opt/staging_dir/toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)#修改为你要存放公共toolchain的地方
    PACKAGE_DIR:=$(BIN_DIR)/packages
    else
    ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
    GNU_TARGET_NAME=$(call qstrip,$(CONFIG_TARGET_NAME))
    else
    GNU_TARGET_NAME=$(shell gcc -dumpmachine)
    endif
    REAL_GNU_TARGET_NAME=$(GNU_TARGET_NAME)
    BUILD_DIR:=$(BUILD_DIR_BASE)/target-$(GNU_TARGET_NAME)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
    STAGING_DIR:=$(TOPDIR)/staging_dir/target-$(GNU_TARGET_NAME)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
    BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(GNU_TARGET_NAME)
    #TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(GNU_TARGET_NAME)
    TOOLCHAIN_DIR:=/opt/staging_dir/toolchain-$(GNU_TARGET_NAME) #修改为你要存放公共toolchain的地方
    PACKAGE_DIR:=$(BIN_DIR)/packages
    endif
    STAMP_DIR:=$(BUILD_DIR)/stamp
    STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp

    2. 编译openwrt:

    #make V=s -j4

    这样就可以生成你的toolchain在opt/staging_dir下面

    3. 修改根目录下的Makefile

    #---------------------------------------------------------------------------------

    ifneq ($(OPENWRT_BUILD),1)
    # XXX: these three lines are normally defined by rules.mk
    # but we can't include that file in this context
    empty:=
    space:= $(empty) $(empty)
    _SINGLE=export MAKEFLAGS=$(space);

    override OPENWRT_BUILD=1
    export OPENWRT_BUILD
    GREP_OPTIONS=
    export GREP_OPTIONS
    include $(TOPDIR)/include/debug.mk
    include $(TOPDIR)/include/depends.mk
    include $(TOPDIR)/include/toplevel.mk
    else
    include rules.mk
    include $(INCLUDE_DIR)/depends.mk
    include $(INCLUDE_DIR)/subdir.mk
    include target/Makefile
    include package/Makefile
    include tools/Makefile
    # include toolchain/Makefile #这里为注释掉的地方

    $(toolchain/stamp-install): $(tools/stamp-install)
    $(target/stamp-compile): $(toolchain/stamp-install) $(tools/stamp-install) $(BUILD_DIR)/.prepared
    $(package/stamp-cleanup): $(target/stamp-compile)

    #----------------------------------------------------------------------------------------------

    prepare: .config $(tools/stamp-install) $(toolchain/stamp-install)

    #world: prepare $(target/stamp-compile) $(package/stamp-cleanup) $(package/stamp-compile) $(package/stamp-install) $(package/stamp-rootfs-prepare) $(target/stamp-instal
    l) FORCE 

    world: $(target/stamp-compile) $(package/stamp-cleanup) $(package/stamp-compile) $(package/stamp-install) $(package/stamp-rootfs-prepare) $(target/stamp-instal
    l) FORCE  #删除prepare

    #----------------------------------------------------------------------------------------------

    4.修改package/uclibc++/Makefile

    define Build/InstallDev
    $(INSTALL_DIR) $(2)/bin $(1)/usr/include/uClibc++ $(1)/usr/lib
    # $(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/
    $(CP) $(PKG_INSTALL_DIR)/include/* $(1)/usr/include/uClibc++/
    $(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++*.{a,so}* $(1)/usr/lib/
    # $(SED) 's|-I/include/|-I$(STAGING_DIR)/usr/include/uClibc++/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
    # $(SED) 's|-L/lib/|-L$(STAGING_DIR)/usr/lib/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
    # add another wrapper which links against both uClibc++ and libstdc++
    # $(INSTALL_BIN) $(TOOLCHAIN_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/g++-uc+std
    # $(SED) 's|^WRAPPER_INCLUDEDIR=.*||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
    # $(SED) 's|-luClibc++|-Wl,-Bdynamic,-luClibc++,-Bstatic,-lstdc++,-Bdynamic|g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
    # $(SED) 's|-nostdinc++||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
    endef

    注释掉上面几行

    5.提交整个工程的代码,大功告成。

    6.现在切换账号,checkout代码,再编译,OK

  • 相关阅读:
    Windows开启telnet服务 + 连接失败处理
    注册表比较工具
    wmic命令
    python netifaces模块
    【转】wireshark基本用法及过虑规则
    设置Intel网卡以抓取报文的vlan tag
    【转】 中兴OLT-C300常用命令
    Iris分类以及数组reshape想到的
    关于plot画图的原理
    Python的rand vs randn以及linspace
  • 原文地址:https://www.cnblogs.com/issuelinux/p/4224328.html
Copyright © 2011-2022 走看看