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

  • 相关阅读:
    Python NameError: name 'include' is not defined [closed]
    Python3 venv 创建虚拟环境
    python编程:从入门到实践读书笔记(一)
    kafka(2.2.1)(kerberos+LDAP+Sentry)访问使用
    实现Base64解码和命令分发器
    装饰器器应用及用途
    __slots__和运算符重载中的反向方法
    python插件化开发
    python分发包管理
    SocketServer模块
  • 原文地址:https://www.cnblogs.com/issuelinux/p/4224328.html
Copyright © 2011-2022 走看看