44TARGET=" X86"
55BUILD_TYPE=" Release"
66INSTALL_PREFIX=" /usr/local"
7+ CROSS_TARGETS=" "
78NPROC=1
89USE_CCACHE=" 0"
910DO_INSTALL=" 0"
1011USE_SUDO=" 0"
1112C_COMPILER_PATH=" /usr/bin/gcc"
1213CXX_COMPILER_PATH=" /usr/bin/g++"
13- LLVM_ENABLE_PROJECTS= " clang;openmp "
14+ LLVM_EXTRA_PROJECTS= " "
1415EXTRA_CMAKE_OPTS=" "
1516VERBOSE=" "
1617
@@ -19,56 +20,50 @@ set -e # Exit script on first error.
1920function print_usage {
2021 echo " Usage: ./build-llvm-project.sh [options]" ;
2122 echo " " ;
22- echo " Build and install classic-flang-llvm-project." ;
23+ echo " Build and install classic-flang-llvm-project (including clang, lld, and openmp) ." ;
2324 echo " Run this script in a directory with project sources." ;
2425 echo " Example:" ;
2526 echo " $ git clone https://github.com/flang-compiler/classic-flang-llvm-project" ;
2627 echo " $ cd classic-flang-llvm-project" ;
27- echo " $ .github/workflows/build-llvm-project.sh -t X86 -p /install/prefix/ \\ " ;
28- echo " $ -a /usr/bin/gcc-10 -b /usr/bin/g++-10 -i -s" ;
28+ echo " $ ./build-llvm-project.sh -t X86 -p /opt/classic-flang/ -i -s" ;
2929 echo " " ;
3030 echo " Options:" ;
3131 echo " -t Target to build for (X86, AArch64, PowerPC). Default: X86" ;
3232 echo " -d Set the CMake build type. Default: Release" ;
3333 echo " -p Install prefix. Default: /usr/local" ;
34+ echo " -X Cross-compile OpenMP for given list of target triples. Default: none" ;
3435 echo " -n Number of parallel jobs. Default: 1" ;
3536 echo " -c Use ccache. Default: 0 - do not use ccache" ;
3637 echo " -i Install the build. Default 0 - just build, do not install" ;
3738 echo " -s Use sudo to install. Default: 0 - do not use sudo" ;
3839 echo " -a C compiler path. Default: /usr/bin/gcc" ;
3940 echo " -b C++ compiler path. Default: /usr/bin/g++" ;
40- echo " -e List of the LLVM sub-projects to build. Default: clang;openmp " ;
41+ echo " -e List of additional LLVM sub-projects to build. Default: none " ;
4142 echo " -x Extra CMake options. Default: ''" ;
4243 echo " -v Enable verbose output" ;
4344}
4445
45- while getopts " t:d:p:n:cisa:b:e:x:v?" opt; do
46+ while getopts " t:d:p:X: n:cisa:b:e:x:v?" opt; do
4647 case " $opt " in
4748 t) TARGET=$OPTARG ;;
4849 d) BUILD_TYPE=$OPTARG ;;
4950 p) INSTALL_PREFIX=$OPTARG ;;
51+ X) CROSS_TARGETS=$OPTARG ;;
5052 n) NPROC=$OPTARG ;;
5153 c) USE_CCACHE=" 1" ;;
5254 i) DO_INSTALL=" 1" ;;
5355 s) USE_SUDO=" 1" ;;
5456 a) C_COMPILER_PATH=$OPTARG ;;
5557 b) CXX_COMPILER_PATH=$OPTARG ;;
56- e) LLVM_ENABLE_PROJECTS =$OPTARG ;;
58+ e) LLVM_EXTRA_PROJECTS =$OPTARG ;;
5759 x) EXTRA_CMAKE_OPTS=" $OPTARG " ;;
5860 v) VERBOSE=" 1" ;;
5961 ? ) print_usage; exit 0;;
6062 esac
6163done
6264
6365CMAKE_OPTIONS=" -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
64- -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
65- -DCMAKE_C_COMPILER=$C_COMPILER_PATH \
66- -DCMAKE_CXX_COMPILER=$CXX_COMPILER_PATH \
67- -DLLVM_TARGETS_TO_BUILD=$TARGET \
68- -DLLVM_ENABLE_CLASSIC_FLANG=ON \
69- -DFLANG_BUILD_NEW_DRIVER=OFF"
70- # Warning: the -DLLVM_ENABLE_PROJECTS option is specified with cmake
71- # to avoid issues with nested quotation marks
66+ -DCMAKE_BUILD_TYPE=$BUILD_TYPE "
7267
7368if [ $USE_CCACHE == " 1" ]; then
7469 echo " Build using ccache"
@@ -77,16 +72,19 @@ if [ $USE_CCACHE == "1" ]; then
7772 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
7873fi
7974
80- if [ -n " $EXTRA_CMAKE_OPTS " ]; then
81- CMAKE_OPTIONS=" $CMAKE_OPTIONS $EXTRA_CMAKE_OPTS "
82- fi
83-
84- # Build and install
75+ # Build and install.
8576mkdir -p build && cd build
8677if [ -n " $VERBOSE " ]; then
8778 set -x
8879fi
89- cmake $CMAKE_OPTIONS -DLLVM_ENABLE_PROJECTS=$LLVM_ENABLE_PROJECTS ../llvm
80+ cmake $CMAKE_OPTIONS \
81+ -DCMAKE_C_COMPILER=$C_COMPILER_PATH \
82+ -DCMAKE_CXX_COMPILER=$CXX_COMPILER_PATH \
83+ -DLLVM_ENABLE_CLASSIC_FLANG=ON \
84+ -DLLVM_ENABLE_PROJECTS=" clang;lld;openmp;$LLVM_EXTRA_PROJECTS " \
85+ -DLLVM_TARGETS_TO_BUILD=" $TARGET " \
86+ $EXTRA_CMAKE_OPTS \
87+ ../llvm
9088set +x
9189make -j$NPROC VERBOSE=$VERBOSE
9290if [ $DO_INSTALL == " 1" ]; then
@@ -100,3 +98,44 @@ if [ $DO_INSTALL == "1" ]; then
10098fi
10199cd ..
102100
101+ # Cross-compile OpenMP libraries if requested.
102+ IFS=' ;' read -ra CROSS_TARGET_LIST <<< " $CROSS_TARGETS"
103+ for T in ${CROSS_TARGET_LIST[@]} ; do
104+ mkdir -p " build/openmp-$T "
105+ pushd " build/openmp-$T "
106+ CMAKE_OPTIONS=" $CMAKE_OPTIONS \
107+ -DCMAKE_AR=$INSTALL_PREFIX /bin/llvm-ar \
108+ -DCMAKE_ASM_COMPILER=$INSTALL_PREFIX /bin/clang \
109+ -DCMAKE_ASM_COMPILER_TARGET=$T \
110+ -DCMAKE_C_COMPILER=$INSTALL_PREFIX /bin/clang \
111+ -DCMAKE_C_COMPILER_TARGET=$T \
112+ -DCMAKE_CXX_COMPILER=$INSTALL_PREFIX /bin/clang++ \
113+ -DCMAKE_CXX_COMPILER_TARGET=$T \
114+ -DCMAKE_RANLIB=$INSTALL_PREFIX /bin/llvm-ranlib \
115+ -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld"
116+ if [ -n " $VERBOSE " ]; then
117+ set -x
118+ fi
119+ cmake $CMAKE_OPTIONS \
120+ -DLLVM_DEFAULT_TARGET_TRIPLE=$T \
121+ -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \
122+ -DLLVM_ENABLE_RUNTIMES=" openmp" \
123+ -DLIBOMP_OMPT_SUPPORT=OFF \
124+ -DOPENMP_ENABLE_LIBOMPTARGET=OFF \
125+ -DOPENMP_ENABLE_OMPT_TOOLS=OFF \
126+ -DOPENMP_LLVM_TOOLS_DIR=$PWD /../bin \
127+ $EXTRA_CMAKE_OPTS \
128+ ../../runtimes
129+ set +x
130+ make -j$NPROC VERBOSE=$VERBOSE
131+ if [ $DO_INSTALL -eq 1 ]; then
132+ if [ $USE_SUDO -eq 1 ]; then
133+ echo " Install with sudo"
134+ sudo make install
135+ else
136+ echo " Install without sudo"
137+ make install
138+ fi
139+ fi
140+ popd
141+ done
0 commit comments