diff options
Diffstat (limited to 'scripts/build/libc/moxiebox.sh')
-rw-r--r-- | scripts/build/libc/moxiebox.sh | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/scripts/build/libc/moxiebox.sh b/scripts/build/libc/moxiebox.sh new file mode 100644 index 00000000..376c742c --- /dev/null +++ b/scripts/build/libc/moxiebox.sh @@ -0,0 +1,84 @@ +# Functions to build the moxiebox runtime. + +. "${CT_LIB_DIR}/scripts/build/libc/newlib.sh" + +moxiebox_get() +{ + CT_Fetch NEWLIB + CT_Fetch MOXIEBOX +} + +moxiebox_extract() +{ + CT_ExtractPatch NEWLIB + CT_ExtractPatch MOXIEBOX +} + +moxiebox_start_files() +{ + newlib_start_files +} + +moxiebox_main() +{ + newlib_main + + # newlib installs the linker script, moxiebox.ld, to the + # PREFIX/moxie-unknown-moxiebox/lib, but ld searches PREFIX/lib when + # configured for that target. ld does find scripts in PREFIX/TARGET/lib + # for other targets, so this seems to be moxie architecture's quirk. + # Move it to PREFIX/lib. + # TBD CT_DoExecLog ALL mv -v "${CT_SYSROOT_DIR}/lib/"*.ld "${CT_PREFIX_DIR}/lib" + # TBD what about moxie-*-elf? Does it need the same? + + CT_DoStep INFO "Installing moxiebox runtime and VM" + + CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc-moxiebox" + CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/moxiebox/." . + + CT_DoLog EXTRA "Building SHA256-only libcrypto" + # Moxiebox needs libcrypto on the host, but it only uses SHA256 digest functions + # from it. We don't want to pull the whole OpenSSL for the host; fortunately, + # moxiebox comes with a standalone SHA256 implementation - which it only uses + # for the target library. Help it use the same implementation for the host. + CT_mkdir_pushd openssl + CT_DoExecLog ALL cp -v "${CT_LIB_DIR}/packages/moxiebox/"sha*.[ch] ./ + CT_DoExecLog ALL "${CT_HOST}-gcc" -c sha256_wrap.c -O2 -Wall + CT_DoExecLog ALL "${CT_HOST}-ar" cru libcrypto.a sha256_wrap.o + CT_Popd + + # Moxiebox includes a VM which we're building for the + # host machine. + CT_DoLog EXTRA "Configuring moxiebox" + + CT_DoExecLog CFG ./autogen.sh + + # moxiebox build script create symlinks from the installation location to the build + # directory for the moxiebox library. This seems backwards. Instead, pass the search + # as part of the MOX_GCC definition. + # moxiebox also depends on the tools being named moxiebox-{gcc,as,ar}. However, failure + # to detect such tools is non-fatal in the configure and we need to override it in + # make's command line anyway. + CT_DoExecLog CFG \ + LDFLAGS="${CT_LDFLAGS_FOR_HOST} -L${CT_BUILD_DIR}/build-libc-moxiebox/openssl" \ + CFLAGS="${CT_CFLAGS_FOR_HOST} -I${CT_BUILD_DIR}/build-libc-moxiebox" \ + CXXFLAGS="${CT_CFLAGS_FOR_HOST} -I${CT_BUILD_DIR}/build-libc-moxiebox" \ + ./configure \ + --host="${CT_HOST}" + CT_DoLog EXTRA "Building moxiebox" + CT_DoExecLog CFG make all \ + MOX_GCC="${CT_TARGET}-gcc -B ${CT_BUILD_DIR}/build-libc-moxiebox/runtime -B ${CT_SYSROOT_DIR}/lib" \ + MOX_AS="${CT_TARGET}-as" \ + MOX_AR="${CT_TARGET}-ar" + + CT_DoLog EXTRA "Installing moxiebox" + + # moxiebox does not have install target. Copy the interesting stuff manually. + CT_DoExecLog ALL cp -v "${CT_BUILD_DIR}/build-libc-moxiebox/runtime/libsandboxrt.a" \ + "${CT_BUILD_DIR}/build-libc-moxiebox/runtime/crt0.o" \ + "${CT_SYSROOT_DIR}/lib/" + CT_DoExecLog ALL cp -v "${CT_BUILD_DIR}/build-libc-moxiebox/src/sandbox" \ + "${CT_PREFIX_DIR}/bin" + CT_Popd + CT_EndStep +} |