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

  • 相关阅读:
    angularjs的$on、$emit、$broadcast
    angularjs中的路由介绍详解 ui-route(转)
    ionic入门教程-ionic路由详解(state、route、resolve)(转)
    Cocos Creator 加载使用protobuf第三方库,因为加载顺序报错
    Cocos Creator 计时器错误 cc.Scheduler: Illegal target which doesn't have uuid or instanceId.
    Cocos Creator 构造函数传参警告 Can not instantiate CCClass 'Test' with arguments.
    Cocos Creator 对象池NodePool
    Cocos Creator 坐标系 (convertToWorldSpaceAR、convertToNodeSpaceAR)
    Cocos Creator 常驻节点addPersistRootNode
    Cocos Creator 配合Tiled地图的使用
  • 原文地址:https://www.cnblogs.com/issuelinux/p/4224328.html
Copyright © 2011-2022 走看看