Skip to content

Commit 887599b

Browse files
authored
Merge pull request #40 from TuringLang/compat-v1.2
Compat with Julia v1.2.x/v1.3.x
2 parents aee0d2c + 7f4c2d3 commit 887599b

File tree

8 files changed

+72
-13
lines changed

8 files changed

+72
-13
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ julia:
88
# - 0.7
99
- 1.0
1010
- 1.1
11+
- 1.2
1112
- nightly
1213

1314
matrix:

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ uuid = "6f1fad26-d15e-5dc8-ae53-837a1d7b8c9f"
33
license = "MIT"
44
desc = "C shim for task copying in Turing"
55
repo = "https://github.com/TuringLang/Libtask.jl.git"
6-
version = "0.3.1"
6+
version = "0.3.2"
77

88
[deps]
99
BinaryProvider = "b99e7846-7c00-51b0-8f62-c81ae34c0232"

appveyor.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ environment:
22
matrix:
33
- julia_version: 1.0
44
- julia_version: 1.1
5+
- julia_version: 1.2
56
- julia_version: nightly
67

78
platform:

deps/build.jl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,33 @@ function find_prev_tag(tag)
77
return get(tags, idx - 1, "NO-PREV-TAG")
88
end
99

10+
# modify build-tmp.jl to only check correct version libs
11+
function install_products_filter(build_file)
12+
prod_filter = raw"""products = filter(products) do prod
13+
endswith(prod.libnames[1], "$(VERSION.major)_$(VERSION.minor)")
14+
end
15+
"""
16+
lines = open(build_file) do io
17+
read(io, String) |> x -> split(x, "\n")
18+
end
19+
prod_in, prod_out, filter_written = false, false, false
20+
open(build_file, "w") do io
21+
for line in lines
22+
if occursin("products = [", line)
23+
prod_in = true
24+
end
25+
if prod_in && line == "]"
26+
prod_out = true
27+
end
28+
write(io, line * "\n")
29+
if prod_out && !filter_written
30+
write(io, prod_filter * "\n")
31+
filter_written = true
32+
end
33+
end
34+
end
35+
end
36+
1037
function include_build_script(version_str, try_prev=false)
1138
build_script_url = "https://github.com/TuringLang/Libtask.jl/releases/download/v$(version_str)/build_LibtaskDylib.v$(version_str).jl"
1239
build_script = joinpath(@__DIR__, "tmp-build.jl")
@@ -15,6 +42,7 @@ function include_build_script(version_str, try_prev=false)
1542
version_str = find_prev_tag("v$version_str") |> strip |> (x) -> lstrip(x, ['v'])
1643
return include_build_script(version_str, false)
1744
end
45+
install_products_filter(build_script)
1846
include(build_script)
1947
end
2048

deps/build_dylib.sh

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,31 @@ cd $WORKSPACE/srcdir
55

66
RELEASES=(
77
arm-linux-gnueabihf@v1_0@https://julialang-s3.julialang.org/bin/linux/armv7l/1.0/julia-1.0.0-linux-armv7l.tar.gz
8+
arm-linux-gnueabihf@v1_3@https://julialang-s3.julialang.org/bin/linux/armv7l/1.3/julia-1.3.0-alpha-linux-armv7l.tar.gz
89
aarch64-linux-gnu@v1_0@https://julialang-s3.julialang.org/bin/linux/aarch64/1.0/julia-1.0.4-linux-aarch64.tar.gz
910
aarch64-linux-gnu@v1_1@https://julialang-s3.julialang.org/bin/linux/aarch64/1.1/julia-1.1.1-linux-aarch64.tar.gz
11+
aarch64-linux-gnu@v1_2@https://julialang-s3.julialang.org/bin/linux/aarch64/1.2/julia-1.2.0-rc2-linux-aarch64.tar.gz
12+
aarch64-linux-gnu@v1_3@https://julialang-s3.julialang.org/bin/linux/aarch64/1.3/julia-1.3.0-alpha-linux-aarch64.tar.gz
1013
i686-linux-gnu@v1_0@https://julialang-s3.julialang.org/bin/linux/x86/1.0/julia-1.0.0-linux-i686.tar.gz
1114
i686-linux-gnu@v1_1@https://julialang-s3.julialang.org/bin/linux/x86/1.1/julia-1.1.0-linux-i686.tar.gz
15+
i686-linux-gnu@v1_2@https://julialang-s3.julialang.org/bin/linux/x86/1.2/julia-1.2.0-rc2-linux-i686.tar.gz
16+
i686-linux-gnu@v1_3@https://julialang-s3.julialang.org/bin/linux/x86/1.3/julia-1.3.0-alpha-linux-i686.tar.gz
1217
x86_64-linux-gnu@v1_0@https://julialang-s3.julialang.org/bin/linux/x64/1.0/julia-1.0.0-linux-x86_64.tar.gz
1318
x86_64-linux-gnu@v1_1@https://julialang-s3.julialang.org/bin/linux/x64/1.1/julia-1.1.0-linux-x86_64.tar.gz
14-
x86_64-w64-mingw32@v1_0@http://mlg.eng.cam.ac.uk/hong/julia/julia-1.0.0-win64.tar.gz
15-
x86_64-w64-mingw32@v1_1@http://mlg.eng.cam.ac.uk/hong/julia/julia-1.1.0-win64.tar.gz
16-
i686-w64-mingw32@v1_0@http://mlg.eng.cam.ac.uk/hong/julia/julia-1.0.0-win32.tar.gz
17-
i686-w64-mingw32@v1_1@http://mlg.eng.cam.ac.uk/hong/julia/julia-1.1.0-win32.tar.gz
18-
x86_64-apple-darwin14@v1_0@http://mlg.eng.cam.ac.uk/hong/julia/julia-1.0.0-mac64.tar.gz
19-
x86_64-apple-darwin14@v1_1@http://mlg.eng.cam.ac.uk/hong/julia/julia-1.1.0-mac64.tar.gz
19+
x86_64-linux-gnu@v1_2@https://julialang-s3.julialang.org/bin/linux/x64/1.2/julia-1.2.0-rc2-linux-x86_64.tar.gz
20+
x86_64-linux-gnu@v1_3@https://julialang-s3.julialang.org/bin/linux/x64/1.3/julia-1.3.0-alpha-linux-x86_64.tar.gz
21+
x86_64-w64-mingw32@v1_0@http://cxan.kdr2.com/julia/releases/julia-1.0.0-win64.tar.gz
22+
x86_64-w64-mingw32@v1_1@http://cxan.kdr2.com/julia/releases/julia-1.1.0-win64.tar.gz
23+
x86_64-w64-mingw32@v1_2@http://cxan.kdr2.com/julia/releases/julia-1.2.0-rc2-win64.tar.gz
24+
x86_64-w64-mingw32@v1_3@http://cxan.kdr2.com/julia/releases/julia-1.3.0-alpha-win64.tar.gz
25+
i686-w64-mingw32@v1_0@http://cxan.kdr2.com/julia/releases/julia-1.0.0-win32.tar.gz
26+
i686-w64-mingw32@v1_1@http://cxan.kdr2.com/julia/releases/julia-1.1.0-win32.tar.gz
27+
i686-w64-mingw32@v1_2@http://cxan.kdr2.com/julia/releases/julia-1.2.0-rc2-win32.tar.gz
28+
i686-w64-mingw32@v1_3@http://cxan.kdr2.com/julia/releases/julia-1.3.0-alpha-win32.tar.gz
29+
x86_64-apple-darwin14@v1_0@http://cxan.kdr2.com/julia/releases/julia-1.0.0-mac64.tar.gz
30+
x86_64-apple-darwin14@v1_1@http://cxan.kdr2.com/julia/releases/julia-1.1.0-mac64.tar.gz
31+
x86_64-apple-darwin14@v1_2@http://cxan.kdr2.com/julia/releases/julia-1.2.0-rc2-mac64.tar.gz
32+
x86_64-apple-darwin14@v1_3@http://cxan.kdr2.com/julia/releases/julia-1.3.0-alpha-mac64.tar.gz
2033
)
2134

