Skip to content
zzmatu edited this page Jun 16, 2017 · 5 revisions

Build Procedure

Patch CLANG

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

Build LLVM

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

Install Additional Commands

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} $*
Clone this wiki locally