summaryrefslogtreecommitdiffstats
path: root/recipes-devtools/clang/clang_git.bb
blob: 638096b59140bb2768e1d8a26239a4c4c2c45d61 (plain)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
# Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)

DESCRIPTION = "LLVM based C/C++ compiler"
HOMEPAGE = "http://clang.llvm.org/"
LICENSE = "NCSA"
SECTION = "devel"

require clang.inc

BRANCH ?= "master"
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=4c0bc17c954e99fd547528d938832bfa; \
                    file://tools/clang/LICENSE.TXT;md5=82ed8fe1976ca709bbd81f4f10a48ccd; \
                   "
SRC_URI = "git://github.com/llvm-mirror/llvm.git;branch=${BRANCH};name=llvm \
           git://github.com/llvm-mirror/clang.git;branch=${BRANCH};destsuffix=git/tools/clang;name=clang \
	   file://0001-Remove-CMAKE_CROSSCOMPILING-so-it-can-cross-compile.patch \
          "

SRCREV_llvm = "08709687efd951d1d6c3ad5f8d518129c068c737"
SRCREV_clang = "75805b9d66425462798c88596376b14d69193429"

SRCREV_FORMAT = "llvm_clang"

S = "${WORKDIR}/git"

inherit perlnative pythonnative cmake

def get_clang_target_arch(bb, d):
    target_arch = d.getVar('TRANSLATED_TARGET_ARCH', True)
    clang_arches = {
        "i586"     : "X86",
        "x86-64"   : "X86",
        "powerpc"  : "PowerPC",
        "mips"     : "Mips",
        "arm"      : "ARM",
        "arm64"    : "AArch64",
        "aarch64"  : "AArch64",
    }

    if target_arch in clang_arches:
        return clang_arches[target_arch]
    return ""

#TUNE_CCARGS_remove = "-mthumb-interwork"
#TUNE_CCARGS_remove = "-march=armv7-a"
#TUNE_CCARGS_remove = "-marm"
TUNE_CCARGS_append_class-target = " -D__extern_always_inline=inline -L${PKG_CONFIG_SYSROOT_DIR}${libdir}/libxml2 -I${PKG_CONFIG_SYSROOT_DIR}${includedir}/libxml2 "

EXTRA_OECMAKE="-DLLVM_ENABLE_RTTI:BOOL=True \
               -DLLVM_ENABLE_FFI:BOOL=False \
               -DCMAKE_SYSTEM_NAME=Linux \
               -DCMAKE_BUILD_TYPE:STRING=Release \
	       -DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL=True \
	      "

EXTRA_OECMAKE_append_class-native = "\
               -DLLVM_TARGETS_TO_BUILD:STRING='AArch64;ARM;Mips;PowerPC;X86' \
"
EXTRA_OECMAKE_append_class-nativesdk = "\
               -DLLVM_TARGETS_TO_BUILD:STRING='AArch64;ARM;Mips;PowerPC;X86' \
               -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
               -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
"
EXTRA_OECMAKE_append_class-target = "\
               -DLLVM_ENABLE_PIC=False \
               -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
               -DCLANG_TABLEGEN=${STAGING_BINDIR_NATIVE}/clang-tblgen \
               -DLLVM_TARGETS_TO_BUILD:STRING='${@get_clang_target_arch(bb, d)}' \
               -DLLVM_TARGET_ARCH:STRING='${@get_clang_target_arch(bb, d)}' \
"
#               -DCMAKE_CXX_FLAGS='-target armv7a -ccc-gcc-name ${HOST_PREFIX}g++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -v -I ${PKG_CONFIG_SYSROOT_DIR}${includedir}/c++/5.1.0 -I ${PKG_CONFIG_SYSROOT_DIR}${includedir}/c++/5.1.0/arm-rdk-linux-gnueabi' \
#               -DCMAKE_C_FLAGS='-target armv7a -ccc-gcc-name ${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -v -I ${PKG_CONFIG_SYSROOT_DIR}${includedir}/c++/5.1.0 -I ${PKG_CONFIG_SYSROOT_DIR}${includedir}/c++/5.1.0/arm-rdk-linux-gnueabi' \
#
#
EXTRA_OEMAKE += "REQUIRES_RTTI=1 VERBOSE=1"

DEPENDS = "zlib libffi libxml2 binutils"
DEPENDS_remove_class-nativesdk = "nativesdk-binutils"
DEPENDS_append_class-nativesdk = " clang-native "

do_configure_prepend() {
        # Remove RPATHs
        sed -i 's:$(RPATH) -Wl,$(\(ToolDir\|LibDir\|ExmplDir\))::g' ${S}/Makefile.rules
        # Drop "svn" suffix from version string
        sed -i 's/${PV}svn/${PV}/g' ${S}/configure

        # Fix paths in llvm-config
        sed -i "s|sys::path::parent_path(CurrentPath))\.str()|sys::path::parent_path(sys::path::parent_path(CurrentPath))).str()|g" ${S}/tools/llvm-config/llvm-config.cpp
        sed -ri "s#/(bin|include|lib)(/?\")#/\1/${LLVM_DIR}\2#g" ${S}/tools/llvm-config/llvm-config.cpp
}

do_compile_prepend_class-native () {
	oe_runmake LLVM-tablegen-host
	oe_runmake CLANG-tablegen-host
}

do_install_append_class-native () {
	install -Dm 0755 ${B}/NATIVE/bin/clang-tblgen ${D}${bindir}/clang-tblgen
        for f in `find ${D}${bindir} -executable -type f -not -type l`; do
            test -n "`file $f|grep -i ELF`" && ${STRIP} $f
        done
}

do_install_append_class-nativesdk () {
	install -Dm 0755 ${B}/bin/clang-tblgen ${D}${bindir}/clang-tblgen
        for f in `find ${D}${bindir} -executable -type f -not -type l`; do
            test -n "`file $f|grep -i ELF`" && ${STRIP} $f
        done
}

BBCLASSEXTEND = "native nativesdk"