Hello,
I'm looking for input/suggestions about something I've been working on that is related to asdf-bundle.
I'm trying to come up with a good solution to do cross-compiling of ASDF packages using ECL. For example I want to be able to create a bundle for a system that looks like this:
(asdf:defsystem openglsample :components ((:file "package") #+cross (:file "shader-vao" :depends-on ("package"))) :depends-on (#+iphone iphone #+android android #+android cl+j #+(or android iphone) cl-opengl))
Using this system definition, I'd like to be able to create monolithic bundles libopenglsample_iphone.a and libopenglsample_android.a with the constraint that the android version will include the "android" and cl+j systems and the iPhone version will contain the "iphone" system.
I tried adding new operations to asdf "cross-compile-op" "cross-lib-op" see here: https://github.com/ageneau/ecl-android/tree/master/lisp-packages/asdf-cross. This mostly works but the handling of the different *features* for each target is a bit of a mess since the host and the target can have different system definitions.
Also because of side-effects, cross-compiling of a particular source file might depend on the host having loaded some dependencies first except the host will load this dependency with *features* that might be different than the target.
I'm wondering would this be better suited for xcvb? In particular can xcvb cross-compile a system without the host doing the cross-compilation having to load the system definition for the system it is compiling?
Regards, Sylvain
On Wed, Nov 28, 2012 at 9:06 AM, Sylvain Ageneau ageneau@gmail.com wrote:
Hello, I'm looking for input/suggestions about something I've been working on that is related to asdf-bundle.
I'm trying to come up with a good solution to do cross-compiling of ASDF packages using ECL. For example I want to be able to create a bundle for a system that looks like this:
(asdf:defsystem openglsample :components ((:file "package") #+cross (:file "shader-vao" :depends-on ("package"))) :depends-on (#+iphone iphone #+android android #+android cl+j #+(or android iphone) cl-opengl))
Using this system definition, I'd like to be able to create monolithic bundles libopenglsample_iphone.a and libopenglsample_android.a with the constraint that the android version will include the "android" and cl+j systems and the iPhone version will contain the "iphone" system.
I tried adding new operations to asdf "cross-compile-op" "cross-lib-op" see here: https://github.com/ageneau/ecl-android/tree/master/lisp-packages/asdf-cross. This mostly works but the handling of the different *features* for each target is a bit of a mess since the host and the target can have different system definitions.
Also because of side-effects, cross-compiling of a particular source file might depend on the host having loaded some dependencies first except the host will load this dependency with *features* that might be different than the target.
For cross-compiling using ASDF, you might want to have separate features #+target-iphone and #+target-android separate from the host features.
I'm wondering would this be better suited for xcvb? In particular can xcvb cross-compile a system without the host doing the cross-compilation having to load the system definition for the system it is compiling?
XCVB indeed completely distinguishes features on the host and target system, and allows you to define or undefine features with -D and -U.
I don't remember writing a bundling output for ECL on XCVB, but that could most definitely be done. Contact me personally or post on the xcvb-devel list if you're interested.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Life is like an onion: you peel off layer after layer, then you find there is nothing in it.