【问题标题】:Makefile for iotivity compilation under buildrootbuildroot 下 iotivity 编译的 Makefile
【发布时间】:2017-12-29 17:22:02
【问题描述】:

我已经使用 buildroot 完成了一个特定的项目。我想让我的目标充当 ioTivity 网关,因此尝试将 ioTivity-1.1.1 添加为 buildroot/package。似乎官方对 iotivity 构建的支持仅在 Yocto 下,而不在 buildroot 下。我为 buildroot 创建了自己的 iotivity.mk 文件,如下所示:

IOTIVITY_VERSION_MAJOR = 1.1
IOTIVITY_VERSION = $(IOTIVITY_VERSION_MAJOR).1
IOTIVITY_RELEASE = 1
IOTIVITY_SOURCE = iotivity-${IOTIVITY_VERSION}.tar.gz
IOTIVITY_SITE = http://mirrors.kernel.org/iotivity/${IOTIVITY_VERSION}

IOTIVITY_LICENSE = Apache-2.0
IOTIVITY_LICENSE_FILES = LICENSE.md

IOTIVITY_DEPENDENCIES += scons boost sqlite mbedtls gtest cjson tinycbor libcurl host-pkgconf snappy openssl libcoap

IOTIVITY_CONF_OPTS += --enable-uuid
IOTIVITY_CONF_OPTS += --enable-curl

IOTIVITY_CXXFLAGS = CXXFLAGS = "$(TARGET_CXXFLAGS) -std=c++11 -fPIC"
IOTIVITY_CONF_ENV += CXXFLAGS = "$(TARGET_CXXFLAGS) -std=c++11"

IOTIVITY_CONF_OPTS += --with-curl
IOTIVITY_CONF_OPTS += --with-pthread
IOTIVITY_CONF_OPTS += --with-sqlite3

IOTIVITY_CONF_OPTS += LIBS=-lstdc++
IOTIVITY_LDFLAGS = "$(TARGET_LDFLAGS) -lpthread"
IOTIVITY_LDFLAGS = "$(TARGET_LDFLAGS) -lrt"
IOTIVITY_CONF_ENV = "LIBS = -lrt"

IOTIVITY_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -pthread" LIBS="-pthread"

EXTRA_CXXFLAGS += -std=gnu++11

IOTIVITY_INSTALL_STAGING = YES

SCONS_OPTIONS += \
TARGET_OS=linux \
TARGET_TRANSPORT=ALL \
TARGET_ARCH=arm64 \
STAGING_DIR=$(STAGING_DIR) \
WITH_ENV=True \
BUILD_SAMPLE=ON \
RD_MODE=CLIENT \
RELEASE=True \
SECURED=1 \
LOGGING=True \
VERBOSE=True

TARGET_CONFIGURE_OPTS = $(SCONS_OPTIONS)

IOTIVITY_MAKE_OPTS = $(TARGET_CONFIGURE_OPTS)

define IOTIVITY_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(IOTIVITY_MAKE_OPTS) -C $(@D)
endef

define IOTIVITY_INSTALL_STAGING_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(IOTIVITY_MAKE_OPTS) -C $(@D) \
DESTDIR=$(STAGING_DIR) prefix=/usr install
endef

define IOTIVITY_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(IOTIVITY_MAKE_OPTS) -C $(@D) \
DESTDIR=$(TARGET_DIR) prefix=/usr install
endef

$(eval $(generic-package))

经过 2 天的处理,这是我目前遇到的错误:

build/iotivity-1.1.1/out/linux/x86_64/debug/resource/csdk/connectivity/src/bt_le_adapter/linux/bluez-glue.c']

TypeError: argument of type 'NoneType' is not iterable:

File "build/iotivity-1.1.1/SConstruct", line 57: SConscript(build_dir + 'resource/SConscript')

File "/usr/local/lib/scons-2.5.0/SCons/Script/SConscript.py", line 604: return method(*args, **kw)

