This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Greetings toolchain fans, I want to let you know about a toolchain builder that I've been working on for some time that has finally reached a level where it might be useful to embedded developers. You can get it here: http://crossplex.org I started writing Crossplex because I wanted the functionality of crosstool and buildroot in the form of make macros that I could embed in existing makefiles. Since I work on many different architectures and those architectures share many of the same sources, I wanted a system that would separate the process of building from the data of configuration, and I wanted to do so in such a way that parallel make could take full advantage of the dependency graph. For example, let's say I have an application "hello-world" that will get delivered four differnt ways: two different software configurations ("release" and "devel") on two different hardware architectures ("x86" and "mipsel"). The Crossplex macros allow me to completely specify all of these configurations in a SINGLE makefile using make macros that look something like this: ######################################################## # -*- makefile -*- # Toolchain versions DAVES_TOOLCHAIN_VERSIONS := binutils-2.20 DAVES_TOOLCHAIN_VERSIONS += gcc-4.2.0 DAVES_TOOLCHAIN_VERSIONS += glibc-2.5 DAVES_TOOLCHAIN_VERSIONS += linux-2.6.28.7 DAVES_TOOLCHAIN_VERSIONS += gdb-6.8 # Specify the mipsel toolchain $(eval $(call Glibc_Toolchain,/build_top,mipsel-glibc,mipsel-lt-linux-gnu,\ $(DAVES_TOOLCHAIN_VERSIONS),PATH,THREAD=linuxthreads,davixtc)) # Specify the x86 toolchain $(eval $(call Glibc_Toolchain,/build_top,x86-glibc,i686-nptl-linux-gnu,\ $(DAVES_TOOLCHAIN_VERSIONS),PATH,THREAD=nptl,davixtc)) # Specify the root filesystem for each product. # The toolchain is associated with the filesystem. $(eval $(call Configure_TargetFS,mymips/rel,/build_top,x86-glibc/toolchain PATH) $(call Configure_TargetFS,mymips/dev,/build_top,x86-glibc/toolchain PATH) $(call Configure_TargetFS,myx86/rel,/build_top,mipsel-glibc/toolchain PATH) $(call Configure_TargetFS,myx86/dev,/build_top,mipsel-glibc/toolchain PATH) ) # Specify the installation of some text files like /init /etc/passwd # and /etc/network/interfaces. They're found in subdirs of fs-template/ $(eval $(call TargetFS_Template,mymips/rel,$(shell pwd)/fs-template/mipsbase) $(call TargetFS_Template,mymips/dev,$(shell pwd)/fs-template/mipsbase) $(call TargetFS_Template,mymips/dev,$(shell pwd)/fs-template/mipsdev) $(call TargetFS_Template,myx86/rel,$(shell pwd)/fs-template/x86base) $(call TargetFS_Template,myx86/dev,$(shell pwd)/fs-template/x86base) $(call TargetFS_Template,myx86/dev,$(shell pwd)/fs-template/x86dev) ) # Install busybox with a "basic" profile on each target # Each will get built with the toolchain appropriate to the install target # If intermediate build files share the same configuration and toolchain, # they will only be built once $(eval $(call TargetFS_Install_Make,mymips/rel,busybox-1.4.0,REL,BASIC SH) $(call TargetFS_Install_Make,mymips/dev,busybox-1.4.0,REL,BASIC SH) $(call TargetFS_Install_Make,myx86/rel,busybox-1.4.0,REL,BASIC SH) $(call TargetFS_Install_Make,myx86/dev,busybox-1.4.0,REL,BASIC SH) ) # Specify the build and installation of the in-house program # "hello-world" from the directory "hellodir". $(eval $(call TargetFS_Install_Local_Program,mymips/rel,hellodir,hello-world) $(call TargetFS_Install_Local_Program,mymips/dev,hellodir,hello-world) $(call TargetFS_Install_Local_Program,mymips/rel,hellodir,hello-world) $(call TargetFS_Install_Local_Program,mymips/dev,hellodir,hello-world) ) # Specify a kernel for each product THIS_LINUX := linux-2.6.28.7 $(eval $(call Build_Linux_Kernel,mymips/linux,$(THIS_LINUX),/build_top,,,\ mipsel-glibc/toolchain PATH) $(call Build_Linux_Kernel,mymips/linux-dev,$(THIS_LINUX),/build_top,,,\ mipsel-glibc/toolchain PATH) $(call Build_Linux_Kernel,myx86/linux,$(THIS_LINUX),/build_top,,,\ x86-glibc/toolchain PATH) $(call Build_Linux_Kernel,myx86/linux-dev,$(THIS_LINUX),/build_top,,,\ x86-glibc/toolchain PATH) ) ######################################################## Then everything can be built and installed with a single "make -j10". Crossplex defines variables containing all the installed software paths so that you can specify individual targets and use those targets as dependencies for other actions in the file, such as archiving, serving via NFS, or kitting up for delivery. Crossplex has a lot of power that I haven't even touched on in this email, but it also has a long way to grow before it is compatible with every architecture or set of library, kernel, and appliacation versions. I have some rudmentary documentation in place on the website, and I'm working on improving that documentation. I'm hoping to get some developers to try it out in its current state, and find out what people like and what they think needs improvement. Dave -- For unsubscribe information see http://sourceware.org/lists.html#faq
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |