1 # Provides support to depend on LLVM
3 # USES=llvm supports two kinds of arguments:
6 # <none>: defaults to build
7 # build: add a BUILD_DEPENDS on chosen llvm-port
8 # run: add a RUN_DEPENDS on chosen llvm-port
9 # lib: add a LIB_DEPENDS on chosen llvm-port
12 # <none>: defaults to ${LLVM_DEFAULT}
13 # number: use explicitly the specified version
14 # min=number: use specified min if ${LLVM_DEFAULT} is lower
15 # max=number: use specified max if ${LLVM_DEFAULT} is higher
17 # An example usage might be:
22 # USES= llvm:min=14,lib
24 # The following variables are exposed to be used in the ports tree at the moment:
25 # * LLVM_VERSION version chosen from the arguments to llvm.mk
26 # * LLVM_PORT chosen llvm port
27 # * LLVM_CONFIG llvm-config of the chosen port
28 # * LLVM_LIBLLVM libLLVM.so of the chosen port
29 # * LLVM_PREFIX installation prefix of the chosen port
32 .if !defined(_INCLUDE_USES_LLVM_MK)
33 _INCLUDE_USES_LLVM_MK= YES
35 _LLVM_MK_VALID_VERSIONS= 7 8 9 10 11 12 13 14 15
36 _LLVM_MK_VALID_CONSTRAINTS= min max
37 _LLVM_MK_VALID_MODES= build run lib
39 # === parse mode arguments ===
40 _LLVM_MK_MODES= # empty
41 . for _mode in ${_LLVM_MK_VALID_MODES}
42 . if ${llvm_ARGS:M${_mode}}
43 _LLVM_MK_MODES+= ${_mode}
46 . if empty(_LLVM_MK_MODES)
50 # === parse version arguments ===
51 _LLVM_MK_VERSION= # empty
52 . for _ver in ${_LLVM_MK_VALID_VERSIONS}
53 . if ${llvm_ARGS:M${_ver}}
54 . if !empty(_LLVM_MK_VERSION)
55 BROKEN= USES=llvm:${llvm_ARGS} contains multiple version definitions
57 _LLVM_MK_VERSION= ${_ver}
61 . if empty(_LLVM_MK_VERSION)
62 . if ${LLVM_DEFAULT:N1[0-9]*}
63 _LLVM_MK_VERSION= ${LLVM_DEFAULT:S/0$//}
65 _LLVM_MK_VERSION= ${LLVM_DEFAULT}
69 # === handle constraints ===
70 . for _constraint in ${_LLVM_MK_VALID_CONSTRAINTS}
71 _version= ${llvm_ARGS:M${_constraint}=[0-9]*:S/${_constraint}=//}
73 _LLVM_MK_CONSTRAINT_${_constraint}:= ${_version}
77 . if !empty(_LLVM_MK_CONSTRAINT_min)
78 . if ${_LLVM_MK_CONSTRAINT_min} > ${_LLVM_MK_VERSION}
79 _LLVM_MK_VERSION= ${_LLVM_MK_CONSTRAINT_min}
83 . if !empty(_LLVM_MK_CONSTRAINT_max)
84 . if ${_LLVM_MK_CONSTRAINT_max} < ${_LLVM_MK_VERSION}
85 _LLVM_MK_VERSION= ${_LLVM_MK_CONSTRAINT_max}
89 # === define helpers for the dependencies ===
90 . for _ver in ${_LLVM_MK_VALID_VERSIONS:N1[0-9]}
91 _LLVM_MK_SUFFIX_${_ver}= ${_ver}0
94 . for _ver in ${_LLVM_MK_VALID_VERSIONS}
95 _LLVM_MK_SUFFIX_${_ver}?= ${_ver}
98 # === define variables to depend on and export ===
99 _LLVM_MK_PORT= devel/llvm${_LLVM_MK_SUFFIX_${_LLVM_MK_VERSION}}
100 _LLVM_MK_LIBLLVM= libLLVM-${_LLVM_MK_VERSION}.so
101 _LLVM_MK_PATH= llvm-config${_LLVM_MK_SUFFIX_${_LLVM_MK_VERSION}}
102 _LLVM_MK_PREFIX= ${PREFIX}/llvm${_LLVM_MK_SUFFIX_${_LLVM_MK_VERSION}}
104 # == add actual dependencies ===
105 _LLVM_MK_PATH_lib= ${_LLVM_MK_LIBLLVM}
106 . for _mode in ${_LLVM_MK_MODES}
107 _LLVM_MK_PATH_${_mode}?= ${_LLVM_MK_PATH}
108 ${_mode:tu}_DEPENDS+= ${_LLVM_MK_PATH_${_mode}}:${_LLVM_MK_PORT}
111 # == export config ===
112 LLVM_PORT= ${_LLVM_MK_PORT}
113 LLVM_CONFIG= ${_LLVM_MK_PATH}
114 LLVM_LIBLLVM= ${_LLVM_MK_LIBLLVM}
115 LLVM_VERSION= ${_LLVM_MK_VERSION}
116 LLVM_PREFIX= ${_LLVM_MK_PREFIX}