Sync Mk with ports
[dports.git] / Mk / Uses / llvm.mk
1 # Provides support to depend on LLVM
2 #
3 # USES=llvm supports two kinds of arguments:
4 #
5 # * mode
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
10 #
11 # * version
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
16 #
17 # An example usage might be:
18 #         USES=   llvm
19 #   or
20 #         USES=   llvm:13,build
21 #   or
22 #         USES=   llvm:min=14,lib
23 #
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
30 #
31
32 .if !defined(_INCLUDE_USES_LLVM_MK)
33 _INCLUDE_USES_LLVM_MK=  YES
34
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
38
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}
44 .    endif
45 .  endfor
46 .  if empty(_LLVM_MK_MODES)
47 _LLVM_MK_MODES= build
48 .  endif
49
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
56 .      else
57 _LLVM_MK_VERSION=       ${_ver}
58 .      endif
59 .    endif
60 .  endfor
61 .  if empty(_LLVM_MK_VERSION)
62 .    if ${LLVM_DEFAULT:N1[0-9]*}
63 _LLVM_MK_VERSION=       ${LLVM_DEFAULT:S/0$//}
64 .    else
65 _LLVM_MK_VERSION=       ${LLVM_DEFAULT}
66 .    endif
67 .  endif
68
69 # === handle constraints ===
70 .  for _constraint in ${_LLVM_MK_VALID_CONSTRAINTS}
71 _version=       ${llvm_ARGS:M${_constraint}=[0-9]*:S/${_constraint}=//}
72 .    if !empty(_version)
73 _LLVM_MK_CONSTRAINT_${_constraint}:=    ${_version}
74 .    endif
75 .  endfor
76
77 .  if !empty(_LLVM_MK_CONSTRAINT_min)
78 .    if ${_LLVM_MK_CONSTRAINT_min} > ${_LLVM_MK_VERSION}
79 _LLVM_MK_VERSION=       ${_LLVM_MK_CONSTRAINT_min}
80 .    endif
81 .  endif
82
83 .  if !empty(_LLVM_MK_CONSTRAINT_max)
84 .    if ${_LLVM_MK_CONSTRAINT_max} < ${_LLVM_MK_VERSION}
85 _LLVM_MK_VERSION=       ${_LLVM_MK_CONSTRAINT_max}
86 .    endif
87 .  endif
88
89 # === define helpers for the dependencies ===
90 .  for _ver in ${_LLVM_MK_VALID_VERSIONS:N1[0-9]}
91 _LLVM_MK_SUFFIX_${_ver}=        ${_ver}0
92 .  endfor
93
94 .  for _ver in ${_LLVM_MK_VALID_VERSIONS}
95 _LLVM_MK_SUFFIX_${_ver}?=       ${_ver}
96 .  endfor
97
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}}
103
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}
109 .  endfor
110
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}
117
118 .endif