@@ -8,9 +8,10 @@ TARGET="X86"
88BUILD_TYPE=" Release"
99BUILD_PREFIX=" ./build"
1010INSTALL_PREFIX=" /usr/local"
11+ CROSS_TARGET=" "
1112NPROC=1
1213USE_LLVM_MAIN_SRC_DIR=" "
13- USE_LLVM_CONFIG =" "
14+ LLVM_CONFIG_BIN =" "
1415USE_CCACHE=" 0"
1516USE_SUDO=" 0"
1617EXTRA_CMAKE_OPTS=" "
@@ -33,6 +34,7 @@ function print_usage {
3334 echo " -d CMake build type. Default: Release" ;
3435 echo " -b Build prefix. Default: ./build" ;
3536 echo " -p Install prefix. Default: /usr/local" ;
37+ echo " -X Build a cross-compiler for given target triple. Default: N/A"
3638 echo " -n Number of parallel jobs. Default: 1" ;
3739 echo " -l Path to LLVM sources. Default: not set" ;
3840 echo " -o Path to llvm-config. Default: not set" ;
@@ -42,15 +44,16 @@ function print_usage {
4244 echo " -v Enable verbose output" ;
4345}
4446
45- while getopts " t:d:b:p:n:l:o:csx:v?" opt; do
47+ while getopts " t:X: d:b:p:n:l:o:csx:v?" opt; do
4648 case " $opt " in
4749 t) TARGET=$OPTARG ;;
4850 d) BUILD_TYPE=$OPTARG ;;
4951 b) BUILD_PREFIX=$OPTARG ;;
5052 p) INSTALL_PREFIX=$OPTARG ;;
53+ X) CROSS_TARGET=$OPTARG ;;
5154 n) NPROC=$OPTARG ;;
5255 l) USE_LLVM_MAIN_SRC_DIR=" -DLLVM_MAIN_SRC_DIR=$OPTARG " ;;
53- o) USE_LLVM_CONFIG= " -DLLVM_CONFIG= $OPTARG " ;;
56+ o) LLVM_CONFIG_BIN= " $OPTARG " ;;
5457 c) USE_CCACHE=" 1" ;;
5558 s) USE_SUDO=" 1" ;;
5659 x) EXTRA_CMAKE_OPTS=" $OPTARG " ;;
6164
6265CMAKE_OPTIONS=" -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
6366 -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
64- -DCMAKE_CXX_COMPILER =$INSTALL_PREFIX /bin/clang++ \
67+ -DCMAKE_AR =$INSTALL_PREFIX /bin/llvm-ar \
6568 -DCMAKE_C_COMPILER=$INSTALL_PREFIX /bin/clang \
69+ -DCMAKE_CXX_COMPILER=$INSTALL_PREFIX /bin/clang++ \
70+ -DCMAKE_RANLIB=$INSTALL_PREFIX /bin/llvm-ranlib \
6671 -DLLVM_TARGETS_TO_BUILD=$TARGET \
6772 $USE_LLVM_MAIN_SRC_DIR "
6873
74+ # Use lld for release_19x or newer version of classic-flang-llvm-project.
75+ set -x
76+ if [ -n " $LLVM_CONFIG_BIN " ]; then
77+ LLVM_MAJOR_VERSION=$( " $LLVM_CONFIG_BIN " --version | cut -f1 -d.)
78+ if [ " $LLVM_MAJOR_VERSION " -gt 19 ]; then
79+ CMAKE_OPTIONS=" $CMAKE_OPTIONS \
80+ -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld \
81+ -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld"
82+ fi
83+ fi
84+ set +x
85+
6986if [ $USE_CCACHE == " 1" ]; then
7087 echo " Build using ccache"
7188 CMAKE_OPTIONS=" $CMAKE_OPTIONS \
7289 -DCMAKE_C_COMPILER_LAUNCHER=ccache \
7390 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
7491fi
7592
93+ if [ -n " $CROSS_TARGET " ]; then
94+ CMAKE_OPTIONS=" $CMAKE_OPTIONS \
95+ -DCROSS_COMPILE_TARGET_TRIPLE=$CROSS_TARGET \
96+ -DLLVM_DEFAULT_TARGET_TRIPLE=$CROSS_TARGET \
97+ -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON"
98+ fi
99+
76100if [ -n " $EXTRA_CMAKE_OPTS " ]; then
77101 CMAKE_OPTIONS=" $CMAKE_OPTIONS $EXTRA_CMAKE_OPTS "
78102fi
@@ -88,15 +112,22 @@ mkdir -p $BUILD_PREFIX/libpgmath && cd $BUILD_PREFIX/libpgmath
88112if [ -n " $VERBOSE " ]; then
89113 set -x
90114fi
91- cmake $CMAKE_OPTIONS $TOPDIR /runtime/libpgmath
115+ if [ -n " $CROSS_TARGET " ]; then
116+ cmake $CMAKE_OPTIONS \
117+ -DCMAKE_C_COMPILER_TARGET=$CROSS_TARGET \
118+ -DCMAKE_CXX_COMPILER_TARGET=$CROSS_TARGET \
119+ $TOPDIR /runtime/libpgmath
120+ else
121+ cmake $CMAKE_OPTIONS $TOPDIR /runtime/libpgmath
122+ fi
92123set +x
93124make -j$NPROC VERBOSE=$VERBOSE
94125if [ $USE_SUDO == " 1" ]; then
95126 echo " Install with sudo"
96- sudo make install
127+ sudo make install VERBOSE= $VERBOSE
97128else
98129 echo " Install without sudo"
99- make install
130+ make install VERBOSE= $VERBOSE
100131fi
101132
102133# Build and install flang.
@@ -110,14 +141,14 @@ cmake $CMAKE_OPTIONS \
110141 -DFLANG_INCLUDE_DOCS=ON \
111142 -DFLANG_LLVM_EXTENSIONS=ON \
112143 -DWITH_WERROR=ON \
113- $USE_LLVM_CONFIG \
144+ -DLLVM_CONFIG= " $LLVM_CONFIG_BIN " \
114145 $TOPDIR
115146set +x
116147make -j$NPROC VERBOSE=$VERBOSE
117148if [ $USE_SUDO == " 1" ]; then
118149 echo " Install with sudo"
119- sudo make install
150+ sudo make install VERBOSE= $VERBOSE
120151else
121152 echo " Install without sudo"
122- make install
153+ make install VERBOSE= $VERBOSE
123154fi
0 commit comments