Code Monkey home page Code Monkey logo

Comments (16)

jenia81 avatar jenia81 commented on August 14, 2024 1

We are now integrating Provisioning into Morpheus and I can tell you that indeed that the coupling of mbed-cli to SCM is a problem, from user perspective.
What I wanted to do is to import mbed os and run mbed compile with my sources as input.
I can't do that without use mbed new or git new
I think that the user should be able to import mbed os and compile his sources without the need to add his source code to the SCM

from mbed-cli.

thegecko avatar thegecko commented on August 14, 2024

Thanks @0xc0170 . I investigated further and also found that export and publish require these directories. I figured I could create a PR to ask the user to supply an SCM type prior to exporting or publishing which would fix this and #106 , but there is another reason the SCM is required initially; ignores!

Whenever an external library is added to the source, it's path is explicitly added to the ignores of the SCM, so the SCM type is also needed prior to any add.

A way to fix this is to consider flattening the .lib dependencies to exist in a single folder in the root, similar to yotta_modules. This would give us a single folder to add to the ignores[], removing the need to specify SCM up front. As an added benefit, it also means there is a single point to manage external dependencies from as well (I'm thinking integration in visual IDEs).

@mjs-arm @bogdanm @sg-

from mbed-cli.

thegecko avatar thegecko commented on August 14, 2024

Changing labels as I think the question is answered, but the separation of concerns is a bug.

from mbed-cli.

sg- avatar sg- commented on August 14, 2024

@thegecko I like the sound of that!. Wondering how it might affect nested dependencies and if its even possible while trying to maintain backwards compatibility?

edit I read the above comment as .lib files at the top level still using nested repos. Nested and flattened deps both have inherit problems. Flattened means inclusion visibility in the context of a system is only human readable with a tool but you could catch and try to resolve duplicate dependencies. Nested means duplicate nested dependencies cause problems again either a tool fixes or use fixes. Either way, nested is more nautual on disc IMO.

from mbed-cli.

screamerbg avatar screamerbg commented on August 14, 2024

@thegecko flattening the nested dependencies poses significant impact to the dependency handling between a library and it's sub-libraries, the integration between them, reproducibility and also workflows. To visualize this:

program
 |- libA
 `- libB
     `- libC

Flattening the above means that there is no guarantee that libB integrates with libC (and vice-versa) because the top program might reference libC at at a different revision that has never been tested/integrated with libB.

The nested dependency mechanism is to ensure that as long as every library integrates directly with it's child libraries (and child libraries with their child libraries..), there is confidence in the integration of
the whole dependency tree.

Additionally, there is 1:1 mapping between the code tree as file layout on disk and the dependency tree, which is a great plus because there is no confusion between the two.

And last but not least, flattening also breaks backward compatibility with mbed Classic where all the 38000 repositories have nested dependencies, not flattened, which means that each repository takes care of it's own dependencies.

from mbed-cli.

thegecko avatar thegecko commented on August 14, 2024

@screamerbg , I think you misunderstand my suggestion.

mbed-os actually looks like this:

program
 |-mbed-os
    |-folderA
        |-folderB
            |-libA (via repo)
        |-folderC
            |-libB (via repo)
                |-folderD
                    |-libC (via repo)

And I'm recommending something like:

program
 |-mbed-os
    |-libraries
        |-libA (via repo)
        |-libB (via repo)
            |-libraries
                |-libC (via repo)
            |-folderD
    |-folderA
        |-folderB
        |-folderC

Which keeps the dependencies tracked by each repository, but in a single root (/libraries or similar) which can be added to the default ignores[]. It also means dependencies for each repository are managed in one place.

from mbed-cli.

screamerbg avatar screamerbg commented on August 14, 2024

@thegecko Currently mbed CLI (neo) handles ignores very well regardless of the layout of the libraries. Also it doesn't overwrite/modify the user ignores. Just run "mbed sync" and it would take care of all sub-repo ignores.

Regarding the layout, it's unclear from the schematic above where do repos and library references (.lib) live. All in "/libraries" or separately? Also do you mean that my top app "mbed-example-app" would have folder "/libraries" with mbed-os inside instead of being in the root?

To understand your proposal better, can you translate the current (slightly stripped) mbed-os based application layout below:

mbed-example-app (repo)
|- mbed-os (repo)
|  |
|  |- core (folder)
|  |  |- mbed-rtos (folder)
|  |  |- mbedtls.lib (ref)
|  |  |- mbedtls (repo)
|  |  |- uvisor-mbed-lib (repo)
|  |  `- uvisor-mbed-lib.lib (ref)
|  |
|  |- frameworks (folder)
|  |  |- greentea-client (repo)
|  |  |- greentea-client.lib (ref)
|  |  |- unity (repo)
|  |  |- unity.lib (ref)
|  |  `- utest (folder)
|  |
|  |- net (folder)
|  |  |- coap-service (repo)
|  |  |- coap-service.lib (ref)
|  |  |- LWIPInterface (folder)
|  |  |- mbed-client (repo)
|  |  |- mbed-client.lib (ref)
|  |  |- mbed-client-c (repo)
|  |  |- mbed-client-c.lib (ref)
|  |  |- mbed-client-classic (repo)
|  |  |- mbed-client-classic.lib (ref)
|  |  |- mbed-client-mbedtls (repo)
|  |  |- mbed-client-mbedtls.lib (ref)
|  |  |- mbed-mesh-api (repo)
|  |  |- mbed-mesh-api.lib (ref)
|  |  |- mbed-trace (repo)
|  |  |- mbed-trace.lib (ref)
|  |  |- nanostack-hal-mbed-cmsis-rtos (repo)
|  |  |- nanostack-hal-mbed-cmsis-rtos.lib (ref)
|  |  |- nanostack-libservice (repo)
|  |  |- nanostack-libservice.lib (ref)
|  |  |- NetworkSocketAPI (folder)
|  |  |- sal-iface-6lowpan-morpheus-private (repo)
|  |  |- sal-iface-6lowpan-morpheus-private.lib (ref)
|  |  |- sal-stack-nanostack-private (repo)
|  |  `- sal-stack-nanostack-private.lib (ref)
|  |
|  `- tools (to become repo)
|
|- mbed-os.lib (ref)
|
`- main.cpp

from mbed-cli.

thegecko avatar thegecko commented on August 14, 2024

screamerbg removed the bug label an hour ago

I still believe requiring SCM is a bug.

Currently mbed CLI (neo) handles ignores very well regardless of the layout of the libraries

This needs to be mimicked in other IDEs and isn't trivial. For this to work, you need to add to an ignore file as you go, hence the need to have SCM up front. A single root of libraries makes adding /libraries to an ignore file during export/publish trivial.

All in "/libraries" or separately?

The .lib files and subsequent repos would live in /libraries

do you mean that my top app "mbed-example-app" would have folder "/libraries" with mbed-os inside instead of being in the root?

Yes

can you translate the current (slightly stripped) mbed-os based application

Sure, something like:

mbed-example-app (repo)
|
|-libraries
|  |
|  |- mbed-os (repo)
|  |  |
|  |  |-libraries
|  |  |  |
|  |  |  |- mbedtls.lib (ref)
|  |  |  |- mbedtls (repo)
|  |  |  |- greentea-client (repo)
|  |  |  |- greentea-client.lib (ref)
|  |  |  |- unity (repo)
|  |  |  |- unity.lib (ref)
|  |  |  |- mbed-client (repo)
|  |  |  |- mbed-client.lib (ref)
|  |  |  |- mbed-client-c (repo)
|  |  |  |- mbed-client-c.lib (ref)
|  |  |  |- mbed-client-classic (repo)
|  |  |  |- mbed-client-classic.lib (ref)
|  |  |  |- mbed-client-mbedtls (repo)
|  |  |  |- mbed-client-mbedtls.lib (ref)
|  |  |  |- mbed-mesh-api (repo)
|  |  |  |- mbed-mesh-api.lib (ref)
|  |  |  |- mbed-trace (repo)
|  |  |  |- mbed-trace.lib (ref)
|  |  |  |- nanostack-hal-mbed-cmsis-rtos (repo)
|  |  |  |- nanostack-hal-mbed-cmsis-rtos.lib (ref)
|  |  |  |- nanostack-libservice (repo)
|  |  |  |- nanostack-libservice.lib (ref)
|  |  |  |- sal-iface-6lowpan-morpheus-private (repo)
|  |  |  |- sal-iface-6lowpan-morpheus-private.lib (ref)
|  |  |  |- sal-stack-nanostack-private (repo)
|  |  |  |- sal-stack-nanostack-private.lib (ref)
|  |  |  |- uvisor-mbed-lib (repo)
|  |  |  |- coap-service (repo)
|  |  |  |- coap-service.lib (ref)
|  |  |  `- uvisor-mbed-lib.lib (ref)
|  |  |
|  |  |- core (folder)
|  |  |  `- mbed-rtos (folder)
|  |  |
|  |  |- frameworks (folder)
|  |  |  `- utest (folder)
|  |  |
|  |  `- net (folder)
|  |     |- LWIPInterface (folder)
|  |     `- NetworkSocketAPI (folder)
|  |
|  `- mbed-os.lib (ref)
|
|- tools (to become repo)
|
`- main.cpp

And the .lib files in each libraries folder could also be merged into a single file.

from mbed-cli.

thegecko avatar thegecko commented on August 14, 2024

This discussion has gone quiet for 2 weeks.There could be an easier interim solution which at least removes the reliance of SCM up front.

Assuming SCM is required only to record whether a library folder is ignored, why not determine this prior to any publish or export by adding the SCM switch to the publish or export function?

The folders to be ignored could then be determined by:

  • Walking the tree and adding folders containing .lib files

-or-

  • Record the ignores in a .gitignore file (the default SCM) as it currently does and translate it into the hg equivalent during the export / publish if required.

from mbed-cli.

screamerbg avatar screamerbg commented on August 14, 2024

@jenia81 There is a fix for this in the latest PR which allows you to compile and expert source code without the root being SCM. Can you try it before its merged? PR #147

from mbed-cli.

jenia81 avatar jenia81 commented on August 14, 2024

I tested, it works!

from mbed-cli.

jenia81 avatar jenia81 commented on August 14, 2024

When is this going to be merged with mbed-cli?

from mbed-cli.

jenia81 avatar jenia81 commented on August 14, 2024

@screamerbg
We have another issue that is related to the coupling of mbed-cli with source control.
#159
Are those issues related?
The issue still appears with your branch

from mbed-cli.

screamerbg avatar screamerbg commented on August 14, 2024

Can you please try with the latest version 0.5.0?

from mbed-cli.

jenia81 avatar jenia81 commented on August 14, 2024

@screamerbg We'll try tomorrow.
What's is this PR should fix? The git inside git issue?

from mbed-cli.

screamerbg avatar screamerbg commented on August 14, 2024

@jenia81 Yes

from mbed-cli.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.