98 lines
4.9 KiB
Markdown
98 lines
4.9 KiB
Markdown
|
The Haxe Target
|
||
|
---------------
|
||
|
|
||
|
When compiling from haxe, via hxcpp, a "Build.xml" file is generated in the output directory. The file lists the generated files and dependencies and ultimately includes the "toolchain/haxe-target.xml" file, which describes how to combine these files.
|
||
|
|
||
|
### Include Order
|
||
|
There are a few complications when setting the order in which things are configured, since a particular build might want to:
|
||
|
- set the compiler
|
||
|
- override some compiler settings
|
||
|
- make decisions based on the compiler or settings
|
||
|
- set or use standard file prefixes/suffixes
|
||
|
|
||
|
### Example Sequence
|
||
|
You can see which files are included by setting the HXCPP_VERBOSE define when compiling. One example is for a hypothetical user 'Hugh' on a windows platform:
|
||
|
|
||
|
```
|
||
|
Using makefile: Build.xml
|
||
|
No specified toolchain
|
||
|
- Parsing include: C:/Users/Hugh/dev/hxcpp/toolchain/setup.xml
|
||
|
- Parsing include: C:\Users\Hugh\.hxcpp_config.xml (section "vars")
|
||
|
Using Windows compiler: MSVC
|
||
|
- Parsing include: C:/Users/Hugh/dev/hxcpp/toolchain/finish-setup.xml
|
||
|
- Parsing makefile: C:\Users\Hugh\test\proj\cpp\Build.xml
|
||
|
- Parsing include: C:/Users/Hugh/dev/hxcpp/build-tool/BuildCommon.xml
|
||
|
- Parsing include: C:/Users/Hugh/dev/hxcpp/toolchain/haxe-target.xml
|
||
|
- Parsing include: C:/Users/Hugh/dev/hxcpp/toolchain/msvc-toolchain.xml
|
||
|
- Parsing compiler: C:/Users/Hugh/dev/hxcpp/toolchain/common-defines.xml
|
||
|
- Parsing include: C:\Users\Hugh\.hxcpp_config.xml (section "exes")
|
||
|
```
|
||
|
|
||
|
- setup.xml is read because no custom toolchain is specified, and this just include hxcpp_config
|
||
|
- the 'vars' section of hxcpp_config is read - mainly to setup SDK locations
|
||
|
- the hxcpp build tool then uses internal logic based on host and defines to work out which compiler/toolchain to use
|
||
|
- finish-setup then sets a bunch of standard defines for file-extensions and linking flags based on
|
||
|
the type of toolchain being used.
|
||
|
- The provided buildfile (Build.xml) is then processed. It can use the standard defines from finish-setup.
|
||
|
- Build.xml imports the standard haxe-target buildfile, which adds standard runtime files
|
||
|
- The toolchain file is then parsed - making use of any settings from the main Build.xml and finish-setup.
|
||
|
- This file includes the "common-defines.xml" from the compiler to inject standard haxe compiler flags
|
||
|
- hxcpp_config "exe" is parsed. Historically to add libraries or build-paths to targets.
|
||
|
|
||
|
|
||
|
### Standard Environment
|
||
|
finish-setup.xml is where the conventions are set. These variables include:
|
||
|
- haxelink = dll|static_link|exe
|
||
|
- LIBPREFIX = lib|""
|
||
|
- LIBEXTRA =
|
||
|
+ .iphonesim-64
|
||
|
+ .iphonesim
|
||
|
+ .iphoneos
|
||
|
+ .iphoneos-v7
|
||
|
+ .iphoneos-v7s
|
||
|
+ .iphoneos-64
|
||
|
+ .appletvsim-64
|
||
|
+ .appletvsim
|
||
|
+ .watchos
|
||
|
+ .watchsimulator
|
||
|
+ -x86
|
||
|
+ -v7
|
||
|
+ -64
|
||
|
- HX_LINK_SUFFIX = LIBEXTRA | -19 (msvc 19)
|
||
|
- LIBEXT = .a|.lib
|
||
|
- DBG = ""|"-debug"
|
||
|
- OBJEXT = "-list-of-config-ids" depending on available options
|
||
|
|
||
|
These variables are used by haxe-target - you can use them too. Haxe then builds the "haxe" target, which uses some code like:
|
||
|
```xml
|
||
|
<set name="HAXE_OUTPUT_FILE" value="${LIBPREFIX}${HAXE_OUTPUT_PART}${DBG}" />
|
||
|
|
||
|
<target id="haxe" tool="linker" toolid="${haxelink}" output="${HAXE_OUTPUT_FILE}">
|
||
|
<ext value="${LIBEXTRA}.a" if="static_link" />
|
||
|
<!-- ... -->
|
||
|
<files id="__main__" unless="static_link" />
|
||
|
<files id="__lib__" if="static_link"/>
|
||
|
<files id="__resources__" />
|
||
|
<files id="__externs__" />
|
||
|
<files id="runtime" unless="dll_import" />
|
||
|
<files id="cppia" if="scriptable" />
|
||
|
<lib name="-lpthread" if="linux" unless="static_link" />
|
||
|
<lib name="-ldl" if="linux" unless="static_link" />
|
||
|
</target>
|
||
|
```
|
||
|
|
||
|
Here you can see the various file groups, which are enabled or not depending on the compiler mode, and some standard libraries that are needed for Linux.
|
||
|
|
||
|
### Experimenting With Hxcpp Generated Code/Build.xml
|
||
|
If you are using external cpp code, or using meta-data to inject xml into the build process, and you are getting a compile or link error, then it can be useful to run the hxcpp build tool without re-running haxe. This lets you hand-edit the build file or generated c++ code until you get things to work. Once you have solved the issues using this technique, then you can move the changes back into the injected/external code.
|
||
|
|
||
|
First, compile haxe with '-v' flag. This gives quite a bit of debug, but will include a line like this:
|
||
|
```
|
||
|
haxelib run hxcpp Build.xml haxe -Dhaxe3="1" -Dhaxe_ver="4.000" -Dhxcpp_api_level="332" -Dsource-header="Generated by Haxe 4.0.0" -I"" -I"C:/Users/Hugh/dev/haxe/std/cpp/_std/" -I"C:/Users/Hugh/dev/haxe/std/"
|
||
|
```
|
||
|
|
||
|
To use this, first change directories to your output directory. This will be the one you specified with the "-cpp" haxe compiler option. Then, cut and paste this command into a shell, cmd or batch file.
|
||
|
|
||
|
|
||
|
|