Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Unified Diff: ports/pnacl/build.sh

Issue 1607793004: Update pnacl toolchain version (Closed) Base URL: https://chromium.googlesource.com/webports.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ports/pnacl-llvm-src/pkg_info ('k') | ports/pnacl/compiler_wrapper.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ports/pnacl/build.sh
diff --git a/ports/pnacl/build.sh b/ports/pnacl/build.sh
index 21e8cc71f3aad8d1d42b67f8711a3a8f601ee08d..60d193771f51cf82bd2909f4792730d864a93ef8 100644
--- a/ports/pnacl/build.sh
+++ b/ports/pnacl/build.sh
@@ -2,7 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-EXECUTABLES="bin/arm-nacl-readelf bin/le32-nacl-strings bin/clang bin/clang++"
EnableGlibcCompat
EnableCliMain
@@ -21,6 +20,9 @@ PatchStep() {
Remove ${SRC_DIR}/toolchain_build/src/llvm/tools/clang
LogExecute ln -fs ${SRC_DIR}/../../pnacl-clang-src/clang \
${SRC_DIR}/toolchain_build/src/llvm/tools/clang
+ Remove ${SRC_DIR}/toolchain_build/src/binutils-x86
+ LogExecute ln -fs ${SRC_DIR}/../../pnacl-binutils-x86-src/binutils \
+ ${SRC_DIR}/toolchain_build/src/binutils-x86
}
ConfigureStep() {
@@ -28,7 +30,7 @@ ConfigureStep() {
}
OUT_DIR=${BUILD_DIR}/out
-OUT_BIN=${BUILD_DIR}/bin
+OUT_INSTALL=${BUILD_DIR}/install
BuildStep() {
PNACL_DIR=${NACL_SDK_ROOT}/toolchain/linux_pnacl
@@ -67,6 +69,13 @@ BuildStep() {
EXTRA_CONFIGURE="--extra-configure-arg=--disable-compiler-version-checks"
EXTRA_CONFIGURE+=" --extra-configure-arg=--enable-libcpp"
+ # Without this configure will detect vfork as missing and define
+ # vfork to fork which clobbers that define in "spawn.h".
+ EXTRA_CONFIGURE+=" --extra-configure-arg=ac_cv_func_vfork_works=yes"
+ EXTRA_CONFIGURE+=" --extra-configure-arg=ac_cv_func_getrusage=no"
+ if [[ ${NACL_DEBUG} == 1 ]]; then
+ EXTRA_CONFIGURE+=" --host-flavor=debug"
+ fi
# Some code in llvm uses intrisics not supported in the pnacl stable abi.
if [[ ${TOOLCHAIN} == pnacl ]]; then
@@ -77,18 +86,13 @@ BuildStep() {
EXTRA_CC_ARGS+=" -I${NACLPORTS_INCLUDE}/glibc-compat"
fi
- LINUX_PNACL=${NACL_SDK_ROOT}/toolchain/linux_pnacl
EXTRA_CC_ARGS+=" -include spawn.h"
EXTRA_CC_ARGS+=" -I${NACL_SDK_ROOT}/include"
EXTRA_CC_ARGS+=" -I${NACLPORTS_INCLUDE}"
- # export EXTRA_LIBS so that compiler_wapper.py can access it
- export EXTRA_LIBS="${NACLPORTS_LDFLAGS} ${NACLPORTS_LIBS}"
- echo "EXTRA_LIBS=${EXTRA_LIBS}"
-
- # Without this configure will detect vfork as missing and define
- # vfork to fork which clobbers that define in "spawn.h".
- export ac_cv_func_vfork_works=yes
+ # export WEBPORTS_EXTRA_LIBS so that compiler_wapper.py can access it
+ export WEBPORTS_EXTRA_LIBS="${NACLPORTS_LDFLAGS} ${NACLPORTS_LIBS}"
+ echo "WEBPORTS_EXTRA_LIBS=${WEBPORTS_EXTRA_LIBS}"
# Inject a shim that speed up pnacl invocations for configure.
if [ "${NACL_ARCH}" = "pnacl" ]; then
@@ -100,6 +104,9 @@ BuildStep() {
NACLCC="${START_DIR}/compiler_wrapper.py ${NACLCC}"
NACLCXX="${START_DIR}/compiler_wrapper.py ${NACLCXX}"
+ Remove ${OUT_INSTALL}
+ MakeDir ${OUT_INSTALL}
+
export CC=${NACLCC}
export CXX=${NACLCXX}
export AR=${NACLAR}
@@ -110,68 +117,134 @@ BuildStep() {
--no-annotator \
--pnacl-in-pnacl \
--output=${OUT_DIR} \
+ --install=${OUT_INSTALL} \
"--extra-cc-args=${EXTRA_CC_ARGS}" \
${EXTRA_CONFIGURE} \
"--binutils-pnacl-extra-configure=${GOLD_LDADD}"
- Remove ${OUT_BIN}
- MakeDir ${OUT_BIN}
- LogExecute cp ${OUT_DIR}/llvm_le32_nacl_install/bin/* ${OUT_BIN}
- LogExecute cp ${OUT_DIR}/binutils_pnacl_le32_nacl_install/bin/* \
- ${OUT_BIN}
- # TODO(bradnelson): Drop this once shell script fix is done.
- MakeDir ${OUT_BIN}/driver
- LogExecute cp ${SRC_DIR}/pnacl/driver/redirect.sh ${OUT_BIN}/driver/
- LogExecute cp ${SRC_DIR}/pnacl/driver/*.py ${OUT_BIN}/driver/
+ CreateHybridToolchain
}
-InstallStep() {
- local INSTALL_DIR=${DESTDIR}/${PREFIX}/pnacl
- Remove ${INSTALL_DIR}/
- MakeDir ${INSTALL_DIR}/
+CreateHybridToolchain() {
+ Banner "Creating Hybrid Toolchain"
- LogExecute cp -r ${NACL_SDK_ROOT}/toolchain/linux_pnacl/* ${INSTALL_DIR}
+ # Build a full toolchain based on the one in NACL_SDK_ROOT, but overlayed
+ # with the one we just compiled.
+ Remove toolchain
+ MakeDir toolchain
+
+ host_toolchain=${NACL_SDK_ROOT}/toolchain/linux_pnacl
+ LogExecute cp -r ${host_toolchain}/* toolchain
# Drop pyc files.
- LogExecute find ${INSTALL_DIR} -name "*.pyc" -exec rm {} \;
-
- LogExecute rm -rf ${INSTALL_DIR}/mipsel-nacl
- LogExecute rm -rf ${INSTALL_DIR}/translator
- LogExecute rm -rf ${INSTALL_DIR}/*-nacl/usr
-
- # TODO(bradnelson): Drop this once shell script fix is done.
- LogExecute cp ${OUT_BIN}/driver/*.py ${INSTALL_DIR}/bin/pydir/
-
- # Swap in nacl executables.
- Remove ${INSTALL_DIR}/lib/*.so
- for f in $(find ${INSTALL_DIR} -executable -type f); do
- if [ "$(file ${f} | grep ELF)" != "" ]; then
- local exe="${OUT_BIN}/$(basename ${f})"
- if [[ -f ${exe} ]]; then
- if [[ ${TOOLCHAIN} == pnacl ]]; then
- echo "Finalizing ${exe}"
- ${PNACLFINALIZE} ${exe} -o ${f}
- else
- echo "Copying ${exe}"
- cp ${exe} ${f}
- fi
+ LogExecute find toolchain -name "*.pyc" -exec rm {} \;
+
+ # Overlay compiled toolchain
+ Remove ${OUT_INSTALL}/x86_64-nacl/lib/32
+ Remove ${OUT_INSTALL}/x86_64-nacl/lib64
+ LogExecute cp -r ${OUT_INSTALL}/* toolchain/
+
+ # Rename the nacl executables.
+ for f in $(cd ${host_toolchain} && find . -executable -type f); do
+ if [[ "$(file ${host_toolchain}/${f} | grep ELF)" != "" \
+ && ${f} != *pnacl-abicheck ]]; then
+ # We are dealing with an executable
+ local built_exe="${OUT_INSTALL}/${f}"
+ local exe="toolchain/${f}"
+ if [[ -f ${built_exe} ]]; then
+ LogExecute mv ${exe} ${exe}${NACL_EXEEXT}
elif [[ $f == *-clang* ]]; then
- LogExecute ln -sf ${f} $(basename ${f})
+ Remove ${exe}
+ LogExecute ln -sf clang${NACL_EXEEXT} ${exe}${NACL_EXEEXT}
else
echo "Warning: dropping ${f} without a nacl replacement."
- LogExecute rm -f ${f}
+ LogExecute rm -f ${exe}
fi
- elif [ "$(head -n 1 ${f} | grep /bin/sh)" != "" ]; then
- # TODO(bradnelson): Drop this once shell script fix is done.
- LogExecute cp -f ${OUT_BIN}/driver/redirect.sh ${f}
- LogExecute chmod a+x ${f}
fi
done
+
+ # Now create launcher scripts for each executable
+ for f in toolchain/bin/*${NACL_EXEEXT}; do
+ script=${f%.*}
+ if [[ ${TOOLCHAIN} == pnacl ]]; then
+ TranslateAndWriteLauncherScript "${f}" x86-64 "${script}.nexe" "${script}"
+ else
+ WriteLauncherScript "${script}" "$(basename ${f})"
+ fi
+ done
+
+ # Drop parts we don't care about
+ LogExecute rm -rf toolchain/translator
+ LogExecute rm -rf toolchain/mipsel-nacl
+ LogExecute rm -rf toolchain/*-nacl/usr
+ LogExecute rm -f toolchain/bin/mipsel-*
+ LogExecute rm -f toolchain/lib/*.so
+}
+
+InstallStep() {
+ local INSTALL_DIR=${DESTDIR}/${PREFIX}/pnacl
+ Remove ${INSTALL_DIR}/
+ MakeDir ${INSTALL_DIR}/
+
+ LogExecute cp -r toolchain/* ${INSTALL_DIR}
+ for f in $(find ${INSTALL_DIR} -type l -name *-clang*${NACL_EXEEXT}); do
+ # link to clang binary
+ Remove $f ${f%.*}
+ LogExecute ln -s clang ${f%.*}
+ done
+ for f in $(find ${INSTALL_DIR} -executable -type f -name *${NACL_EXEEXT}); do
+ LogExecute mv $f ${f%.*}
+ done
}
-PostInstallTestStep() {
+TestStep() {
# Verify that binaries at least load under sel_ldr
- LogExecute ./bin/le32-nacl-strings.sh --version
- LogExecute ./bin/arm-nacl-readelf.sh --version
- LogExecute ./bin/clang.sh --version
+ LogExecute toolchain/bin/le32-nacl-strings --version
+ LogExecute toolchain/bin/arm-nacl-readelf --version
+ LogExecute toolchain/bin/x86_64-nacl-as --version
+ LogExecute toolchain/bin/clang --version
+
+ # The end-to-end tests doesn't currently work for PNaCl
+ if [[ $TOOLCHAIN == pnacl ]]; then
+ return
+ fi
+ TestNaClClang
+}
+
+TestNaClClang() {
+ # Try compiling and running a simple hello world program. We have to
+ # use explicit compile, assemble and link commands since sel_ldr doesn't
+ # provide fork().
+
+ compile_command="toolchain/bin/x86_64-nacl-clang -cc1 -triple x86_64--nacl
+ -S -disable-free -main-file-name ${START_DIR}/hello.c -mrelocation-model
+ static -mthread-model posix -mdisable-fp-elim -fmath-errno -no-integrated-as
+ -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64
+ -target-linker-version 2.24 -v -dwarf-column-info
+ -resource-dir $PWD/toolchain/bin/../lib/clang/3.7.0
+ -internal-isystem $PWD/toolchain/bin/../lib/clang/3.7.0/include
+ -internal-isystem $PWD/toolchain/bin/../x86_64-nacl/usr/include
+ -internal-isystem $PWD/toolchain/bin/../x86_64-nacl/include
+ -fno-dwarf-directory-asm -ferror-limit 19 -fmessage-length 0 -mstackrealign
+ -fobjc-runtime=gcc -fdiagnostics-show-option -o hello.s -x c
+ ${START_DIR}/hello.c
+ "
+ LogExecute $compile_command
+
+ LogExecute toolchain/bin/x86_64-nacl-as --64 hello.s -o hello.o
+ link_command="toolchain/x86_64-nacl/bin/ld --build-id -m
+ elf_x86_64_nacl -static -o hello.nexe
+ $PWD/toolchain/bin/../x86_64-nacl/lib/crt1.o
+ $PWD/toolchain/bin/../x86_64-nacl/lib/crti.o
+ $PWD/toolchain/bin/../lib/clang/3.7.0/lib/x86_64-nacl/crtbeginT.o
+ -L$PWD/toolchain/bin/../x86_64-nacl/lib
+ -L$PWD/toolchain/bin/../x86_64-nacl/usr/lib
+ -L$PWD/toolchain/bin/../lib/clang/3.7.0/lib/x86_64-nacl
+ ./hello.o --start-group -lc -lgcc --as-needed -lgcc_eh --no-as-needed
+ --end-group
+ $PWD/toolchain/bin/../lib/clang/3.7.0/lib/x86_64-nacl/crtend.o
+ $PWD/toolchain/bin/../x86_64-nacl/lib/crtn.o
+ "
+ LogExecute $link_command
+ RunSelLdrCommand hello.nexe
}
« no previous file with comments | « ports/pnacl-llvm-src/pkg_info ('k') | ports/pnacl/compiler_wrapper.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698