Because I have no trust in people.
<hashlink>points to your installation of Hashlink, e.g. folder in whichhl.exe(or Unix executable) is, alongside with library binaries (.hdllfiles), andincludefolder.<src>points to the folder containing generated HL/C sources. One that containshlc.jsonfile.<app>refers to your output executable name, including extension.<main>refers to your entry-point file name, including extension (see below).- I provide example of doing it on Windows via MSVC
cl.exe, but Unix should be more or less same with replacement of argument flags and compiler. - I expect that you DO have a compiler installed and can call
cl.exeor other compiler from command-line. - As far as I'm aware - static linking of libraries not possible atm.
hlc.jsoncontains information you need in order to compile the sources. It's contents are referenced as<hlc.*>.<hlc.libs>for example.versiontells what format version thishlc.jsonis. Instructions are based on version 4000, but should work on newer ones if they are to follow.libsarray contains the list of referenced hdll libraries.definesprovide defines used during compilation, and can be safely ignored.filesarray contains all generated files, with first file always being the entry-point.
stdlibrary as a file islibhl.dll, notstd.hdll.- Some libraries need you to copy dependency files alongside the hdll file.
sdl->SDL2.dllopenal->OpenAL32.dll
- If you are using any external hdll libraries - find them in respective library locations.
First of all, to generate HLC sources instead of HL bytecode you just replace -hl command extension from .hl to .c.
That name also will be your entry-point file name. And be sure to use subfolder (-hl hlc/game.c), because you don't want to pollute your root with .c output ;)
cl.exe /Ox /Fe <app> -I "<hashlink>\include" -I "<src>" "<src>\<main>" "<hashlink>\libhl.lib" ...libs
/Fe <app>: Output to an executable, for example/Fe game.exewould produce agame.exeexecutable in cwd.-I "<hashlink>\include": Includes hashlink headers, as they are mandatory in order to compile.-I "<src>": Includes source files."<src>\<main>": Specifies entry-point.- Libraries: Here you should link all libraries that are listed in
<hlc.libs>. At the very least it'slibhl.lib, but in case of Heaps - it expands to at leastfmt.lib,ui.lib,openal.lib, andsdl.libordirectx.lib. /Oxis optional optimization flag.
cl.exe /Ox /Fe app.exe -I "%hashlink%\include" -I "hlc" "hlc\app.c" "%hashlink%\ssl.lib" "%hashlink%\directx.lib" "%hashlink%\openal.lib" "%hashlink%\fmt.lib" "%hashlink%\libhl.lib"
Make sure you're running 64-bit MSVC on newer Hashlink, because it defaults to 32-bit if you're running MSVC dev shell.
Note: This is untested. Ping me in discord if there are errors or if it worked for you.
gcc -O3 -o <app> -std=c11 -I <src> <src>/<main> -lhl /usr/local/lib/libhl.so ...libs
-o <app>: Output to an executable.-std=c11: Some mandatory GCC stuff. ;)-I <src>: Includes source files.<src>/<main>: Specified entry-point.-lhl: Includes hashlink includes via-lflag. Alternatively should work with-I <hashlink>/include.- Libraries: See above. Note that for unix systems it should be
.hdll/.soinstead of.lib, depending on which library you refer to. Also if you can't be assed: Include all hdlls possible, see below. -O3is optional optimization flag.
gcc -O3 -o app -std=c11 -I out hlc/app.c -lhl /usr/local/lib/*.hdll
To get your compilation portable, you should not forget to copy over all linked .hdll files near executable, as well as libhl and all dependency libraries (sdl/openal).
That's it. Really. There's nothing more to it.
Well, I don't give a damn. Sucks to be you I guess. ¯\_(ツ)_/¯
Aka alternative approaches.
haxelib install hashlink # Install HL support library.
haxelib run hashlink build <src> -D hlgen.makefile=vs2015 # Generate templateThen just open your vs project file and compile.
- Route A: Rename your .hl to
hlboot.datand runhl.exe(Afaik, DeadCells used this before switching to precompiled HLC) - Route B: Use cmd file that just does
hl game.hl(I use that approach for development builds internally)
This is what worked for me with gcc on linux:
/usr/local/lib/*.hdllis where all the hdll files are kept because I built and installed hashlink from source.I figured this out thanks to: HaxeFoundation/hashlink#124