Skip to content

Commit 5d37647

Browse files
committed
Add support for Windows builds.
We can now publish Windows binaries for tox4j.
1 parent 5d9b828 commit 5d37647

File tree

10 files changed

+121
-50
lines changed

10 files changed

+121
-50
lines changed

BUILD.bazel

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
1-
load("@rules_java//java:defs.bzl", "java_test")
21
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_proto_library")
2+
load("@rules_java//java:defs.bzl", "java_test")
33
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary", "scala_library", "scala_test")
44
load("@io_bazel_rules_scala//scala_proto:scala_proto.bzl", "scalapb_proto_library")
55
load("@rules_proto//proto:defs.bzl", "proto_library")
66
load("//tools/project:build_defs.bzl", "project")
77

88
project()
99

10+
# If you are on Windows, the relative path below doesn't work, so you'll need
11+
# to use an absolute path like below. If you find a way to make this work with
12+
# relative paths, please send a pull request.
13+
USER = "iphydf"
14+
15+
JVM_FLAGS = select({
16+
"//tools/config:windows": ["-Djava.library.path=C:/Users/%s/source/repos/toktok-stack/bazel-bin/jvm-toxcore-c" % USER],
17+
"//conditions:default": ["-Djava.library.path=jvm-toxcore-c"],
18+
})
19+
1020
genrule(
1121
name = "copy_link_jni_md_header",
1222
srcs = select({
1323
"//tools/config:freebsd": ["@bazel_tools//tools/jdk:jni_md_header-freebsd"],
1424
"//tools/config:linux": ["@bazel_tools//tools/jdk:jni_md_header-linux"],
1525
"//tools/config:osx": ["@bazel_tools//tools/jdk:jni_md_header-darwin"],
26+
"//tools/config:windows": ["@bazel_tools//tools/jdk:jni_md_header-windows"],
1627
}),
1728
outs = ["cpp/src/jni_md.h"],
1829
cmd = "cp -f $< $@",
@@ -54,9 +65,6 @@ cc_binary(
5465
":cpp/src/jni_md.h",
5566
],
5667
copts = [
57-
"-Wno-error=switch",
58-
"-Wno-parentheses",
59-
"-std=c++14",
6068
"-DHAVE_TO_STRING",
6169
],
6270
includes = [
@@ -67,6 +75,7 @@ cc_binary(
6775
"//tools/config:freebsd": ["-Wl,--version-script,$(location cpp/src/libtox4j-c.ld)"],
6876
"//tools/config:linux": ["-Wl,--version-script,$(location cpp/src/libtox4j-c.ld)"],
6977
"//tools/config:osx": [],
78+
"//tools/config:windows": [],
7079
}),
7180
linkshared = True,
7281
deps = [
@@ -83,12 +92,20 @@ genrule(
8392
cmd = "cp $< $@",
8493
)
8594

95+
genrule(
96+
name = "native_windows",
97+
srcs = [":libtox4j-c.so"],
98+
outs = ["tox4j-c.dll"],
99+
cmd = "cp $< $@",
100+
)
101+
86102
filegroup(
87103
name = "native",
88104
srcs = select({
89105
"//tools/config:freebsd": [":libtox4j-c.so"],
90106
"//tools/config:linux": [":libtox4j-c.so"],
91107
"//tools/config:osx": [":libtox4j-c.dylib"],
108+
"//tools/config:windows": [":tox4j-c.dll"],
92109
}),
93110
visibility = ["//visibility:public"],
94111
)
@@ -104,8 +121,8 @@ scala_library(
104121
":jni_scala_proto",
105122
"//jvm-macros",
106123
"//jvm-toxcore-api",
107-
"@maven//:com_typesafe_scala_logging_scala_logging_2_11",
108124
"@maven//:com_google_guava_guava",
125+
"@maven//:com_typesafe_scala_logging_scala_logging_2_11",
109126
"@maven//:org_jetbrains_annotations",
110127
"@maven//:org_slf4j_slf4j_api",
111128
],
@@ -173,9 +190,9 @@ scala_library(
173190
":jvm-toxcore-c",
174191
"//jvm-macros",
175192
"//jvm-toxcore-api",
193+
"@io_bazel_rules_scala//scala/scalatest",
176194
"@maven//:com_chuusai_shapeless_2_11",
177195
"@maven//:com_typesafe_scala_logging_scala_logging_2_11",
178-
"@io_bazel_rules_scala//scala/scalatest",
179196
"@maven//:org_jetbrains_annotations",
180197
"@maven//:org_scalacheck_scalacheck_2_11",
181198
"@maven//:org_slf4j_slf4j_api",
@@ -187,7 +204,7 @@ scala_library(
187204
size = "small",
188205
srcs = [src],
189206
data = [":native"],
190-
jvm_flags = ["-Djava.library.path=jvm-toxcore-c"],
207+
jvm_flags = JVM_FLAGS,
191208
resources = glob([
192209
"src/test/resources/**/*",
193210
]),
@@ -199,13 +216,15 @@ scala_library(
199216
"//jvm-macros",
200217
"//jvm-toxcore-api",
201218
"@maven//:com_chuusai_shapeless_2_11",
202-
"@maven//:com_typesafe_scala_logging_scala_logging_2_11",
203219
"@maven//:com_google_guava_guava",
204-
"@maven//:log4j_log4j",
220+
"@maven//:com_typesafe_scala_logging_scala_logging_2_11",
205221
"@maven//:org_apache_commons_commons_lang3",
206222
"@maven//:org_jetbrains_annotations",
207223
"@maven//:org_scalacheck_scalacheck_2_11",
208224
"@maven//:org_slf4j_slf4j_api",
225+
],
226+
runtime_deps = [
227+
"@maven//:log4j_log4j",
209228
"@maven//:org_slf4j_slf4j_log4j12",
210229
],
211230
) for src in glob(["src/test/java/**/*Test.scala"])]
@@ -215,7 +234,7 @@ scala_library(
215234
size = "small",
216235
srcs = [src],
217236
data = [":native"],
218-
jvm_flags = ["-Djava.library.path=`dirname $(location :native)`"],
237+
jvm_flags = JVM_FLAGS,
219238
resources = glob([
220239
"src/test/resources/**/*",
221240
]),
@@ -224,8 +243,10 @@ scala_library(
224243
"//jvm-toxcore-api",
225244
"@io_bazel_rules_scala//scala/scalatest",
226245
"@maven//:junit_junit",
227-
"@maven//:log4j_log4j",
228246
"@maven//:org_slf4j_slf4j_api",
247+
],
248+
runtime_deps = [
249+
"@maven//:log4j_log4j",
229250
"@maven//:org_slf4j_slf4j_log4j12",
230251
],
231252
) for src in glob(["src/test/java/**/*.java"])]
@@ -269,7 +290,7 @@ scala_test(
269290
size = "small",
270291
srcs = ["src/tools/java/im/tox/tox4j/av/callbacks/audio/AudioReceiveFrameCallbackShow.scala"],
271292
data = [":native"],
272-
jvm_flags = ["-Djava.library.path=jvm-toxcore-c"],
293+
#jvm_flags = JVM_FLAGS,
273294
resources = glob([
274295
"src/test/resources/**/*",
275296
]),
@@ -278,11 +299,13 @@ scala_test(
278299
":jvm-toxcore-c",
279300
":test_lib",
280301
"//jvm-toxcore-api",
281-
"@maven//:com_typesafe_scala_logging_scala_logging_2_11",
282302
"@io_bazel_rules_scala//scala/scalatest",
283-
"@maven//:log4j_log4j",
303+
"@maven//:com_typesafe_scala_logging_scala_logging_2_11",
284304
"@maven//:org_jetbrains_annotations",
285305
"@maven//:org_slf4j_slf4j_api",
306+
],
307+
runtime_deps = [
308+
"@maven//:log4j_log4j",
286309
"@maven//:org_slf4j_slf4j_log4j12",
287310
],
288311
)
@@ -298,7 +321,7 @@ scala_test(
298321
"src/tools/java/im/tox/tox4j/av/callbacks/video/VideoReceiveFrameCallbackShow.scala",
299322
],
300323
data = [":native"],
301-
jvm_flags = ["-Djava.library.path=jvm-toxcore-c"],
324+
jvm_flags = JVM_FLAGS,
302325
resources = glob([
303326
"src/test/resources/**/*",
304327
]),
@@ -307,13 +330,15 @@ scala_test(
307330
":jvm-toxcore-c",
308331
":test_lib",
309332
"//jvm-toxcore-api",
333+
"@io_bazel_rules_scala//scala/scalatest",
310334
"@maven//:com_chuusai_shapeless_2_11",
311335
"@maven//:com_typesafe_scala_logging_scala_logging_2_11",
312-
"@io_bazel_rules_scala//scala/scalatest",
313-
"@maven//:log4j_log4j",
314336
"@maven//:org_jetbrains_annotations",
315-
"@maven//:org_scala_lang_modules_scala_swing",
337+
"@maven//:org_scala_lang_modules_scala_swing_2_11",
316338
"@maven//:org_slf4j_slf4j_api",
339+
],
340+
runtime_deps = [
341+
"@maven//:log4j_log4j",
317342
"@maven//:org_slf4j_slf4j_log4j12",
318343
],
319344
)

