# -*- coding: utf-8 -*-
#
# Licensed under the GNU General Public License, version 3.
# See the file http://www.gnu.org/licenses/gpl.txt

from pisi.actionsapi import autotools
from pisi.actionsapi import pisitools
from pisi.actionsapi import shelltools
from pisi.actionsapi import cmaketools
from pisi.actionsapi import get

import subprocess

projects = "clang;mlir" if get.buildTYPE() == "emul32" else "clang;clang-tools-extra;lld;lldb;polly;compiler-rt;mlir"
libdir = "/usr/lib32/llvm" if get.buildTYPE() == "emul32" else "/usr/lib/llvm"
lib = "lib32" if get.buildTYPE() == "emul32" else "lib"
libsuffix = "32" if get.buildTYPE() == "emul32" else " "

jobs = jobs = "-j"+ subprocess.check_output("nproc 2>/dev/null", shell=True).rstrip("\n")

NoStrip = ["/usr/lib/clang/%s/lib/linux" % get.srcVERSION()]

WorkDir = "llvm-project-%s.src/llvm" % get.srcVERSION()

def setup():
    #pisitools.ldflags.add("-fuse-ld=lld")
    #pisitools.cflags.remove("-D_FORTIFY_SOURCE=2")
    #pisitools.cxxflags.remove("-D_FORTIFY_SOURCE=2")
    #pisitools.cflags.add("-mllvm -polly -Wno-unused-command-line-argument")
    #pisitools.cxxflags.add("-mllvm -polly -Wno-unused-command-line-argument")
    #shelltools.export("CC", "clang")
    #shelltools.export("CXX", "clang++")
    #shelltools.export("AR", "llvm-ar")
    #shelltools.export("NM", "llvm-nm")
    #shelltools.export("RANLIB", "llvm-ranlib")
    

    if get.buildTYPE() == "emul32":
        shelltools.export("CC", "gcc -m32")
        shelltools.export("CXX", "g++ -m32")
        #shelltools.export("CC", "clang -m32")
        #shelltools.export("CXX", "clang++ -m32")
        shelltools.export("PKG_CONFIG_PATH","/usr/lib32/pkgconfig")
        
        #clang patch
        #shelltools.cd("tools")
        #shelltools.system("patch -p1 < enable-SSP-and-PIE-by-default.patch")
        #shelltools.cd("..")
    else:
        shelltools.export("CC", "gcc")
        shelltools.export("CXX", "g++")
        #shelltools.export("CC", "clang")
        #shelltools.export("CXX", "clang++")

    shelltools.makedirs("build")
    
    shelltools.cd("build")
    
    if get.buildTYPE() != "emul32":
        shelltools.system("sed '/^diff.*inline-asm-memop.ll/,$d' 46505b3cbfc5.patch | patch -Np2")
        pisitools.cflags.add("-m64 ")
        pisitools.cxxflags.add("-m64")
        options = "-DLLVM_TARGET_ARCH:STRING=x86_64 \
                   -DLLDB_ENABLE_LUA=OFF \
                   -DLLVM_DEFAULT_TARGET_TRIPLE=%s " % get.HOST()
                          
    
    if get.buildTYPE() == "emul32":
        shelltools.export("CC", "gcc -m32")
        shelltools.export("CXX", "g++ -m32")
        pisitools.cflags.add("-m32 ")
        pisitools.cxxflags.add("-m32")
        shelltools.export("PKG_CONFIG_PATH","/usr/lib32/pkgconfig")
        options = "  -DCMAKE_INSTALL_PREFIX=/emul32 \
                     -DLLVM_TARGET_ARCH:STRING=i686  \
                     -DLLVM_ENABLE_ZSTD:STRING=OFF \
                     -DCLANG_DEFAULT_PIE_ON_LINUX=ON \
                     -DLLVM_DEFAULT_TARGET_TRIPLE='i686-pc-linux-gnu'"
    
    
    cmaketools.configure("-DCMAKE_BUILD_TYPE=Release \
                          -G 'Unix Makefiles' \
                          %s \
                          -DLLVM_ENABLE_PROJECTS='%s' \
                          -DLLVM_LIBDIR_SUFFIX=%s \
                          -DLLVM_ENABLE_FFI=ON \
                          -DLLVM_BUILD_DOCS=OFF \
                          -DLLVM_ENABLE_RTTI=ON \
                          -DLLVM_ENABLE_EH=ON \
                          -DLLVM_BUILD_LLVM_DYLIB=ON \
                          -DLLVM_LINK_LLVM_DYLIB=ON \
                          -DLLDB_USE_SYSTEM_SIX=1 \
                          -DLLVM_INCLUDEDIR=/usr/include \
                          -DLLVM_ENABLE_ASSERTIONS=OFF \
                          -DFFI_INCLUDE_DIR=/usr/include \
                          -DCOMPILER_RT_USE_LIBCXX=OFF" % (options, projects, libsuffix), sourceDir=".." )

def build():
    shelltools.cd("build")
    #shelltools.system("ninja")
    cmaketools.make(jobs)

def install():
    shelltools.cd("build")
    #shelltools.system("DESTDIR=%s ninja install" % get.installDIR())
    cmaketools.rawInstall("DESTDIR=%s" % get.installDIR())
        
    if get.buildTYPE() == "emul32":
        pisitools.domove("/emul32/lib32/", "/usr/")
        pisitools.insinto("/usr/include/llvm/Config/","%s/emul32/include/llvm/Config/llvm-config.h" % get.installDIR(),"llvm-config-32.h")
        pisitools.insinto("/usr/bin/","%s/emul32/bin/llvm-config" % get.installDIR(),"llvm-config-32")
        pisitools.removeDir("/emul32")
        #pisitools.remove("/usr/lib/python3.8/site-packages/six.py")
   
    shelltools.cd ("..")
    
    pisitools.dodoc("LICENSE.TXT", "README.*")
