From 0b13ff7bf9367512e31318151467330feb910bc0 Mon Sep 17 00:00:00 2001 From: MoSafi2 Date: Tue, 23 Jun 2026 12:41:16 +0200 Subject: [PATCH] Add libclang_mojo recipe --- recipes/libclang_mojo/README.md | 137 +++++++++++++++++++ recipes/libclang_mojo/image.jpg | Bin 0 -> 90100 bytes recipes/libclang_mojo/recipe.yaml | 76 ++++++++++ recipes/libclang_mojo/test_cindex_smoke.mojo | 7 + 4 files changed, 220 insertions(+) create mode 100644 recipes/libclang_mojo/README.md create mode 100644 recipes/libclang_mojo/image.jpg create mode 100644 recipes/libclang_mojo/recipe.yaml create mode 100644 recipes/libclang_mojo/test_cindex_smoke.mojo diff --git a/recipes/libclang_mojo/README.md b/recipes/libclang_mojo/README.md new file mode 100644 index 00000000..50ec0c46 --- /dev/null +++ b/recipes/libclang_mojo/README.md @@ -0,0 +1,137 @@ +# mojo_libclang + +High-level Mojo bindings for LLVM `libclang`. + +`mojo_libclang` provides a Python `clang.cindex`-style API for source-code tooling in Mojo. + +## Highlights + +- Exposes most of `libclang` API for `C`, `C++`, and some `obj-C` +- Parse C and C++ source files with libclang. +- Inspect cursor spelling, kind, location, extent, parents, and type. +- Read diagnostics with formatted messages. +- Query canonical types, pointee types, result types, fields, and declarations. + +## Example + +```c +//math_api.h +typedef struct Point { int x; int y; } Point; +int add(int a, int b); +``` + +```mojo +# main.mojo +from clang.cindex import CursorKind, Index + + +def main() raises: + var index = Index.create() + var tu = index.parse("math_api.h") + + for diagnostic in tu.diagnostics(): + print(diagnostic.format()) + + for cursor in tu.cursor(): + if cursor.kind() == CursorKind.FUNCTION_DECL: + print("function: ", cursor.spelling(), sep="") + elif cursor.kind() == CursorKind.TYPEDEF_DECL: + print("typedef: ", cursor.spelling(), sep="") +``` + +```bash +pixi run mojo run main.mojo +``` + +## Installation + +Install Pixi: + +```bash +curl -fsSL https://pixi.sh/install.sh | sh +``` + +Create a new Mojo project and add the package channels: + +```bash +pixi init clang-demo +cd clang-demo +pixi workspace channel add conda-forge https://conda.modular.com/max https://repo.prefix.dev/modular-community +``` + +```bash +pixi add mojo libclang_mojo +``` + +## Developing From Source + +Clone this repository and install the development environment: + +```bash +git clone https://github.com/MoSafi2/mojo_libclang.git +cd mojo_libclang +pixi install -e dev +``` + +Run the wrapper test suite through the local shim: + +```bash +pixi run -e dev run-test test/test_translation_unit.mojo +``` + +For build-only checks: + +```bash +pixi run -e dev build-test test/_ffi_layout_tests.mojo +``` + +### Regenerate Low-Level Bindings + +Regenerate only when updating LLVM/libclang +coverage or changing ABI handling: + +```bash +pixi run -e dev generate +``` + +Generation updates: + +- `clang/_ffi.mojo` +- `test/_ffi_layout_tests.mojo` +- `shim/libclang_mojo_shim.h` +- `shim/libclang_mojo_shim.c` +- `shim/libclang_mojo_shim.so` + +Do not edit generated low-level files by hand, either update the generator or +add a deterministic patch. + +## Packaging + +This repository builds the conda package `libclang_mojo`: + +```mojo +from clang.cindex import Index +``` + +The staged Modular Community recipe lives in +`packaging/modular-community/libclang_mojo/`. To mirror the recipe install +layout locally: + +```bash +pixi run -e dev build-package +``` + +To build the staged recipe for a prefix.dev channel: + +```bash +pixi install -e package +PREFIX_CHANNEL=your-channel pixi run -e package render-recipe +PREFIX_CHANNEL=your-channel pixi run -e package build-recipe +``` + +Upload is explicit and only uploads existing `.conda` artifacts from +`dist/conda/`: + +```bash +PREFIX_CHANNEL=your-channel PREFIX_API_KEY=... pixi run -e package upload-recipe +``` diff --git a/recipes/libclang_mojo/image.jpg b/recipes/libclang_mojo/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3a2a3e1cc66e5d6555a6301143878f5e89fa26c GIT binary patch literal 90100 zcmbTe1zZ$s*f+d@fFgo)NGK?cihz`Wi1eYQOF&8K25F@vq!lEWhGnH2lz<>&qo1IgqJkoVAOr*u2m$y9IvN1+gRY{WprRmO zMMXuucI_$}I_?eh>(|kVuyHVPNr}nHNQp^EZr{C6eVc-Tl7xhYjh5jd6AKFqIW-42 z`=clKnOPpe8$q~s?Hc-Zbix}q2p`=cx%24%{CD&Xgmv}GeXv#*MS@IZh{aIkdP3sAR!}PxdPnn2>cGZf`yEIhlvjb zM_Ln=!VLG3Yhc_}%4b>M@nkxd?=owdyIn)WCmRg22U_!cq9>CkO*wAkWYWN+?q}`v{GRmL;B?Qxetw>N;RLKmlSj}iU=Q7oeC1(28x&v2A4?x9@zv1}*cr0{oC{8Qoy$NumTR%6OTu{X0s)@_Q{e)Z7xBXC z!`n+pgbUWcaNzkhtCoZ-$BXAMs$LGIS5$WGQp3GBF4~|%H9taT*(i8B6UbKkO3jPYjX^fO;D5`}+m}-ls$4Jni{d*!+cnz`Ox%Z*X?|g`HZbxrN?2yZN5C?msRpK(qA*ircx1P?@Z)W`x0LE=J zyo}yf1hk1|yGNe66vKwqLiSAb}B{SN)8%pG5A5_Nd=V z$@1&mR}+w5wvtnU`*XQa+HGDZybW&dfV&K{y!`t$_Ft#z-*m?0)U?>x>}`+~0K_P~ zc9|mJ#0!Gu)ar=8AT3aiCkxmie+Z`k`hIH4#S)(_^7-+y1jCh%V2(I7G+3k%hR-1hr!|gzUfNZm|Nxvy+YWw`{$ys3jiXZg(@ z!J^T~TZ5B=zIV%8OWC#$S<9XIM>EREXLfy*BXgw%-gf+jd|Yrc{bA_*8@CX|{{w@7 zS$<=n^RFc1YX3u;p#g5zxzlpysGLZMGmQy1nE;V}?Ef9hu;ZUkY^)hz4(Ce>7$Coy z(Ldz(Sl|Nx-v;l@g zSkXe4G~RZ8`C=*EhpG93&`iU^r80vNSrV!t>m(tkg|3jee{Thp1EcDo4t`@J)a*{} zdYdGm+L>-mhE_XTk;-3BEl9EN5$6{?$~e3vdQ1`lBAIYmoY|J~Co+?T&M3Bv1J&{~ zMwT-uNnlJOcI+ciZp>(Z$*VTeZP9h=XT~`4uX1^OXfm!GtLxkl9M`AFc;5^wa2Z(w zZjy4+KQ45`|6%d)EgpBJ|90kV{}_FVUgmAn6;am?Pg6lY$n0oZr>`#SYetW;o?p4r zd>L2%ZD_RMYF)w%#`?LB^rxt-xuh0OOmXCdKkxeUd&|YAj`h*0o+vzf^duU&~>tB@4g}&}Fp6W@YM4}YxqKDD9!z8x|Si^Y= z?!HPXSZ&KlCQsBSmIP&ZzX^R^N+g5iJqc0e)1JBap*`!lk(InmHK_bMnl$LM2hkq!dWTo&lVy z1pBCbyS-6EPqvs#d$FHn7d3Hx3EuA2r*hRn<;?rE>v04^Ybokr#3eDrr(Q8Rq$>Y# zje#54z+i;Rsu(vGg1qx3n2HV+uZ$-WQI|L>(vhg5GJ7&#s!!$9t?9abdf0p6CT*V# z#;h-cB(iih)qGShNgkr6q?pMSRd;`)rTgxB+x?@ElwtAm5vYb#TjYh?_KjzKW_z{O zKHQNN<2$|Ae4ZK7ZQIL@H_5Z%1;pi=c&U^1SPPL(=SNjc__ftr%-fTH>y;t7d6fe- z4sX?oxi_M>b6+-7uTYIww$K}OKZmi1cPXqMdL8Sdz?`7`s`Jzl2oy;!-l5Kvu&>-> z!(bEPST;KIDcj!}AyC~LyqzX4+k_cw&@)isFYF}Q#@ku?R#3$&E~6(pg+r;M-PATd zxXcvWjI*vvoLZsRBfhfGo2i)EV^lx~`k|+$KSW~4x z1ZQ*k(D{d^E6;ISvh@TM6Dd%3OPV^?sAo(N;E&%+!;uF}k_0~CMna?8Skr>~un>e8 zi}=1l_fOVLhcvBShj^_9JUAs!)mx?656AZ*JL{}Jq}6bz+eAiU#a73!(2ZN;p zWwFF-4P_h6D3bY27@M2Wu>kg~jHlJ1?n9e@OS`;y1gbU&4@Wm*8MFQ9TUxOgAZfAN zo2}Y;eCe;H>p$mr3MI#6}_w6{grBDryA#)aexG0DJ zr*p($Tp$AYSA*b>e&F|<^wob!hoI5w|9K}T-~$m|w!Ho@T=V`D(8oXz$(2I*n`?T; zsYrRp+F$x9k@{`oD*Z>9UPd*e(>n9qCAxDpZ`V@l9LT_?5pInSkYc!6_6Ex4X0n-8 zoqhLjM&C0u^dh}e;^!uE=a6RakTTDKLxP9U&isW4buVyBYEfr7g6rNUNWZo0ECA`-4}~euY0^ z%_WV>R864tVHT00Y$~;jyXQAMJdo6PUt|z8s!=i3Q@T6Lpi}PBYgyBs>+pf!uer!~ z_u-5>sok4KH6_zVVaj%&-DWV}0_|#(rNg#zjAGS~C7c-g7L#q}D&1=JJ3hltof-r@0iG`BF2iF;;E1@=IIJe=3hdeXMQv#Nk}*lTU>zVP7O zn4h+vwt$=fg4~OjAWj6yc%N-;m*3`Spf?f_d7%HY-0LNnX9sys!k$~kR2Q%_<$|zZ zr68m%mrQ3q5jJk{T>w{J>oN@DT`+S05Thq<_8)jWjjdjCNs-RutZ-`|49CNnzji#f zgv3967I+MfhUL_{IE~@MW3+#my(iyK0zLqS;c<8$fVIx=`kQZjhRch`;~>^wEtOM& ztaUN=0R;cyY?T;`K|e<2nlh)XR`eA`*5r=0%gyV*tjNYYQ}@}I7gG}$ySw*|jC0b` zp4LtNJQ(A$SBNDBWp?|gd~Lh&+GHkTPv6}9nkY?D$raUzu}Az~P|B6sXokF*#`~0o zh;qBp70@-Pl6-w8^%!f+XH7#}@PX{7f$1S$X?1@k+2EVuj+kN$sSRGz4r2UGxkDUz z;_5v$oNYAE98v6eLmh8i5yKTDzLDZW7x0uFZ-Vy*%Sf)_7F$M_07Xx$pYqKRe>w~ZmW+w#Hofp;$O{l zuI0HMP&G_aR62ZRK8fC{jp`Zue(@omXU4v42ZLO=B(?z#25R_fU5qtvyF!p{Ky`6| zx5@jKy-XYm8YxXm)OP#5Xv4m5uUQRV$fQBYc@k-IG)AYqYTu8&Bf$Ki^6gHj_fKpm zdENkWZ>Y0;{T4L1zQrE(y%Y7w^m3hUYPAXECb9x5cI@uDNnMQn`r4apMQ;ZKdiC_e z{-Q+|1-3-nrK*T5;Zc|jN93WBs?$QwOdIMlYo|gJ3@j6zC!D+AVDKG?_+(Tcg8&|X zI7evgA0R(b=0XPlj#0<|KLWHw@nJ65?r;EIv{^1hxO!ZUlPxTN?eV|O2>6&!;(mzm zGz~l*^_#K0g$c2Uk!2#3l$3e8a|Pj# ziSJExC!pw$d4IlX!&Bj@QCUhYyn>N~>7@nJDvlmoRKinJ@?LZ0H4TuI6kRt}vRsi0 z=@PBYo#9Aoi>G0!{~W=}5P1z0+G^@ZyD>$Cs!Rh!Lx?gy8`pFX*SBi>j`Jkt>vqv5}d#pCRe406XE-UIrKW zl*V&;1+R6zjRUkLiI14WajShtpzHoG4sD^b2%qKRSQ3`VDwfe?93?+vDGk!4>S()w z8mK$VbOEmyjq+jQh?f|FW}xmZZStkBOY`)%Mx8wcmVEA&6bJn3614t$1PV*|SP^z@ zcdYE2Dfe7g%NlK0_}BP_A%BV1TBoS^nc^4ExNcoHv?5_Uqt*;uVV_yEoq zU>3B?%mKdC6u<$LH`7FJBQ#Kf-NxucAE0N|$Nmg?S;hOFi%ZqoAqX(g-{At8CeSlx z#hz%~jyF~|-HhwohVMzI=EeEJw%4%e##Ni5{mEp$rdgoz&sD+bdvnr!r+ubtrv3GpDMj zc5+2AAc(1`BGFo_-^W}R;$!g8+z}(Q8(n_dGlc|JljS-m<^v&#w(1&R6sjB7;4S;H zdIZ8T3KKvH0x*<79r0>S$ONf{K23-?Ojp|_)&@$r67DzE14S;6VffhhZ7(onL7&hW zYjd64&-&%E9Fy#X|A+L)iGp%uo_Ui#WBXX+iW_~{wL6st!kp_k2!js00ktKfwPn}Z zBa@{KblKUt9>)97WAo$sK4MQyj71l}&L>XhC@(N@7-`#!Wb*p9+0N7&q*#=0ibF!R zbI@oI5NWO_>w3}U`hAWndeQ9yQb;FCpH!a)K@T2T&JFo}@5OddI4;8ZIFkdHzt*uG z{Vo_VX&_b%227X>yz%c0+PQfF*OF((2at|}=jQ>a&;Wb^0usw7QuRc+oJn(GJp{e~ zj`99SkdUryVWB)mm$4fbPeUQoI`uWp9=}X`>^f#%U%e8)(JM0#{%HZ_WHwZm+(jM* z!-x?~HqBOFYGQC9`GZvKjQOGjO}uY! zv>BYPK-@aMu*jnyH9{Yo{p0JXRuI`_g!r^8eGm=+3#DkiR=)O+RbBM>u@-QEhe~yI%kvFSmG6JnO#V{h@&cKB9lGtm4 z@Ha)XgAr9K9^I^R12MD`1T%xZ!c6_8yMdc#(hkwDg;xcH(h+GA6EgmJZl#138uIAt zcbP|5p?6neTy%1Z3G7)*nvA&KKfK-G9gw_7y$)5yRglLalD*EO=U5vu+Zb8Q@c_k^ z^8tqPPA|e;*emkV;1s@t?!)9Vt6XU%c?f5hMP$jVMhS^|0Q~hI&vAO}$-&d+7t#fn z4QRNiyBq`rfO&~O{^sG$!BP3IsK=#;?n3pJpbGO_(4TeAiQR`?uACcxKEKgIasm4b>b(!z$<5 z!uCC6-7+|_)-y(~*-DI5;WH9fL|M@`ca7i5YDefpo1TV*+WSN%#1!x1H7_)^1N5vu zre|V8LJNp=#!RR)0H~RG=h~A#tf8W)l2-#;sX}v{vi^oQSx&JXv1XFr4y*Nax4OL( zum>)H^{Nvft6(pP>yN}Ga>_)uFTCX+E90tacTQ+1AN6c7_M9?-#%{6xvfuJyCC3tv z3}0PsxMWP70z(}%b|X#R+K)1gB20%JgppLn zR<%npBmdd-Mz#C>;pocJH%^SQ0Wo}ISxi-3YYxPZNbt?9;#q9BBVS!o_Q6bxiQ)0t}eW&;%TH;7LWG z-speKV_g#fV%pLI@SH!b9>OK#`51}7kWY_5IPbJyA$$06nV$mI3*ZWez~`p*ui4xH zCJfXEoN;afM#4u7;W<%3LAtAuW^;VT!2XD@ooXV}vC_hP0)NE!(P$wQu@f#Se)We~ zF%XtWV)5Wk0%;hGvL(1rHtcq3a0Elxc(#iFu*#y3str|Of^d7z%`{X72~Z}p`gU-l ze&lHO5lFI#M2p!AwpZX>nGg0%S69s)H6sx~7h{mp#zaaN?uFVPq0@{IsJR3GPKi*hYx+&Lp zb?21{sTQqmTn`HgD2~G7anF-Rd4FXcOwwCMSbIH;u72KU+LI==+VSznA9Mb&K23d0 zB%kj5Y-&QhD3O$?7peIIMsGxj=2Wb$8RlaVMSdbk=6uz$l1d0N1(6zduwY_Bd>}QI z?i}QFM<9zM5LBIq?G~}Yf%u$)2Qh(zr{`Oq;1&e+{-v31c@vLyjhwXMLFy$%rv=GnOpVmc z;6%d4S&b5pdPSdxy}%#HKn}bRInjM zJ@fjnUTNsIM^)AC+i-e}EA6g@7TDh&-8v*h*aI2;U zfH|DE|Mr2Ww*RaiJn#G18$RZ!lX{yAT$(HOyH*j-Yv-03&an))z-)d50s=&ScC7IhukjQO0lswrKXlHP;2DY*le; zoD8O~L+VjO+FT z+3lY7hutd}u-+XErZ1b^hz_41ar!!elzw*i7hHIWN3BMDh>gOgb933cFxaNv@UP4| zqpjW0P=alIE^QH96e$|LR{5aAUf$Sn`e6|s`(Ag{$m@cQE#g`?l}O@VA1g<@fC1yk zh6QwII?SqyamAl2KKvqXnEdMVw3T1%US{|OO?zsy{LC{HS9t)0w5zMyR;^<;2!~1v z)M58ZIA&b=gCuI(-5s!mN_Zc1W`5UEb*s!!QL-G%pP#=*=`)e;CEd4}{H$?4(L}ck zv0%N0X)09P?>d(yNIvQF=#KH=71i5&twM+;;#~i@O9Z?T3*)tGlU2um@K9P_CD5z3 z(r3ayBRxS+TEFq`N7TZN`3ljJ6a)F)*QpWK-=@{(d%ViUG$uG%s~YS`j& zE1lhwE`nu7j7_Z8#gbbI#X@;Jh?A&PHy$76KS`;y^|pY$E)$cDkt=5Y#}vGH`^jxc z8-^a0j@Vp6HUFpffKo@vJb}?R4Aus*fe8w-tZJc=EuQWH5UBPc{Xg>e_#Ei?AxZ+~ zPo-;cr3@R{-Ok`sPKoZCs+RW%zcN z)xh=D-FXER-5C~0DQ`!yytpHmV{-p2zPa-7(_p^aRg}K&N1)y-!AtS{+M7M?MEkAx zxlodUYPTcM3lAC;rW@bZV#uYt)*uzg+v*Q6raLGp4)W!0m{D;II(zcCCt7af{nFtm z$O}%sniMV%-Lj^T#WKf5;b8yeqf7(6+I*(y{-4L+s7~NMSYD8UXZ8E z(r)(DTPHQxO^dB`L8fGvV-QB;3^GNgmM(iY%l5VJr~iXuFi$c>B&N2gMY7gj&GnUc z3kwr?%UCM-TV)rDk@5L;b=I~8S9L))e$-$uND=e zNOTCTG3|3H;HACgD~+MmBpwht*xdPY1maVD-m7%)!>j0otu%8rhu$KOMp}L)hqktT z|CILR8yhT8t82!u9}WJqTJP*VK$V?Tcm;;Z#68O*6d~pHs4f<&gByZntaj7C#*c+| z&OJa?wsIGiwz@-wth3r=Ogq4nmu`*iS08F2f2*~ahA_M@PJ!DqQOx93o7(|5y>fq3 z>~%#LgfQyGG+R3J!aOJTBSZQA>MSI@bi>4)@d?Nf@ADuf#CUAO7O0?YmemMhS%;w!YXrMJ%Mj6F zv|CZSgFf^={w>>nCDrBh-Z|ybujH$%1w)6r+zh<^DV$>7naTRefeE2)4E7Q8Pq;=c zLP}xUQyHdgYbML-<>bp5%6cl1WjSgaNNIKJ8$27G>$|YAm4?H`u%RPRJ-rsogv+NI z++2kav-c=IW97HE)8?LLd-OLb-8ath-drK}FFXPn9`j^hzc3{K{*G&Qx>6u?#BxC5wWkXcDW0SWZ%l{Cv42U zLuYC)+{0`t|D2yHLD9zC7LTG9l`2d`=I#T)Ir9zEcA*bD@G_sLOW|{&y&Fp5+W=f% zRq_XAN-C@jMP*LU-fjX9$)gp zJe|{RS8IDMt?4&Yg>J3ABM-12&C|fvn0@ylJ$Pc%n@0|AqZiHG|JHg#&LPO5x5A@I zU%H#oAt#e%rmL^)-cKaN)CP;_4e<#o@Sq4(f+Ywy4W~3=D@6=PKDi6Z2pKDk0Mxn6 zGiLNxzPdX;>G`=IJ}5k&t)7#V<4C<-V5bP8*BX!jAqt8=pRJ`@pDrS5?|%{{h^#-L zh~WExCl8G5eb-E-hgd|5M|o{-tW)Tfz98CsZGM-M*N&leod^e!@^nV7>Q7|IfYD=` zhr;M1iMF47tKuI*{Crsi)uX_#P|WgpWmU5HNv`GL(j?j_w.lMbr>iJ&T9G@b&> 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 z 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 UQ29_m5*SM$DZ%54-;dA#12+`lhyVZp literal 0 HcmV?d00001 diff --git a/recipes/libclang_mojo/recipe.yaml b/recipes/libclang_mojo/recipe.yaml new file mode 100644 index 00000000..0ff53d2c --- /dev/null +++ b/recipes/libclang_mojo/recipe.yaml @@ -0,0 +1,76 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json +context: + version: "0.1.0" + mojo_version: "=1.0.0b2" + llvm_version: "18.*" + rev: "a14c2ee9a576463dbd5739e80e66407e94263c5d" + +package: + name: "libclang_mojo" + version: ${{ version }} + +source: + - git: https://github.com/MoSafi2/mojo_libclang.git + rev: ${{ rev }} + +build: + number: 0 + script: + interpreter: bash + content: + - | + set -euo pipefail + mkdir -p "${PREFIX}/lib" "${PREFIX}/lib/mojo" + if [[ "$(uname -s)" == "Darwin" ]]; then + "${CC}" -dynamiclib \ + -I"${PREFIX}/include" -Ishim \ + -o "${PREFIX}/lib/libclang_mojo_shim.dylib" \ + shim/libclang_mojo_shim.c \ + -L"${PREFIX}/lib" -lclang \ + -Wl,-rpath,"${PREFIX}/lib" + else + "${CC}" -shared -fPIC \ + -I"${PREFIX}/include" -Ishim \ + -o "${PREFIX}/lib/libclang_mojo_shim.so" \ + shim/libclang_mojo_shim.c \ + -L"${PREFIX}/lib" -lclang \ + -Wl,-rpath,"${PREFIX}/lib" + fi + mojo precompile clang -o "${PREFIX}/lib/mojo/clang.mojoc" + +requirements: + build: + - ${{ compiler('c') }} + - mojo-compiler ${{ mojo_version }} + host: + - clangdev ${{ llvm_version }} + - libclang ${{ llvm_version }} + - mojo-compiler ${{ mojo_version }} + run: + - libclang ${{ llvm_version }} + - ${{ pin_compatible('mojo-compiler') }} + +tests: + - files: + recipe: + - test_cindex_smoke.mojo + script: + interpreter: bash + content: + - | + set -euo pipefail + export LD_LIBRARY_PATH="${PREFIX}/lib:${LD_LIBRARY_PATH:-}" + export DYLD_LIBRARY_PATH="${PREFIX}/lib:${DYLD_LIBRARY_PATH:-}" + mojo run -I "${PREFIX}/lib/mojo" test_cindex_smoke.mojo + +about: + homepage: https://github.com/MoSafi2/mojo_libclang + license: MIT + license_file: LICENSE + summary: High-level Mojo bindings for LLVM libclang + repository: https://github.com/MoSafi2/mojo_libclang + +extra: + maintainers: + - MoSafi2 + project_name: mojo_libclang diff --git a/recipes/libclang_mojo/test_cindex_smoke.mojo b/recipes/libclang_mojo/test_cindex_smoke.mojo new file mode 100644 index 00000000..c63d1094 --- /dev/null +++ b/recipes/libclang_mojo/test_cindex_smoke.mojo @@ -0,0 +1,7 @@ +from clang.cindex import Index + + +def main() raises: + var index = Index.create() + _ = index + print("libclang_mojo package smoke test passed")