Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use zig build only #271

Open
wants to merge 67 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
ba01116
naive impl
jackalcooper Feb 15, 2024
d5e74a2
Fix OpaquePtr making
jackalcooper Feb 15, 2024
1fb01a7
refactor capi
jackalcooper Feb 15, 2024
151bad6
extract functions
jackalcooper Feb 15, 2024
b6fc434
simplify switch case
jackalcooper Feb 16, 2024
b954df1
optimize the kind lookup
jackalcooper Feb 16, 2024
427f8e6
inline to reduce binary size
jackalcooper Feb 16, 2024
22849d7
minor DRY
jackalcooper Feb 16, 2024
037f5e1
Update kinda_library.zig
jackalcooper Feb 16, 2024
da5a4da
Update kinda_library.zig
jackalcooper Feb 16, 2024
28cf55b
further simplification
jackalcooper Feb 16, 2024
de9eddc
Update kinda_library.zig
jackalcooper Feb 16, 2024
2292e37
reduce binary size
jackalcooper Feb 16, 2024
f41a1cb
Update kinda_library.zig
jackalcooper Feb 16, 2024
4ccb63f
simplify
jackalcooper Feb 16, 2024
acf275a
Update kinda_library.zig
jackalcooper Feb 16, 2024
9125f7b
reduce size of struct
jackalcooper Feb 16, 2024
fd99d8f
move FTI to param
jackalcooper Feb 16, 2024
8fe49c8
Update kinda_library.zig
jackalcooper Feb 16, 2024
dbf5340
Update kinda_library.zig
jackalcooper Feb 16, 2024
27cb63b
Update kinda_library.zig
jackalcooper Feb 16, 2024
c78d5ee
Update kinda_library.zig
jackalcooper Feb 16, 2024
e380232
Remove library struct to reduce Zig-produced binary size (#269)
jackalcooper Feb 17, 2024
c7fb361
Refactor kinda ret (#270)
jackalcooper Feb 17, 2024
3807f1a
rm Struct_MlirAffineMap
jackalcooper Feb 17, 2024
4d34f51
use c.MlirSparseTensorLevelType
jackalcooper Feb 17, 2024
4be857e
Simplify
jackalcooper Feb 17, 2024
4db3f4c
unify naming
jackalcooper Feb 17, 2024
a34a3b7
move kinds to ex
jackalcooper Feb 17, 2024
98769e2
Update Makefile
jackalcooper Feb 17, 2024
60b4de4
generate capi_functions.exs
jackalcooper Feb 18, 2024
284f044
remove kind code gen
jackalcooper Feb 18, 2024
ecd387b
remove file from git
jackalcooper Feb 18, 2024
ecb6284
add ignore
jackalcooper Feb 18, 2024
d990392
fix warning
jackalcooper Feb 18, 2024
666fac0
minore refactor updater
jackalcooper Feb 18, 2024
c112166
add make_precompiler
jackalcooper Feb 18, 2024
0b66448
update kinda version
jackalcooper Feb 18, 2024
ade0be0
use new func from kinda
jackalcooper Feb 18, 2024
0f31ecd
update lock
jackalcooper Feb 18, 2024
da91992
fix
jackalcooper Feb 18, 2024
66b3146
fix
jackalcooper Feb 18, 2024
7878699
fix
jackalcooper Feb 18, 2024
1e34fed
update for elixir.cmake std
jackalcooper Feb 19, 2024
f133c11
update path
jackalcooper Feb 19, 2024
dcc2b22
replace cmake_build with zig build
jackalcooper Feb 19, 2024
8491f8a
simplify
jackalcooper Feb 19, 2024
ad2da64
add make -j
jackalcooper Feb 19, 2024
24707d7
Update Makefile
jackalcooper Feb 19, 2024
d34eac8
Update Makefile
jackalcooper Feb 19, 2024
2b8c4fb
fix for linux
jackalcooper Feb 19, 2024
3133bec
Update build.zig
jackalcooper Feb 19, 2024
aa8859c
use MIX_ENV
jackalcooper Feb 19, 2024
ab9b89f
upload file
jackalcooper Feb 19, 2024
e934666
use -std=gnu++17
jackalcooper Feb 19, 2024
ec19738
also generate flags
jackalcooper Feb 19, 2024
a502022
rm dbg
jackalcooper Feb 19, 2024
ce7c66d
simplify
jackalcooper Feb 19, 2024
7ca50b2
fix for linux
jackalcooper Feb 19, 2024
5bfeb74
refine
jackalcooper Feb 19, 2024
79acf5a
fix warning
jackalcooper Feb 19, 2024
38b8e91
-D_GLIBCXX_USE_CXX11_ABI=0
jackalcooper Feb 19, 2024
d9505bc
two libs
jackalcooper Feb 20, 2024
b1ca6b0
Revert "two libs"
jackalcooper Feb 20, 2024
3b5cf66
Update Beaver.cpp
jackalcooper Feb 20, 2024
720e810
Update Beaver.cpp
jackalcooper Feb 20, 2024
6d930f1
fix warnings
jackalcooper Feb 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .formatter.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ locals_without_parens = [deftype: 1, defattr: 1, defop: 2, defalias: 2]
# Used by "mix format"
[
locals_without_parens: locals_without_parens,
inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"],
inputs: ["{mix,.formatter}.exs", "{config,lib,test,scripts}/**/*.{ex,exs}"],
export: [
locals_without_parens: locals_without_parens
]
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/elixir.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,6 @@ jobs:
if: failure()
with:
name: beaver-tmp-${{ github.run_number }}-${{ github.run_attempt }}
path: ./tmp/**/*.zig
path: |
_build/*/lib/beaver/cmake_build/build.ninja
native/mlir-zig-proj/libs.zig
14 changes: 7 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,13 @@ jobs:
BEAVER_BUILD_CMAKE=1 mix compile
- env:
MIX_ENV: prod
run: tree _build/${MIX_ENV}/lib/beaver/native_install
run: tree _build/${MIX_ENV}/lib/beaver/priv
- name: Run patchelf
env:
MIX_ENV: prod
run: |
set -u
find _build/${MIX_ENV}/lib/beaver/native_install/lib -name "*.so*" -maxdepth 1 -type f | while read sofile; do
find _build/${MIX_ENV}/lib/beaver/priv/lib -name "*.so*" -maxdepth 1 -type f | while read sofile; do
echo "==> working on: $sofile"

echo "==> before replace needed"
Expand All @@ -106,13 +106,13 @@ jobs:
MIX_ENV: prod
run: |
set -u
ls _build/${MIX_ENV}/lib/beaver/native_install/lib
LIB_FINAL_SO=$(ls _build/${MIX_ENV}/lib/beaver/native_install/lib | grep -E "libbeaver.+so")
ls _build/${MIX_ENV}/lib/beaver/priv/lib
LIB_FINAL_SO=$(ls _build/${MIX_ENV}/lib/beaver/priv/lib | grep -E "libbeaver.+so")
LIB_FINAL_NAME=${LIB_FINAL_SO}.tar.gz
tar --dereference -cvzf ${LIB_FINAL_NAME} \
-C $PWD/_build/${MIX_ENV}/lib/beaver/native_install/lib $(cd $PWD/_build/${MIX_ENV}/lib/beaver/native_install/lib && ls *.so) \
-C $PWD/_build/${MIX_ENV}/lib/beaver/native_install/lib $(cd $PWD/_build/${MIX_ENV}/lib/beaver/native_install/lib && ls *.dylib) \
-C $PWD/_build/${MIX_ENV}/lib/beaver/native_install $(cd $PWD/_build/${MIX_ENV}/lib/beaver/native_install && ls *.ex)
-C $PWD/_build/${MIX_ENV}/lib/beaver/priv/lib $(cd $PWD/_build/${MIX_ENV}/lib/beaver/priv/lib && ls *.so) \
-C $PWD/_build/${MIX_ENV}/lib/beaver/priv/lib $(cd $PWD/_build/${MIX_ENV}/lib/beaver/priv/lib && ls *.dylib) \
-C $PWD/_build/${MIX_ENV}/lib/beaver/priv $(cd $PWD/_build/${MIX_ENV}/lib/beaver/priv && ls *.ex)
echo "LIB_FINAL_NAME=${LIB_FINAL_NAME}" >> $GITHUB_OUTPUT
- name: Purge artifacts
run: |
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,6 @@ checksum-*.exs
beaver-*.tar

.elixir_ls
lib/beaver/mlir/capi_functions.exs
native/mlir-zig-proj/src/wrapper.zig
checksum.exs
33 changes: 30 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,36 @@ LLVM_LIB_DIR := $(shell ${LLVM_CONFIG_PATH} --libdir)
LLVM_CMAKE_DIR = $(LLVM_LIB_DIR)/cmake/llvm
MLIR_CMAKE_DIR = $(LLVM_LIB_DIR)/cmake/mlir
CMAKE_BUILD_DIR = ${MIX_APP_PATH}/cmake_build
NATIVE_INSTALL_DIR = ${MIX_APP_PATH}/native_install
cmake_build:
cmake -G Ninja -S native/mlir-c -B ${CMAKE_BUILD_DIR} -DLLVM_DIR=${LLVM_CMAKE_DIR} -DMLIR_DIR=${MLIR_CMAKE_DIR} -DCMAKE_INSTALL_PREFIX=${NATIVE_INSTALL_DIR}
CMAKE_INSTALL_DIR = ${MIX_APP_PATH}/cmake_install
NATIVE_INSTALL_DIR = ${MIX_APP_PATH}/priv
MLIR_INCLUDE_DIR = ${LLVM_LIB_DIR}/../include
BEAVER_INCLUDE_DIR = native/mlir-zig-proj/mlir-c/include
ZIG_CACHE_DIR = ${MIX_APP_PATH}/zig_cache
.PHONY: all cmake_config zig_build cmake_build

all: cmake_config zig_build cmake_build

zig_build: cmake_config
mkdir -p ${NATIVE_INSTALL_DIR}
zig translate-c ${BEAVER_INCLUDE_DIR}/mlir-c/Beaver/wrapper.h --cache-dir ${ZIG_CACHE_DIR} \
-I ${BEAVER_INCLUDE_DIR} \
-I ${MLIR_INCLUDE_DIR} | elixir scripts/update_generated.exs \
--elixir ${NATIVE_INSTALL_DIR}/kinda-meta-lib${KINDA_LIB_NAME}.ex \
--elixir lib/beaver/mlir/capi_functions.exs \
--zig native/mlir-zig-proj/src/wrapper.zig
zig fmt native/mlir-zig-proj/
cd native/mlir-zig-proj && zig build --cache-dir ${ZIG_CACHE_DIR} \
--prefix ${NATIVE_INSTALL_DIR} \
--search-prefix mlir-c \
--search-prefix ${NATIVE_INSTALL_DIR} \
--search-prefix ${LLVM_LIB_DIR}/.. \
--search-prefix ${ERTS_INCLUDE_DIR}/.. \
-freference-trace \
-DKINDA_LIB_NAME=${KINDA_LIB_NAME}
cmake_config:
cmake -G Ninja -S native/mlir-zig-proj/mlir-c -B ${CMAKE_BUILD_DIR} -DLLVM_DIR=${LLVM_CMAKE_DIR} -DMLIR_DIR=${MLIR_CMAKE_DIR} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_DIR}
elixir scripts/get_libs.exs
cmake_build: cmake_config
cmake --build ${CMAKE_BUILD_DIR} --target install

clean:
Expand Down
5 changes: 0 additions & 5 deletions config/config.exs
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
import Config

import_config "#{config_env()}.exs"

if Mix.env() in [:dev, :test] do
config :mix_test_watch,
extra_extensions: [".zig", ".cpp"]
end
8 changes: 0 additions & 8 deletions lib/beaver/exterior/elixir.ex

This file was deleted.

2 changes: 1 addition & 1 deletion lib/beaver/exterior/exterior.ex
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ defmodule Beaver.Exterior do

def register_all(ctx) do
# TODO: get it from app config or other mechanism
for dialect <- [Beaver.Exterior.Elixir] do
for dialect <- [] do
:ok = dialect.register_dialect(ctx)
end
end
Expand Down
38 changes: 7 additions & 31 deletions lib/beaver/mlir/capi.ex
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,7 @@ defmodule Beaver.MLIR.CAPI do

require Logger

dest_dir = Path.join([Mix.Project.app_path(), "native_install"])

llvm_paths =
case LLVMConfig.include_dir() do
{:ok, include_dir} ->
[include_dir]

_ ->
[]
end

mlir_c_path = Path.join(File.cwd!(), "native/mlir-c")
dest_dir = Path.join([Mix.Project.app_path(), "priv"])

use Kinda.Prebuilt,
otp_app: :beaver,
Expand All @@ -28,24 +17,6 @@ defmodule Beaver.MLIR.CAPI do
"https://github.com/beaver-lodge/beaver-prebuilt/releases/download/2023-12-23-1442"
),
version: "0.3.2",
wrapper: Path.join(mlir_c_path, "include/mlir-c/Beaver/wrapper.h"),
zig_proj: "native/mlir-zig-proj",
translate_args:
List.flatten(
for p <-
[Path.join(mlir_c_path, "include")] ++
llvm_paths do
["-I", p]
end
),
build_args:
List.flatten(
for p <-
[dest_dir, mlir_c_path] ++
Enum.map(llvm_paths, &Path.dirname/1) do
["--search-prefix", p]
end
),
dest_dir: dest_dir,
forward_module: Beaver.Native,
code_gen_module: Beaver.MLIR.CAPI.CodeGen,
Expand All @@ -55,7 +26,12 @@ defmodule Beaver.MLIR.CAPI do
),
nif_versions: ~w(
2.16
)
),
nifs:
"lib/beaver/mlir/capi_functions.exs"
|> File.read!()
|> Code.eval_string()
|> elem(0)

llvm_headers =
case LLVMConfig.include_dir() do
Expand Down
Loading
Loading