1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
6 PYTHON_COMPAT=( python3_{6,7,8} )
7 inherit cmake-utils llvm llvm.org multiprocessing python-any-r1
9 DESCRIPTION="OCaml bindings for LLVM"
10 HOMEPAGE="https://llvm.org/"
11 LLVM_COMPONENTS=( llvm )
14 # Keep in sync with sys-devel/llvm
15 ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC AVR VE )
16 ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM BPF Hexagon Lanai Mips MSP430
17 NVPTX PowerPC RISCV Sparc SystemZ WebAssembly X86 XCore
18 "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}" )
19 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
20 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/?}
22 LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
25 IUSE="debug test ${ALL_LLVM_TARGETS[*]}"
26 REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )"
27 RESTRICT="!test? ( test )"
30 >=dev-lang/ocaml-4.00.0:0=
32 ~sys-devel/llvm-${PV}:=[${LLVM_TARGET_USEDEPS// /,},debug?]
33 !sys-devel/llvm[ocaml(-)]"
38 test? ( dev-ml/ounit )
41 # least intrusive of all
42 CMAKE_BUILD_TYPE=RelWithDebInfo
45 LLVM_MAX_SLOT=${PV%%.*} llvm_pkg_setup
46 python-any-r1_pkg_setup
50 # Python is needed to run tests using lit
53 cmake-utils_src_prepare
57 local libdir=$(get_libdir)
59 -DLLVM_LIBDIR_SUFFIX=${libdir#lib}
61 -DBUILD_SHARED_LIBS=OFF
62 -DLLVM_BUILD_LLVM_DYLIB=ON
63 -DLLVM_LINK_LLVM_DYLIB=ON
64 -DLLVM_OCAML_OUT_OF_TREE=ON
66 # cheap hack: LLVM combines both anyway, and the only difference
67 # is that the former list is explicitly verified at cmake time
68 -DLLVM_TARGETS_TO_BUILD=""
69 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
70 -DLLVM_BUILD_TESTS=$(usex test)
72 # disable various irrelevant deps and settings
74 -DLLVM_ENABLE_TERMINFO=OFF
76 -DLLVM_ENABLE_ASSERTIONS=$(usex debug)
80 -DLLVM_HOST_TRIPLE="${CHOST}"
83 -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND
88 use test && mycmakeargs+=(
89 -DLLVM_LIT_ARGS="-vv;-j;${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")}"
92 # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
93 # also: custom rules for OCaml do not work for CPPFLAGS
94 use debug || local -x CFLAGS="${CFLAGS} -DNDEBUG"
95 cmake-utils_src_configure
97 local llvm_libdir=$(llvm-config --libdir)
98 # an ugly hack; TODO: figure out a way to pass -L to ocaml...
99 cd "${BUILD_DIR}/${libdir}" || die
100 ln -s "${llvm_libdir}"/*.so . || die
103 local llvm_bindir=$(llvm-config --bindir)
104 # Force using system-installed tools.
105 sed -i -e "/llvm_tools_dir/s@\".*\"@\"${llvm_bindir}\"@" \
106 "${BUILD_DIR}"/test/lit.site.cfg.py || die
111 cmake-utils_src_compile ocaml_all
116 local -x LIT_PRESERVES_TMP=1
117 cmake-utils_src_make check-llvm-bindings-ocaml
122 cmake -P "${BUILD_DIR}"/bindings/ocaml/cmake_install.cmake || die
124 dodoc bindings/ocaml/README.txt