[Buildroot] [PATCH 1/1] i2c-tools: add support to build python extension

Ryan Barnett ryanbarnett3 at gmail.com
Sun Apr 5 19:15:01 UTC 2015


Thomas,

On Sun, Apr 5, 2015 at 2:00 PM, Thomas Petazzoni
<thomas.petazzoni at free-electrons.com> wrote:
> Dear Ryan Barnett,
>
> On Sun,  5 Apr 2015 13:47:55 -0500, Ryan Barnett wrote:
>> Add a config option to build the python bindings for i2c-tools -
>> py-smbus. The steps for building the python bindings is the same as
>> the distutil steps that are a part of the python infrastructure.
>
> Yeah, it's a bit sad that we can't re-use the Python package
> infrastructure is.
>
> I think we discussed this during the Buildroot Developers Meeting,
> though I can't find any reference to this. Cc'ing Arnout.
>
> So essentially, we have two choices:
>
>  * Have separate packages for the C/C++ library and the Python
>    bindings. Like is done today for protobuf + python-protobuf. One
>    problem is how to share the VERSION / SITE / SOURCE variables. The
>    other problem is that people don't necessarily notice when bumping a
>    package version. But the plus side is that we can re-use the python
>    package infrastructure.
>
>  * Use one single package. Makes it trivial to share VERSION / SITE /
>    SOURCE, no possible omission when bumping. But the down-side is that
>    we cannot re-use the python package infra.
>
> Maybe we should take the second approach, but adjust a bit the python
> package infra to make it easier for packages not using the infra to use
> some of its variables?

I too prefer the second approach. I don't have any ideas though on how
to make it easier to take advantage of the python package infra
though. Using the variables from the pkg-python.mk will simplify
things a bit.

>> diff --git a/package/i2c-tools/i2c-tools.mk b/package/i2c-tools/i2c-tools.mk
>> index 0115e22..f363505 100644
>> --- a/package/i2c-tools/i2c-tools.mk
>> +++ b/package/i2c-tools/i2c-tools.mk
>> @@ -21,4 +21,37 @@ define I2C_TOOLS_INSTALL_TARGET_CMDS
>>       done
>>  endef
>>
>> +# BASE_ENV taken from PKG_PYTHON_DISTUTILS_ENV in package/pkg-python.mk
>> +I2C_TOOLS_PYTHON_BASE_ENV = PATH=$(BR_PATH) \
>> +     CC="$(TARGET_CC)" \
>> +     CFLAGS="$(TARGET_CFLAGS) -I../include" \
>> +     LDFLAGS="$(TARGET_LDFLAGS)" \
>> +     LDSHARED="$(TARGET_CROSS)gcc -shared" \
>> +     PYTHONPATH="$(if $(BR2_PACKAGE_PYTHON3),$(PYTHON3_PATH),$(PYTHON_PATH))" \
>> +     _python_sysroot=$(STAGING_DIR) \
>> +     _python_prefix=/usr \
>> +     _python_exec_prefix=/usr
>
> What about:
>
> I2C_TOOLS_PYTHON_BASE_ENV = \
>         $(PKG_PYTHON_DISTUTILS_ENV) \
>         CFLAGS="$(TARGET_CFLAGS) -I../include"
>
> this way we re-use a part of the Python package infra.

Agreed. Will the second definition override the definition from
PKG_PYTHON_DISTUTILS_ENV?

>
>> +# Build/install steps mirror the distutil python package type in the python package
>> +# infrastructure
>> +ifeq ($(BR2_PACKAGE_I2C_TOOLS_PYSMBUS),y)
>> +I2C_TOOLS_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON3),host-python3 python3,host-python python)
>
> I know we're doing that in pkg-python.mk, but I'm not sure why. I
> believe something like:
>
> I2C_TOOLS_DEPENDENCIES += $(if $(BR2_PACKAGE_PYTHON3),python3,python)
>
> is sufficient, since pythonX depends on host-pythonX.

Agree will simplify. Should I sent a second patch to do this too in
pkg-python.mk?

>> +define I2C_TOOLS_BUILD_PYSMBUS
>> +     (cd $(@D)/py-smbus;  \
>> +     $(I2C_TOOLS_PYTHON_BASE_ENV) \
>> +             $(HOST_DIR)/usr/bin/python setup.py build \
>> +             --executable=/usr/bin/python)
>
> Maybe use PKG_PYTHON_DISTUTILS_BUILD_OPTS

Agree.

>> +endef
>> +I2C_TOOLS_POST_BUILD_HOOKS += I2C_TOOLS_BUILD_PYSMBUS
>> +
>> +define I2C_TOOLS_INSTALL_PYSMBUS
>> +     (cd $(@D)/py-smbus; \
>> +     $(I2C_TOOLS_PYTHON_BASE_ENV) \
>> +             $(HOST_DIR)/usr/bin/python setup.py install \
>> +             --prefix=$(TARGET_DIR)/usr )
>
> And PKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS

Agree.

Will be sending a v2 here shortly.

Thanks,
-Ryan



More information about the buildroot mailing list