Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
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
5 changes: 3 additions & 2 deletions exla/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ XLA_EXTENSION_LIB = $(XLA_EXTENSION_DIR)/lib
XLA_INCLUDE_PATH = $(XLA_EXTENSION_DIR)/include

# Cache configuration
EXLA_CACHE_SO = cache/$(EXLA_VERSION)/libexla.so
EXLA_CACHE_SO = cache/libexla.so
EXLA_CACHE_OBJ_DIR = cache/$(EXLA_VERSION)/objs

# Private configuration
Expand Down Expand Up @@ -71,6 +71,7 @@ else
LDFLAGS += -Wl,-rpath,'$$ORIGIN/xla_extension/lib'
endif


$(EXLA_SO): $(EXLA_CACHE_SO)
@ mkdir -p $(PRIV_DIR)
@ mkdir -p $(PRIV_DIR)/xla_extension
Expand Down Expand Up @@ -98,7 +99,7 @@ $(EXLA_CACHE_OBJ_DIR)/%.o: $(EXLA_DIR)/%.cc $(HEADERS)
$(CXX) $(CFLAGS) -c $< -o $@

$(EXLA_CACHE_SO): $(XLA_EXTENSION_DIR) $(OBJECTS)
$(CXX) $(OBJECTS) -o $(EXLA_CACHE_SO) $(LDFLAGS)
$(CXX) $(OBJECTS) -o $(EXLA_VERSIONED_CACHE_SO) $(LDFLAGS)

clean:
rm -rf cache
29 changes: 13 additions & 16 deletions exla/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -135,26 +135,22 @@ defmodule EXLA.MixProject do
end

defp cached_make(args) do
force_rebuild_mode =
case System.get_env("EXLA_FORCE_REBUILD", "") do
"" ->
:none
force_rebuild_env_var = System.get_env("EXLA_FORCE_REBUILD", "")

"0" ->
force_rebuild_mode =
cond do
force_rebuild_env_var in ["", "false", "0"] ->
:none

"partial" ->
force_rebuild_env_var == "partial" ->
:partial

"true" ->
force_rebuild_env_var in ["true", "1"] ->
:full

"1" ->
:full

value ->
true ->
Mix.raise(
"invalid value for EXLA_FORCE_REBUILD: '#{value}'. Expected one of: partial, true"
"invalid value for EXLA_FORCE_REBUILD: '#{force_rebuild_env_var}'. Expected one of: partial, true, false"
)
end

Expand Down Expand Up @@ -183,24 +179,25 @@ defmodule EXLA.MixProject do
cached? = File.exists?(cached_so) and force_rebuild_mode == :none

if force_rebuild_mode in [:partial, :full] do
Mix.shell().info("Removing cached libexla.so file in cache/#{@version}/libexla.so")
File.rm_rf!("cache/#{@version}/libexla.so")
Mix.shell().info("Removing cached libexla.so file in cache/libexla.so")

File.rm_rf!("cache/libexla.so")

Mix.shell().info("Removing libexla.so cache at #{cached_so}")
File.rm_rf!(cached_so)
end

if cached? do
Mix.shell().info("Using libexla.so from #{cached_so}")
File.cp!(cached_so, "cache/#{@version}/libexla.so")
File.cp!(cached_so, "cache/libexla.so")
end

result = Mix.Tasks.Compile.ElixirMake.run(args)

if not cached? and match?({:ok, _}, result) do
Mix.shell().info("Caching libexla.so at #{cached_so}")
File.mkdir_p!(Path.dirname(cached_so))
File.cp!("cache/#{@version}/libexla.so", cached_so)
File.cp!("cache/libexla.so", cached_so)
end

result
Expand Down
Loading