The recommended order of operation for creating a SWC is:
1) Cross-compile the AS to JS
2) (Optional) Create a "JS" SWC. A "JS" SWC is needed so that APIs only available in the JS runtime are available to SWCs that depend on the SWC you are creating.
3) Compile the AS into a SWC and use include-files to include the cross-compiled JS output.
There doesn't appear to be a way to easily do the three steps from a single Flex Library project in Adobe Flash Builder, so we use two Flex Library projects instead.
The FlexJS framework uses Ant scripts to create the SWCs. For each SWC, like Core, there should be:
a) build.xml - the Ant script (in frameworks/projects/Core, and another one in frameworks/js/FlexJS/projects/Core)
b) (in frameworks/js/FlexJS/projects/Core) src/main/resources/compile-js-config.xml - Settings used to cross-compile AS to JS and also to create the "JS" SWC
c) (in frameworks/projects/Core) src/main/resources/compile-as-config.xml - Settings used to compile the AS to SWF byte code and package the cross-compiled JS output files into the SWC.
The Ant script performs the 3 steps of the order of operation, but also copies the JS files to frameworks/js/FlexJS/generated-sources. When an application is being compiled and JS files are finally need to be linked into the cross-compiled output, the FalconJX compiler looks there before it looks in the SWC for a JS file that matches an AS class. This allows developers to monkey-patch and quickly try changes to the JS without having to re-build the entire SWC.
When compiling in step 1 and 2, the COMPILE::SWF conditional compilation flag is set to false and COMPILE:JS is true. Only on the last step 3 is COMPILE::SWF set to true and COMPILE::JS set to false.