2235
for RELEASE in ${RELEASES[@]}; do

deps/build_tarballs.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ platforms = [
4040
products(prefix) = [
4141
LibraryProduct(prefix, "libtask_v1_0", :libtask_v1_0)
4242
LibraryProduct(prefix, "libtask_v1_1", :libtask_v1_1)
43+
LibraryProduct(prefix, "libtask_v1_2", :libtask_v1_2)
44+
LibraryProduct(prefix, "libtask_v1_3", :libtask_v1_3)
4345
]
4446

4547
# Dependencies that must be installed before this package can be built
@@ -48,4 +50,5 @@ dependencies = [
4850
]
4951

5052
# Build the tarballs, and possibly a `build.jl` as well.
53+
# build_file = "products/build_$(name).v$(version_str).jl"
5154
build_tarballs(ARGS, name, version, sources, script, platforms, products, dependencies)

deps/task.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ jl_task_t *jl_clone_task(jl_task_t *t)
4646
#if JULIA_VERSION_MAJOR == 1 && JULIA_VERSION_MINOR >= 1
4747
newt->copy_stack = t->copy_stack;
4848
memcpy((void*)newt->ctx.uc_mcontext, (void*)t->ctx.uc_mcontext, sizeof(jl_jmp_buf));
49+
#if JULIA_VERSION_MINOR >= 2
50+
newt->queue = t->queue;
51+
newt->sticky = t->sticky;
52+
#endif
4953
#else
5054
newt->parent = ptls->current_task;
5155
newt->current_module = t->current_module;

src/taskcopy.jl

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
# Utility function for self-copying mechanism
22

3-
@static if VERSION >= v"1.1.0"
4-
const libtask = libtask_v1_1
5-
else
6-
const libtask = libtask_v1_0
3+
@static if VERSION < v"1.0.9999" # (-, v1.1)
4+
const libtask = libtask_v1_0
5+
elseif VERSION < v"1.1.9999" # [v1.1, v1.2)
6+
const libtask = libtask_v1_1
7+
elseif VERSION < v"1.2.9999" # [v1.2, v1.3)
8+
const libtask = libtask_v1_2
9+
else # [v1.3, +)
10+
const libtask = libtask_v1_3
711
end
812

913
n_copies() = n_copies(current_task())
@@ -124,9 +128,14 @@ produce(v) = begin
124128
if !(t.state in [:runnable, :queued])
125129
throw(AssertionError("producer.consumer.state in [:runnable, :queued]"))
126130
end
127-
if t.state == :queued yield() end
131+
@static if VERSION < v"1.1.9999"
132+
if t.state == :queued yield() end
133+
else
134+
if t.queue != nothing yield() end
135+
end
128136
if empty
129-
Base.schedule_and_wait(t, v)
137+
schedule(t, v)
138+
wait()
130139
ct = current_task() # When a task is copied, ct should be updated to new task ID.
131140
while true
132141
# wait until there are more consumers

0 commit comments

Comments
 (0)