from .base import ConfigInfo from kiwixbuild.utils import pj from kiwixbuild._global import get_target_step class WasmConfigInfo(ConfigInfo): name = "wasm" static = True build = "wasm" arch_full = "wasm64-emscripten" libdir = "lib" # arch_full = 'wasm64-linux' toolchain_names = ["emsdk"] compatible_hosts = ["fedora", "debian"] exe_wrapper_def = "" def get_cross_config(self): return { "binaries": self.binaries, "exe_wrapper_def": "", "root_path": self.root_path, "extra_libs": [], "extra_cflags": [], "host_machine": { "system": "emscripten", "lsystem": "emscripten", "cpu_family": "wasm64", "cpu": "wasm64", "endian": "little", "abi": "", }, } @property def wasm_sdk(self): return get_target_step("emsdk", self.name) @property def install_path(self): return self.wasm_sdk.install_path @property def root_path(self): return self.install_path @property def binaries(self): binaries = ( ("CC", "emcc"), ("CXX", "em++"), ("AR", "emar"), ("STRIP", "emstrip"), ("WINDRES", "windres"), ("RANLIB", "emranlib"), ("LD", "wasm-ld"), ) binaries = { k: pj(self.install_path, "upstream", "emscripten", v) for k, v in binaries } binaries["PKGCONFIG"] = "pkg-config" return binaries @property def configure_options(self): # return "" return [f"--host={self.arch_full}"] @property def configure_wrapper(self): return "emconfigure" @property def make_wrapper(self): return "emmake" def get_bin_dir(self): return [pj(self.install_path, "bin")] def get_env(self): env = super().get_env() env["PATH"].extend( [ self.install_path, pj(self.install_path, "upstream", "emscripten"), pj(self.install_path, "node", "14.18.2_64bit", "bin"), ] ) env["EMSDK"] = self.install_path env["EMSDK_NODE"] = pj( self.install_path, "node", "14.18.2_64bit", "bin", "node" ) return env def set_comp_flags(self, env): super().set_comp_flags(env) env["CFLAGS"] = ( " -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 " + env["CFLAGS"] ) env["CXXFLAGS"] = ( " -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 " + env["CXXFLAGS"] ) def set_compiler(self, env): for k, v in self.binaries.items(): env[k] = v def finalize_setup(self): super().finalize_setup() self.buildEnv.cmake_crossfile = self._gen_crossfile("cmake_cross_file.txt") self.buildEnv.meson_crossfile = self._gen_crossfile("meson_cross_file.txt")