File "/usr/local/lib/scons-2.5.0/SCons/Script/SConscript.py", line 541: return _SConscript(self.fs, *files, **subst_kw)

File "/usr/local/lib/scons-2.5.0/SCons/Script/SConscript.py", line 250: exec _file_ in call_stack[-1].globals

File "build/iotivity-1.1.1/resource/SConscript", line 40:
SConscript('csdk/SConscript')

File "/usr/local/lib/scons-2.5.0/SCons/Script/SConscript.py", line 604: return method(*args, **kw)

File "/usr/local/lib/scons-2.5.0/SCons/Script/SConscript.py", line 541: return _SConscript(self.fs, *files, **subst_kw)

File "/usr/local/lib/scons-2.5.0/SCons/Script/SConscript.py", line 250: exec _file_ in call_stack[-1].globals

File "build/iotivity-1.1.1/resource/csdk/SConscript", line 39:
if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:

*********** Unit test Stop *************

【问题讨论】:

    标签: makefile buildroot iotivity


    【解决方案1】:

    首先,使用这么旧版本的 IoTivity 可能不是一个好主意。其次,我很难理解您在尝试什么:“OCF 或 buildroot 都没有在 buildroot 下为 iotivity 构建提供官方支持” - 目标是什么,您正在尝试什么命令?

    googletest 构建失败,但没有足够的信息来查看真正出了什么问题。自 1.1 以来,驱动 googletest 构建的 iotivity scons 脚本有了很大改进。

    【讨论】:

    • 我想让我的目标充当 ioTivity 网关,因此尝试将 ioTivity-1.1.1 添加为 buildroot/package。 (一些具体的原因让我知道它是旧版本而选择了iotivity-1.1.1版本)
    • 我确实尝试使用两种方法构建 ioTivity-1.1.1:1. buildroot 2. 通过 aarch64-linux-gnu-cpp 进行交叉编译 使用以下选项进行交叉编译:iotivity-1.1- rel$ scons TARGET_OS=linux TARGET_ARCH=aarch64 TARGET_TRANSPORT=ALL WITH_ENV=True BUILD_JAVA=False BUILD_SAMPLE=ON SECURED=1 SIMULATOR=False VERBOSE=True RD_MODE=SERVER TC_PREFIX=/usr/bin/aarch64-linux-gnu-cpp install scons:正在读取 SConscript 文件 ... scons:*** 选项 TARGET_ARCH 的值无效:aarch64。有效值为:['x86', 'x86_64', 'arm', 'arm-v7a', 'armeabi-v7a', 'arm64']
    • >> 我可以通过 buildroot 安装以下依赖项:>> scons、boost、sqlite、mbedtls、gtest、cjson、tinycbor、libcurl、openssl、libcoap >> 但是出现错误循环构建iotivity包>>根据我的观察,ioTivity包的基本架构如下:>> TARGET_OS = linux: only options: linux, android, arduino, yocto, tizen >> TARGET_ARCH = aarch64: Only if the TARGET_OS = yocto > > TARGET_ARCH = arm64: 如果 TARGET_OS = linux >> ** 我的目标是基于 aarch64 的 linux **
    • 我怀疑这会失败。我在当前(1.3/master)上的交叉构建实验很快就失败了——像 boost、googletest 这样的依赖检查没有设置为交叉构建,except 在为 Android 构建的非常具体的情况下,它使用为此设置的 Android 工具链(sdk、ndk)。 Yocto 版本也已经过调试。注意:TC_PREFIX 应该只是名称前缀,如 'arm-none-eabi-',使用 TC_PATH 作为工具链的路径。
    • 我将尝试使用您给出的注释。我会发布相应的结果。感谢您的支持。附言:- 我也给 buildroot@busybox.net 发了一封邮件,得到了一些回复:>> 要为 iotivity 添加一个新的 Buildroot 包,你可以以 package/mongodb/mongodb.mk 为例,因为这个包也使用缺点。我也要试试这个并在这里发帖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    相关资源
    最近更新 更多