cpp/src/ToxAv/av.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ TOX_METHOD (jbyteArray, Iterate,
2525
return instances.with_instance (env, instanceNumber,
2626
[=] (ToxAV *av, Events &events) -> jbyteArray
2727
{
28-
LogEntry log_entry (instanceNumber, toxav_iterate, av);
28+
InstanceLogEntry log_entry (instanceNumber, toxav_iterate, av);
2929

3030
#if 0
3131
log_entry.print_result (toxav_iterate, av, &events);

cpp/src/ToxCore/ToxCore.h

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,57 @@ namespace core
2828
}
2929

3030

31-
template<typename T, size_t get_size (Tox const *), void get_data (Tox const *, T *)>
31+
template<typename ConvertT, typename T>
32+
struct convert_vector
33+
{
34+
static std::vector<ConvertT>
35+
value (std::vector<T> vec)
36+
{
37+
return std::vector<ConvertT> (vec.begin (), vec.end ());
38+
}
39+
};
40+
41+
template<typename ConvertT>
42+
struct convert_vector<ConvertT, ConvertT>
43+
{
44+
static std::vector<ConvertT>
45+
value (std::vector<ConvertT> vec)
46+
{
47+
return vec;
48+
}
49+
};
50+
51+
52+
template<
53+
typename T,
54+
size_t get_size (Tox const *),
55+
void get_data (Tox const *, T *),
56+
typename ConvertT = T
57+
>
3258
struct get_vector
3359
{
3460
static bool register_funcs_0 ();
3561

36-
static std::vector<T>
62+
static std::vector<ConvertT>
3763
make (Tox const *tox)
3864
{
39-
std::vector<T> name (get_size (tox));
40-
get_data (tox, name.data ());
65+
std::vector<T> vec (get_size (tox));
66+
get_data (tox, vec.data ());
4167

4268
assert (register_funcs_0 ());
4369

44-
return name;
70+
return convert_vector<ConvertT, T>::value (std::move (vec));
4571
}
4672
};
4773

48-
template<typename T, size_t get_size (Tox const *), void get_data (Tox const *, T *)>
74+
template<
75+
typename T,
76+
size_t get_size (Tox const *),
77+
void get_data (Tox const *, T *),
78+
typename ConvertT
79+
>
4980
bool
50-
get_vector<T, get_size, get_data>::register_funcs_0 ()
81+
get_vector<T, get_size, get_data, ConvertT>::register_funcs_0 ()
5182
{
5283
REGISTER_FUNCS (
5384
reinterpret_cast<uintptr_t> (make),

cpp/src/ToxCore/connection.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ TOX_METHOD (jbyteArray, Iterate,
103103
return instances.with_instance (env, instanceNumber,
104104
[=] (Tox *tox, Events &events) -> jbyteArray
105105
{
106-
LogEntry log_entry (instanceNumber, tox_iterate, tox);
106+
InstanceLogEntry log_entry (instanceNumber, tox_iterate, tox);
107107

108108
log_entry.print_result (tox_iterate, tox, &events);
109109
if (events.ByteSizeLong () == 0)

cpp/src/ToxCore/friendlist.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ TOX_METHOD (jintArray, SelfGetFriendList,
9494
return instances.with_instance_noerr (env, instanceNumber,
9595
get_vector<uint32_t,
9696
tox_self_get_friend_list_size,
97-
tox_self_get_friend_list>::make
97+
tox_self_get_friend_list,
98+
jint>::make
9899
);
99100
}

cpp/src/tox/common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ namespace tox
107107
{ };
108108

109109

110-
template<typename Subsystem, typename Sig, void Set (Subsystem *, Sig, void *)>
110+
template<typename Subsystem, typename Sig, void Set (Subsystem *, Sig *, void *)>
111111
struct cb
112112
: mk_tox_cb<Subsystem, Sig>::template func<Set>
113113
{ };

cpp/src/tox4j/ToxInstances.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ struct ToxInstances
330330
[&] (Object *tox, Events &events)
331331
{
332332
unused (events);
333-
LogEntry log_entry (instanceNumber, tox_func, tox, args...);
333+
InstanceLogEntry log_entry (instanceNumber, tox_func, tox, args...);
334334
return ::with_error_handling<Object> (
335335
log_entry, env, success_func,
336336
tox_func, tox, std::forward<Args> (args)...
@@ -376,7 +376,7 @@ struct ToxInstances
376376
[&] (Object *tox, Events &events)
377377
{
378378
unused (events);
379-
LogEntry log_entry (instanceNumber, tox_func, tox, args...);
379+
InstanceLogEntry log_entry (instanceNumber, tox_func, tox, args...);
380380
return conversions<ToxFunc, Object *, Args...>::to_java (
381381
env, log_entry, tox_func, tox, std::forward<Args> (args)...
382382
);

cpp/src/util/debug_log.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ JniLog::Entry::Entry (data *log, protolog::JniLogEntry *entry, std::unique_lock<
4646
}
4747

4848

49+
JniLog::Entry::Entry(Entry &&rhs)
50+
: log_ (rhs.log_)
51+
, entry_ (rhs.entry_)
52+
, lock_ (std::move (rhs.lock_))
53+
{
54+
rhs.log_ = nullptr;
55+
rhs.entry_ = nullptr;
56+
}
57+
58+
4959
JniLog::Entry::~Entry ()
5060
{
5161
// Check if this entry needs to be filtered out.
@@ -280,7 +290,7 @@ print_arg<std::vector<uint8_t>> (protolog::Value &value, std::vector<uint8_t> co
280290

281291
template<>
282292
void
283-
print_arg<std::vector<uint32_t>> (protolog::Value &value, std::vector<uint32_t> const &data)
293+
print_arg<std::vector<jint>> (protolog::Value &value, std::vector<jint> const &data)
284294
{
285295
value.set_v_string ("int[" + std::to_string (data.size ()) + "]");
286296
}

0 commit comments

Comments
 (0)