-
Notifications
You must be signed in to change notification settings - Fork 0
Library Support
This page should outline the idea of making (common) libraries available to Emscripten users.
Provide commonly used libraries at a centralized location, so additional external libraries might be build without having to patch their build system for Emscripten.
Since Emscripten has not support for dynamic libraries and/or their file format a solution should not rely on the dynamic library infrastructure.
On Debian systems installing a library usually is done via dpkg
or apt
tools. Arguments necessary for linking with a library are commonly provided by invoking pkg-config
.
These mechanism could be adopted for Emscripten in a simplified manner.
empkg-get <package name> <package name> ...
- Downloads the
<package name>/versions
file from https://github.com/abergmeier/emscripten-libs for every package. - Finds the highest/latest version.
- Checks whether the directory
EM_CACHE/build/<package name>/<version>
is available and warns for overwrite if it is. - On success downloads (and overwrites) the version to
EM_CACHE/build/<package name>/<version>
.
empkg-build [--ensure] <package name> <package name>
- If
--ensure
argument is present, tries to invokeempkg-get
first and fail if it fails. - If a valid build timestamp is found return successfully.
- Invoke
EM_CACHE/build/<package name>/<version>/.emscripten/build
for building. - If building succeeds, create new build timestamp file.
empkg-config [--cflags] [--libs] [--ensure] <package name> <package name>
- If
--ensure
argument is present, tries to invokeempkg-build
first and fail if it fails. - Returns the contents of
config
section inversions
.
The versions
file is a JSON version of the data needed to download and build the sources.
Entries in the upper section are derived by the version sections.
pc_path
contains the path the .pc
-file can be found in (defaults to .
)
ignore_archive_root
may be set when an archive does not contain the source directly (but contains an intermediate root folder).
{ "maintainers" : [ { "name" : "Alon Zakai",
"email": "[email protected]"
}
],
"build" : [ "emconfigure ./configure", "emmake make" ],
"pc_path" : ".",
"ignore_archive_root": true,
"versions" : [ { "version": "1.2.7",
"src" : "https://github.com/madler/zlib/archive/v1.2.7.zip"
}
]
}
- Less to no work for users
- Higher chances for pushing patches upstream
- Maintainance necessary
- Might not fit every usage scenario
- Library has to be available via sourcecode