1SET(CMAKE_SYSTEM_NAME Linux)
2SET(CMAKE_SYSTEM_PROCESSOR aarch64)
3
4# Toolchain precedence: environment variable TROUT_CLANG_PATH > Android Clang Toolchain > Floral Clang Toolchain
5# AGL sysroot precedence: environment variable TROUT_AGL_SYSROOT > Floral AGL sysroot
6IF(DEFINED ENV{COQOS_HV_PATH})
7    SET(TROUT_CLANG_PATH $ENV{COQOS_HV_PATH}/tools/toolchains/clang-llvm-9)
8    SET(TROUT_AGL_SYSROOT $ENV{COQOS_HV_PATH}/bsp/linux/yocto/qti-yocto-agl-sdk-sa8155-automotive-machine-image/sysroots/aarch64-agl-linux)
9ENDIF()
10
11IF (DEFINED ENV{ANDROID_BUILD_TOP})
12    FILE(GLOB TROUT_ANDROID_TOOLCHAIN_CANDIDATES $ENV{ANDROID_BUILD_TOP}/prebuilts/clang/host/linux-x86/clang-*
13        LIST_DIRECTORIES true)
14    # Select the latest one
15    LIST(SORT TROUT_ANDROID_TOOLCHAIN_CANDIDATES ORDER DESCENDING)
16    FIND_PATH(TROUT_ANDROID_TOOLCHAIN
17        NAMES
18        bin/clang
19        bin/clang++
20        bin/llvm-ar
21        bin/llvm-nm
22        bin/llvm-ranlib
23        PATHS
24        ${TROUT_ANDROID_TOOLCHAIN_CANDIDATES}
25        NO_DEFAULT_PATH)
26    SET(TROUT_CLANG_PATH ${TROUT_ANDROID_TOOLCHAIN})
27ENDIF()
28
29IF (DEFINED ENV{TROUT_CLANG_PATH})
30    SET(TROUT_CLANG_PATH $ENV{TROUT_CLANG_PATH})
31ENDIF()
32
33IF (DEFINED ENV{TROUT_AGL_SYSROOT})
34    SET(TROUT_AGL_SYSROOT $ENV{TROUT_AGL_SYSROOT})
35ENDIF()
36
37IF (NOT TROUT_CLANG_PATH)
38    MESSAGE(FATAL_ERROR "Please run `lunch`, or define environment variable COQOS_HV_PATH or TROUT_CLANG_PATH")
39ENDIF()
40
41IF (NOT TROUT_AGL_SYSROOT)
42    MESSAGE(FATAL_ERROR "Please define environment variable COQOS_HV_PATH or TROUT_AGL_SYSROOT")
43ENDIF()
44
45SET(_triple aarch64-none-linux-gnu)
46
47SET(CMAKE_CROSSCOMPILING TRUE)
48SET(CMAKE_SYSROOT ${TROUT_AGL_SYSROOT})
49
50SET(CMAKE_C_COMPILER ${TROUT_CLANG_PATH}/bin/clang)
51SET(CMAKE_C_COMPILER_TARGET ${_triple})
52
53SET(CMAKE_CXX_COMPILER ${TROUT_CLANG_PATH}/bin/clang++)
54SET(CMAKE_CXX_COMPILER_TARGET ${_triple})
55
56SET(CMAKE_ASM_COMPILER_TARGET ${_triple})
57
58SET(CMAKE_AR ${TROUT_CLANG_PATH}/bin/llvm-ar)
59SET(CMAKE_NM ${TROUT_CLANG_PATH}/bin/llvm-nm)
60SET(CMAKE_RANLIB ${TROUT_CLANG_PATH}/bin/llvm-ranlib)
61
62SET(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
63    ${TROUT_AGL_SYSROOT}/usr/include/c++/7.3.0
64    ${TROUT_AGL_SYSROOT}/usr/include/c++/7.3.0/aarch64-agl-linux
65)
66
67SET(CMAKE_EXE_LINKER_FLAGS
68    -fuse-ld=lld
69    -B ${TROUT_AGL_SYSROOT}/usr/lib/aarch64-agl-linux/7.3.0
70    -nodefaultlibs
71    -lstdc++
72    -lm
73    -lc
74    -lgcc_s
75)
76STRING(REPLACE ";" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
77
78SET(CMAKE_SHARED_LINKER_FLAGS
79    -fuse-ld=lld
80    -B ${TROUT_AGL_SYSROOT}/usr/lib/aarch64-agl-linux/7.3.0
81    -nodefaultlibs
82    -lstdc++
83    -lm
84    -lc
85    -lgcc_s
86)
87STRING(REPLACE ";" " " CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
88
89SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
90SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
91SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
92SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
93