-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild-flang.sh
99 lines (88 loc) · 3.69 KB
/
build-flang.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/bin/bash
set -e -o pipefail -u
: ${BUILD_ARCH_OR_TYPE:=host}
: ${DEFAULT_ANDROID_API_LEVEL:=21}
: ${ANDROID_NDK:=~/lib/android-ndk-r27c}
: ${FLANG_MAKE_PROCESSES:=1}
patch -p1 -d $(pwd)/out/llvm-project < flang-undef-macros.patch
ANDROID_TRIPLE="$BUILD_ARCH_OR_TYPE-linux-android"
CC_HOST_PLATFORM=$BUILD_ARCH_OR_TYPE-linux-android$DEFAULT_ANDROID_API_LEVEL
if [ $BUILD_ARCH_OR_TYPE = arm ]; then
ANDROID_TRIPLE="armv7a-linux-androideabi"
CC_HOST_PLATFORM=armv7a-linux-androideabi$DEFAULT_ANDROID_API_LEVEL
elif [ $BUILD_ARCH_OR_TYPE = host ]; then
CC_HOST_PLATFORM=x86_64-linux-gnu
fi
# Build tablegen
mkdir -p build-tblgen
pushd build-tblgen
cmake -G Ninja "-DCMAKE_BUILD_TYPE=Release" \
"-DLLVM_ENABLE_PROJECTS=clang;mlir" \
$(pwd)/../out/llvm-project/llvm
ninja -j $(nproc) clang-tblgen mlir-tblgen
export PATH="$(pwd)/bin:$PATH"
popd # build-tblgen
# See http://llvm.org/docs/CMake.html:
_EXTRA_CONFIGURE_ARGS="
-DCMAKE_BUILD_TYPE=MinSizeRel
-DLLVM_ENABLE_PIC=ON
-DLLVM_LINK_LLVM_DYLIB=ON
-DLLVM_TARGETS_TO_BUILD=all
-DLLVM_ENABLE_FFI=ON
-DFLANG_DEFAULT_LINKER=lld
-DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF
-DFLANG_ENABLE_WERROR=OFF
-DFLANG_INCLUDE_TESTS=OFF
-DLLVM_ENABLE_ASSERTIONS=On
-DLLVM_LIT_ARGS=-v
-DLLVM_DIR=$(pwd)/out/stage2-install/lib/cmake/llvm
-DCLANG_DIR=$(pwd)/out/stage2-install/lib/cmake/clang
-DClang_DIR=$(pwd)/out/stage2-install/lib/cmake/clang
-DMLIR_DIR=$(pwd)/out/stage2-install/lib/cmake/mlir
-DCLANG_TABLEGEN=$(pwd)/build-tblgen/bin/clang-tblgen
-DMLIR_TABLEGEN_EXE=$(pwd)/build-tblgen/bin/mlir-tblgen
-DLLVM_HOST_TRIPLE=${CC_HOST_PLATFORM/-/-unknown-}
"
_CONFIGURE_ARGS=()
_CONFIGURE_ARGS+=("-DCMAKE_C_COMPILER=$(pwd)/out/stage2-install/bin/clang")
_CONFIGURE_ARGS+=("-DCMAKE_CXX_COMPILER=$(pwd)/out/stage2-install/bin/clang++")
_CONFIGURE_ARGS+=("-DCMAKE_LINKER=$(pwd)/out/stage2-install/bin/ld.lld")
_CONFIGURE_ARGS+=("-DCMAKE_CXX_FLAGS=-stdlib=libc++ -Wno-deprecated-copy")
_CONFIGURE_ARGS+=("-DCMAKE_EXE_LINKER_FLAGS=-stdlib=libc++")
_CONFIGURE_ARGS+=("-DCMAKE_INSTALL_RPATH=\$ORIGIN:\$ORIGIN/../lib/x86_64-unknown-linux-gnu:\$ORIGIN/../lib")
_BUILD_TARGET=""
if [ "$BUILD_ARCH_OR_TYPE" != "host" ]; then
# TODO: Use the newly built toolchain
export NDK_STANDALONE_TOOLCHAIN_DIR="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64"
CMAKE_PROC=$BUILD_ARCH_OR_TYPE
test $CMAKE_PROC == "arm" && CMAKE_PROC='armv7-a'
test $CMAKE_PROC == "aarch64" && CMAKE_PROC='arm64-v8a'
_CONFIGURE_ARGS=("-DCMAKE_SYSTEM_NAME=Android")
_CONFIGURE_ARGS+=("-DCMAKE_ANDROID_ARCH_ABI=$CMAKE_PROC")
_CONFIGURE_ARGS+=("-DCMAKE_SYSTEM_VERSION=$DEFAULT_ANDROID_API_LEVEL")
_CONFIGURE_ARGS+=("-DCMAKE_ANDROID_NDK=$ANDROID_NDK")
_CONFIGURE_ARGS+=("-DCMAKE_SKIP_INSTALL_RPATH=ON")
echo "" > $NDK_STANDALONE_TOOLCHAIN_DIR/sysroot/usr/include/zstd.h
echo "!<arch>" > $NDK_STANDALONE_TOOLCHAIN_DIR/sysroot/usr/lib/$ANDROID_TRIPLE/libzstd.a
_BUILD_TARGET="Fortran_main FortranRuntime FortranDecimal"
else
export LD_LIBRARY_PATH="$(pwd)/out/stage2-install/lib:$(pwd)/out/stage2-install/lib/x86_64-unknown-linux-gnu:${LD_LIBRARY_PATH:-}"
fi
mkdir -p build-$BUILD_ARCH_OR_TYPE-install
mkdir -p build-$BUILD_ARCH_OR_TYPE
pushd build-$BUILD_ARCH_OR_TYPE
cmake -G Ninja "${_CONFIGURE_ARGS[@]}" \
-DCMAKE_INSTALL_PREFIX=$(pwd)/../build-$BUILD_ARCH_OR_TYPE-install \
-DDOXYGEN_EXECUTABLE= \
-DBUILD_TESTING=OFF \
$_EXTRA_CONFIGURE_ARGS \
$(pwd)/../out/llvm-project/flang
ninja -j $FLANG_MAKE_PROCESSES $_BUILD_TARGET
if [ "$BUILD_ARCH_OR_TYPE" == "host" ]; then
ninja -j $FLANG_MAKE_PROCESSES install
else
cp lib/lib*.a $(pwd)/../build-$BUILD_ARCH_OR_TYPE-install/
fi
popd # build-$BUILD_ARCH_OR_TYPE
mkdir -p ./output-flang
tar -cjf ./output-flang/package-flang-$BUILD_ARCH_OR_TYPE.tar.bz2 build-$BUILD_ARCH_OR_TYPE-install