* [gentoo-embedded] multi-project workflow @ 2012-01-22 23:37 Jason 2012-01-23 7:35 ` Sergey Mironov 2012-03-01 23:11 ` Bertrand Jacquin 0 siblings, 2 replies; 7+ messages in thread From: Jason @ 2012-01-22 23:37 UTC (permalink / raw To: gentoo-embedded All, I'm getting back into embedded projects and thus, gentoo/crossdev. Things have changed a bit since I last used it (~4 years ago). This: $ crossdev -S -t arm-none-linux-gnueabi worked out of the box. Awesome! It looks like I'll want to use arm-none-linux-gnueabi-emerge to build the target system, but before I get started, I have a question. How do folks out there handle multiple projects with the same toolchain? I'm thinking, since crossdev worked so well, to just build a 'arm-projectA-linux-gnueabi' and then 'arm-projectB-linux-gnueabi' to keep the roots separate. My other idea was use symlinks: /usr/ arm-none-linux-gnueabi/ -> projectA/ arm-none-linux-gnueabi.orig/ projectA/ projectB/ ... projectN/ with arm-none-linux-gnueabi.orig/ being the original contents after crossdev built the toolchain. As I create projects, I would 'cp -a arm....orig/* projectN/' What do you guys use? thx, Jason. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [gentoo-embedded] multi-project workflow 2012-01-22 23:37 [gentoo-embedded] multi-project workflow Jason @ 2012-01-23 7:35 ` Sergey Mironov 2012-01-23 16:52 ` Jason 2012-03-01 23:11 ` Bertrand Jacquin 1 sibling, 1 reply; 7+ messages in thread From: Sergey Mironov @ 2012-01-23 7:35 UTC (permalink / raw To: gentoo-embedded Hi. Model > /usr/ > arm-none-linux-gnueabi/ -> projectA/ > arm-none-linux-gnueabi.orig/ > projectA/ > projectB/ > ... > projectN/ > > with arm-none-linux-gnueabi.orig/ being the original contents after > crossdev built the toolchain. As I create projects, I would 'cp -a > arm....orig/* projectN/' > there is one drawback here - compiler version. Looks like gentoo stores libc files in /usr/lib/gcc/arm-projectA-linux-gnueabi/1.2.3 so it will probably break something if you use different gcc for your projects. > How do folks out there handle multiple projects with the same toolchain? > I'm thinking, since crossdev worked so well, to just build a > 'arm-projectA-linux-gnueabi' and then 'arm-projectB-linux-gnueabi' to > keep the roots separate. > What do you guys use? I use 'arm-projectA-linux-gnueabi' approach. It works, but still not ideal - For example, I can't just copy the whole folder to another gentoo machine and continue use emerge-projectA there. I would prefer toolchain to be in a single directory, like codesourcery does. Maybe there is another solution, does anybody know? Sergey ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [gentoo-embedded] multi-project workflow 2012-01-23 7:35 ` Sergey Mironov @ 2012-01-23 16:52 ` Jason 0 siblings, 0 replies; 7+ messages in thread From: Jason @ 2012-01-23 16:52 UTC (permalink / raw To: gentoo-embedded Hi Sergey, On Mon, Jan 23, 2012 at 11:35:46AM +0400, Sergey Mironov wrote: > Hi. Model > > > /usr/ > > arm-none-linux-gnueabi/ -> projectA/ > > arm-none-linux-gnueabi.orig/ > > projectA/ > > projectB/ > > ... > > projectN/ > > > > with arm-none-linux-gnueabi.orig/ being the original contents after > > crossdev built the toolchain. As I create projects, I would 'cp -a > > arm....orig/* projectN/' > > > > there is one drawback here - compiler version. Looks like gentoo > stores libc files in /usr/lib/gcc/arm-projectA-linux-gnueabi/1.2.3 > so it will probably break something if you use different gcc for your projects. Yes, I remember falling into that trap before, with libgcc.a, etc. The above layout assumed a single, static cross-compiler. Updates to the cross-compiler would then necessitate rebuilding all the projects. > > How do folks out there handle multiple projects with the same toolchain? > > I'm thinking, since crossdev worked so well, to just build a > > 'arm-projectA-linux-gnueabi' and then 'arm-projectB-linux-gnueabi' to > > keep the roots separate. > > What do you guys use? > > I use 'arm-projectA-linux-gnueabi' approach. It works, but still not > ideal - For example, I can't just copy the whole folder to another > gentoo machine and continue use emerge-projectA there. I don't anticipate much need to migrate /usr/cross-compiler to other machines. As long as I keep the ebuilds for the cross-compiler components, crossdev, and the packages, I should be able to rebuild any given project from scratch. I should probably set up a separate overlay per project to accomplish that. thx, Jason. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [gentoo-embedded] multi-project workflow 2012-01-22 23:37 [gentoo-embedded] multi-project workflow Jason 2012-01-23 7:35 ` Sergey Mironov @ 2012-03-01 23:11 ` Bertrand Jacquin 2012-03-05 22:03 ` Ed W 1 sibling, 1 reply; 7+ messages in thread From: Bertrand Jacquin @ 2012-03-01 23:11 UTC (permalink / raw To: gentoo-embedded [-- Attachment #1: Type: text/plain, Size: 5604 bytes --] Hi, This is a good question that I try to resolv for some times, and actually here is the solution I use. For my use, this is a bit more complex than one toolchain for multiple projects as I use different toolchains for one project, and have many projects. So I decline this in (what I call) PLATFORM and VARIANT that I call PLATFORM-VARIANT. PLATFORM is generally a hardware type and VARIANT the main project. For exemple I have : - PLATFORM=alix3-i586 VARIANT=maintenance that use i586-pc-linux-gnu- toolchain - PLATFORM=alix3-i586 VARIANT=firmware that use i586-pc-linux-uclibc- toolchain Toolchains are created with crossdev (without any patches or specific things). Then my bunch of scripts. This is a not really completed and some parts are hardcoded (aka ROOT=/data/cross). Once toolchains are made, I use variant-init that create : $ROOT/$PLATFORM/$VARIANT/etc $ROOT/$PLATFORM/$VARIANT/etc/make.profile -> /usr/portage/profiles/embedded $ROOT/etc/portage/make.conf-$PLATFORM-$VARIANT $PLATFORM-$VARIANT-emerge -> emerge-wrapper $PLATFORM-$VARIANT-q -> wrapper-q $PLATFORM-$VARIANT-etc-update -> wrapper-etc-update The ROOT for each project is /data/cross/$PLATFORM/$VARIANT $PLATFORM-$VARIANT-q and $PLATFORM-$VARIANT-etc-update are simple wrapper to q and etc-update that performs things in ROOT. All the portage configuration goes into $ROOT/etc to simplify things, let's talk later about how to have specific things for PLATFORM and VARIANT. $PLATFORM-$VARIANT-emerge (the symlink) is mostly a wrapper to emerge-wrapper from crossdev that export some variables : - PORTAGE_CONFIGROOT=/data/cross/$PLATFORM/$VARIANT - ROOT - SYSROOT - original CHOST and ELIBC This is also responsible to sync /data/cross/etc/portage to /data/cross/$PLATFORM/$VARIANT/etc/portage with some variances : All files in /data/cross/etc/portage that have leading name *-$PLATEFORM-$VARIANT are priorise, then *-$PLATEFORM So I get then following in my /data/cross/etc/portage : /data/cross/etc/portage/package.use/app-shells /data/cross/etc/portage/make.conf-alix3-i586-firmware /data/cross/etc/portage/make.conf-alix3-i586-maintenance /data/cross/etc/portage/make.conf-desktop-lemonhead /data/cross/etc/portage/make.conf-kvm32-firmware /data/cross/etc/portage/make.conf-kvm32-maintenance /data/cross/etc/portage/package.mask/sys-apps-alix3-i586-firmware /data/cross/etc/portage/package.mask/sys-apps-kvm32-firmware .. In this case, if I call alix3-i586-firmware-emerge then only /data/cross/etc/portage/make.conf-alix3-i586-firmware is move in /data/cross/alix3-i586/firmware/etc/portage/make.conf, all other are ignored This is to simplify portage configuration tree and avoid effort duplication. Then I have a specific make.conf that is sourced by all others for the same reason. Specific things are done in each VARIANT make.conf, generic in main one. Specific set CHOST, ARCH, E_MACHINE, ELIBC, USE and CFLAGS While generic have all the rest : - CBUILD - HOSTCC - FEATURES : collision-protect sandbox buildpkg noman noinfo nodoc -news -assume-digests fixlafiles - ROOT - SYSROOT - CFLAGS - CXXFLAGS - LDFLAGS - PKGDIR - PORTAGE_TMPDIR - PKG_CONFIG_PATH - PORTDIR - DISTDIR - EMERGE_DEFAULT_OPTS - MAKEOPTS - GENTOO_MIRRORS - FETCHCOMMAND - ... SYSROOT is always crossdev tree (for libtool and default gcc options). See #404529 While packages are build for ROOT with a SYSROOT different to ROOT, I use a specific bashrc that determin package SYSROOT dependencies and unpack .so .a and .h files to $SYSROOT (/usr/<toolchain>) as all my builded packages are FEATURES=buildpkg I keep trace of unpacked files and remove them from SYROOT at the end (with some exclusion (glibc, bintuils, linux-headers, gcc ...)). And another tool toolchain-clean that list unknown files in SYSROOT to keep things clean. It also fix .la files to use the SYSROOT as ROOT This bashrc also rsync $PORTAGE_CONFIGROOT/etc/portage/files to $D for generic configuration files or others things that are unrelated to generic gentoo utilisation. I added some features to sstrip files and/or upx them, you just have to declare do_upx or do_sstrip in env portage files. All the things I use are available in a tar tree here : http://people.meleeweb.net/~beber/gentoo/boest-gentoo.tgz Comments are welcome ! Beber D'ar lun 23 a viz Genver 2012 e 00 eur 37, « Jason » he deus skrivet : > All, > > I'm getting back into embedded projects and thus, gentoo/crossdev. > Things have changed a bit since I last used it (~4 years ago). This: > > $ crossdev -S -t arm-none-linux-gnueabi > > worked out of the box. Awesome! It looks like I'll want to use > arm-none-linux-gnueabi-emerge to build the target system, but before I > get started, I have a question. > > How do folks out there handle multiple projects with the same toolchain? > I'm thinking, since crossdev worked so well, to just build a > 'arm-projectA-linux-gnueabi' and then 'arm-projectB-linux-gnueabi' to > keep the roots separate. > > My other idea was use symlinks: > > /usr/ > arm-none-linux-gnueabi/ -> projectA/ > arm-none-linux-gnueabi.orig/ > projectA/ > projectB/ > ... > projectN/ > > with arm-none-linux-gnueabi.orig/ being the original contents after > crossdev built the toolchain. As I create projects, I would 'cp -a > arm....orig/* projectN/' > > What do you guys use? > > thx, > > Jason. > -- Beber [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [gentoo-embedded] multi-project workflow 2012-03-01 23:11 ` Bertrand Jacquin @ 2012-03-05 22:03 ` Ed W 2012-03-05 22:29 ` Bertrand Jacquin 0 siblings, 1 reply; 7+ messages in thread From: Ed W @ 2012-03-05 22:03 UTC (permalink / raw To: gentoo-embedded On 01/03/2012 23:11, Bertrand Jacquin wrote: > All the things I use are available in a tar tree here : > > http://people.meleeweb.net/~beber/gentoo/boest-gentoo.tgz > > Comments are welcome ! That's really very neat. My only observation is: have you considered trying portage profiles to further simplify things? They are basically cascadable and inherit from each other, so you can do some clever tricks to reduce duplication (I use it on our servers quite extensively) One of the things I haven't quite got under control is a simplified patching process for ebuilds to avoid creating many local ebuilds. I'm currently experimenting with using the /etc/portage/env type process via bashrc. I use an "autopatch" type idea, and also read in extra bashrc files per package. However, it's not very well integrated with my build tracking process (but it works quite nicely...) Good luck! Ed W ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [gentoo-embedded] multi-project workflow 2012-03-05 22:03 ` Ed W @ 2012-03-05 22:29 ` Bertrand Jacquin 2012-03-06 16:08 ` Ed W 0 siblings, 1 reply; 7+ messages in thread From: Bertrand Jacquin @ 2012-03-05 22:29 UTC (permalink / raw To: gentoo-embedded [-- Attachment #1: Type: text/plain, Size: 1577 bytes --] D'ar lun 05 a viz Meurzh 2012 e 23 eur 03, « Ed W » he deus skrivet : > On 01/03/2012 23:11, Bertrand Jacquin wrote: > > All the things I use are available in a tar tree here : > > > > http://people.meleeweb.net/~beber/gentoo/boest-gentoo.tgz > > > > Comments are welcome ! > > That's really very neat. My only observation is: have you considered > trying portage profiles to further simplify things? They are basically > cascadable and inherit from each other, so you can do some clever tricks > to reduce duplication (I use it on our servers quite extensively) This is a good idea yes. All the stuff is more a proof of concept for now but this is an interesting approach but I only have one build server but this evolve in some times. Using portage profile can be eas with own overlay. > One of the things I haven't quite got under control is a simplified > patching process for ebuilds to avoid creating many local ebuilds. I also have many patched ebuilds but I try to report them in gentoo bugzilla to keep things maintained and so people can benefit. > I'm > currently experimenting with using the /etc/portage/env type process via > bashrc. I use an "autopatch" type idea, and also read in extra bashrc > files per package. However, it's not very well integrated with my build > tracking process (but it works quite nicely...) Why not using epatch_user in a generic (profile or bashrc) post_src_prepare() ? function post_src_prepare() { function inherit() { : ; } . ${PORTDIR}/eclass/eutils } -- Beber [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [gentoo-embedded] multi-project workflow 2012-03-05 22:29 ` Bertrand Jacquin @ 2012-03-06 16:08 ` Ed W 0 siblings, 0 replies; 7+ messages in thread From: Ed W @ 2012-03-06 16:08 UTC (permalink / raw To: gentoo-embedded On 05/03/2012 22:29, Bertrand Jacquin wrote: > I also have many patched ebuilds but I try to report them in gentoo > bugzilla to keep things maintained and so people can benefit. Agreed - most such patches are usually more customisations of specific things to the environment, eg I change the dnsmasq default timeouts to better suit my environment. Also it can take a little while for changes to be accepted or whatever > Why not using epatch_user in a generic (profile or bashrc) post_src_prepare() ? > > function post_src_prepare() > { > function inherit() { : ; } > > . ${PORTDIR}/eclass/eutils > } > That seems neat - however, wouldn't you also need to wrap it to prevent it being applied twice by ebuilds which already run epatch_user? Actually, can you explain how inherit works in this context? I'm not sure I understand? Thanks Ed W ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-03-06 18:05 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-01-22 23:37 [gentoo-embedded] multi-project workflow Jason 2012-01-23 7:35 ` Sergey Mironov 2012-01-23 16:52 ` Jason 2012-03-01 23:11 ` Bertrand Jacquin 2012-03-05 22:03 ` Ed W 2012-03-05 22:29 ` Bertrand Jacquin 2012-03-06 16:08 ` Ed W
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox