forked from llvm-mirror/llvm
Build
zzmatu edited this page Jun 16, 2017
·
5 revisions
The patch makes CLANG accept new mcpu types. It is in "lib/Target/Sparc" in llvm-sparc64fx. It modifies a file "lib/Basic/Targets.cpp".
% cd cfe-3.9.1.src
% git apply ../llvm-sparc64fx/lib/Target/Sparc/clang-patch-cfe-3.9.1.src.txt
Building is as usual.
% cmake ...
% make -j 4
% make install
As an example, usual arguments to cmake are as follows:
cmake -G "Unix Makefiles" \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DCMAKE_INSTALL_PREFIX=/opt/aics/llvm/llvms64fx \
-DLLVM_TARGETS_TO_BUILD="Sparc" \
-DLLVM_TARGET_ARCH=sparcv9 \
-DLLVM_DEFAULT_TARGET_TRIPLE=sparcv9-unknown-linux-gnu \
-DLLVM_EXTERNAL_CLANG_SOURCE_DIR=../cfe-3.9.1.src \
-DCMAKE_BUILD_TYPE=Release \
../llvm-sparc64fx
Copy libraries of GCC to simplify setting LD_LIBRARY_PATH, by which LLVM/CLANG are compiled with.
% cp gcc/lib64/libstdc++.so.6.0.22 /opt/aics/llvm/llvms64fx/lib/
% cd /opt/aics/llvm/llvms64fx/lib
% ln -s ln -s libstdc++.so.6.0.22 libstdc++.so.6
Replace CLANG by a shell script.
% cd /opt/aics/llvm/llvms64fx/bin
% cat clang
#!/bin/ksh
/opt/aics/llvm/llvms64fx/bin/clang-3.9 \
--sysroot=/opt/FJSVXosDevkit/sparc64fx/target \
--target=sparcv9-unknown-linux-gnu \
-mcpu=s64fx8 \
-I/opt/aics/gcc/gcc620/sparc64-unknown-linux-gnu/include/c++/6.2.0 \
-Dunix -D__unix -D__unix__ \
-Dlinux -D__linux -D__linux__ \
-Dsparc -D__sparc -D__sparc__ \
-D__USER_LABEL_PREFIX__= \
-D__HPC_ACE__ \
-D__ELF__ \
-D__LIBC_6B \
-D_LP64 -D__LP64__ \
-fvectorize -fslp-vectorize \
-mllvm -vectorize-loops=1 \
-mllvm -vectorize-slp=1 \
-mllvm -force-vector-width=2 \
$*
Add links of commands to make them visible to CLANG.
% cd /opt/aics/llvm/llvms64fx/bin
% ln -s /opt/FJSVtclang/GM-1.2.0-22 GM
% ln -s GM/util/bin/sparc64-unknown-linux-gnu-ld .
% ln -s GM/util/bin/sparc64-unknown-linux-gnu-as .
% ln -s GM/util/bin/sparc64-unknown-linux-gnu-ar .
% ln -s sparc64-unknown-linux-gnu-as sparcv9-unknown-linux-gnu-as
% ln -s sparc64-unknown-linux-gnu-ar sparcv9-unknown-linux-gnu-ar
Replace LD by a shell script. It drops the arguments that CLANG adds but LD does not understand.
% cat sparcv9-unknown-linux-gnu-ld
#!/bin/ksh
# Drop --hash-style=gnu, crtbegin.o, crtend.o from the argument list.
#/opt/FJSVtclang/GM-1.2.0-13/util/bin/sparc64-unknown-linux-gnu-ld $*
set '_EOL_' "$@" '_EOL_'
for a in "$@"; do
case "$a" in
--hash-style=gnu) ;;
crtbegin.o) ;;
crtend.o) ;;
_EOL_) ;;
*) set "$@" "$a" ;;
esac
done
shift
for a in "$@"; do
case "$a" in
_EOL_) shift; break ;;
*) shift ;;
esac
done
l=/opt/FJSVXosDevkit/sparc64fx/target/usr/lib64/gcc/sparc64-unknown-linux-gnu/4.2.4
/opt/aics/llvm/llvms64fx/bin/sparc64-unknown-linux-gnu-ld -L${l} $*