Skip to content

Commit

Permalink
macOS support
Browse files Browse the repository at this point in the history
  • Loading branch information
didzis committed Nov 3, 2017
1 parent 87f8993 commit 3b5bfd9
Show file tree
Hide file tree
Showing 14 changed files with 691 additions and 21 deletions.
217 changes: 208 additions & 9 deletions BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,37 @@ cc_binary(
deps = ["@zlib_archive//:zlib"],
)

objc_library(
name = "macos_dlg_lib",
srcs = [
CODE_DIR + "/sys/sys_osx.m"
],
hdrs = [
"public/dmlab.h",
CODE_DIR + "/deepmind/context.h",
] + glob(
[
CODE_DIR + "/botlib/*.h",
CODE_DIR + "/client/*.h",
CODE_DIR + "/qcommon/*.h",
CODE_DIR + "/sys/*.h",
CODE_DIR + "/server/*.h",
CODE_DIR + "/renderercommon/*.h",
CODE_DIR + "/renderergl1/*.h",
],
exclude = [
CODE_DIR + "/client/fx_*.h",
CODE_DIR + "/qcommon/vm_powerpc_asm.h",
CODE_DIR + "/qcommon/vm_sparc.h",
CODE_DIR + "/renderercommon/tr_types.h",
CODE_DIR + "/renderercommon/tr_public.h",
CODE_DIR + "/renderergl1/tr_local.h",
],
),
sdk_frameworks = ["Cocoa", "Carbon"],
copts = ["-fno-objc-arc"],
)

# To link with the SDL frontend, depend on :game_lib_sdl
# and add "-lGL" to the linker flags.
cc_library(
Expand Down Expand Up @@ -722,7 +753,11 @@ cc_library(
"//third_party/rl_api:env_c_api",
"@jpeg_archive//:jpeg",
"@sdl_system//:sdl2",
],
] + select({
":darwin": ["@osmesa_system//:osmesa"],
":darwin_x86_64": ["@osmesa_system//:osmesa"],
"//conditions:default": [],
}),
)

# To link with the headless GLX frontend, depend on :game_lib_headless_glx
Expand Down Expand Up @@ -815,6 +850,94 @@ cc_library(
],
)

cc_library(
name = "game_lib_headless_darwin",
srcs = [
CODE_DIR + "/asm/ftola.c",
CODE_DIR + "/asm/qasm-inline.h",
CODE_DIR + "/asm/snapvector.c",
CODE_DIR + "/cgame/cg_public.h",
CODE_DIR + "/client/libmumblelink.c",
CODE_DIR + "/deepmind/dm_public.h",
CODE_DIR + "/deepmind/dmlab_connect.c",
CODE_DIR + "/game/bg_public.h",
CODE_DIR + "/game/g_public.h",
CODE_DIR + "/null/null_input.c",
CODE_DIR + "/null/null_snddma.c",
CODE_DIR + "/sys/con_log.c",
CODE_DIR + "/sys/con_passive.c",
CODE_DIR + "/sys/sys_main.c",
CODE_DIR + "/sys/sys_unix.c",
CODE_DIR + "/ui/ui_public.h",

## OpenGL rendering
CODE_DIR + "/deepmind/headless_native_macos_glimp.c",
CODE_DIR + "/deepmind/glimp_common.h",
CODE_DIR + "/deepmind/glimp_common.c",
] + glob(
[
CODE_DIR + "/botlib/*.c",
CODE_DIR + "/client/cl_*.c",
CODE_DIR + "/client/snd_*.c",
CODE_DIR + "/qcommon/*.c",
CODE_DIR + "/renderercommon/*.c",
CODE_DIR + "/renderergl1/*.c",
CODE_DIR + "/server/*.c",
],
exclude = [
CODE_DIR + "/renderergl1/tr_subs.c",
CODE_DIR + "/server/sv_rankings.c",
CODE_DIR + "/qcommon/vm_none.c",
CODE_DIR + "/qcommon/vm_powerpc*.c",
CODE_DIR + "/qcommon/vm_sparc.c",
],
),
hdrs = [
"public/dmlab.h",
CODE_DIR + "/deepmind/context.h",
] + glob(
[
CODE_DIR + "/botlib/*.h",
CODE_DIR + "/client/*.h",
CODE_DIR + "/qcommon/*.h",
CODE_DIR + "/sys/*.h",
CODE_DIR + "/server/*.h",
CODE_DIR + "/renderercommon/*.h",
CODE_DIR + "/renderergl1/*.h",
],
exclude = [
CODE_DIR + "/client/fx_*.h",
CODE_DIR + "/qcommon/vm_powerpc_asm.h",
CODE_DIR + "/qcommon/vm_sparc.h",
CODE_DIR + "/renderercommon/tr_types.h",
CODE_DIR + "/renderercommon/tr_public.h",
CODE_DIR + "/renderergl1/tr_local.h",
],
),
copts = [
"-std=c99",
"-fno-strict-aliasing",
ARCH_VAR,
STANDALONE_VAR,
],
defines = [
"BOTLIB",
"_GNU_SOURCE",
],
textual_hdrs = [
CODE_DIR + "/renderercommon/tr_types.h",
CODE_DIR + "/renderercommon/tr_public.h",
CODE_DIR + "/renderergl1/tr_local.h",
],
deps = [
":qcommon_hdrs",
"//deepmind/include:context_headers",
"//third_party/rl_api:env_c_api",
"@jpeg_archive//:jpeg",
"@sdl_system//:sdl2",
],
)

ASSETS = [
"assets/default.cfg",
"assets/q3config.cfg",
Expand Down Expand Up @@ -912,61 +1035,124 @@ cc_binary(
":vm_pk3",
],
linkopts = [
"-lGL",
"-lm",
],
] + select({
":darwin": ["-framework OpenGL"],
":darwin_x86_64": ["-framework OpenGL"],
"//conditions:default": ["-lGL"],
}),
deps = [
":game_lib_sdl",
"//deepmind/engine:callbacks",
"//deepmind/engine:context",
"@zlib_archive//:zlib",
],
] + select({
":darwin": [":macos_dlg_lib"],
":darwin_x86_64": [":macos_dlg_lib"],
"//conditions:default": [],
}),
)

config_setting(
name = "dmlab_lib_sdl",
values = {"define": "headless=false"},
)

config_setting(
name = "dmlab_lib_sdl_darwin",
values = {"define": "headless=false", "cpu": "darwin"},
)

config_setting(
name = "dmlab_lib_sdl_darwin_x86_64",
values = {"define": "headless=false", "cpu": "darwin_x86_64"},
)

config_setting(
name = "dmlab_headless_hw",
values = {"define": "headless=glx"},
)

config_setting(
name = "dmlab_headless_hw_darwin",
values = {"define": "headless=macos", "cpu": "darwin"},
)

config_setting(
name = "dmlab_headless_hw_darwin_x86_64",
values = {"define": "headless=macos", "cpu": "darwin_x86_64"},
)

config_setting(
name = "dmlab_headless_sw",
values = {"define": "headless=osmesa"},
)

config_setting(
name = "dmlab_headless_sw_darwin",
values = {"define": "headless=osmesa", "cpu": "darwin"},
)

config_setting(
name = "dmlab_headless_sw_darwin_x86_64",
values = {"define": "headless=osmesa", "cpu": "darwin_x86_64"},
)

cc_binary(
name = "libdmlab.so",
linkopts = select({
"//conditions:default": ["-lOSMesa"],
":dmlab_headless_hw_darwin": [
"-framework OpenGL",
],
":dmlab_headless_hw_darwin_x86_64": [
"-framework OpenGL",
],
":dmlab_headless_hw": [
"-lGL",
"-lX11",
],
":dmlab_lib_sdl_darwin": [
"-framework OpenGL",
],
":dmlab_lib_sdl_darwin_x86_64": [
"-framework OpenGL",
],
":dmlab_lib_sdl": [
"-lGL",
"-lX11",
],
}) + [
"-Wl,--version-script",
":dmlab.lds",
],
":dmlab_headless_sw_darwin": [],
":dmlab_headless_sw_darwin_x86_64": [],
}) + select({
"//conditions:default": [
"-Wl,--version-script",
":dmlab.lds",
],
":darwin": [],
":darwin_x86_64": [],
}),
linkshared = 1,
linkstatic = 1,
deps = select({
"//conditions:default": [":game_lib_headless_osmesa"],
":dmlab_lib_sdl": [":game_lib_sdl"],
":dmlab_headless_hw": [":game_lib_headless_glx"],
":dmlab_headless_hw_darwin": [":game_lib_headless_darwin"],
":dmlab_headless_hw_darwin_x86_64": [":game_lib_headless_darwin"],
":dmlab_headless_sw": [":game_lib_headless_osmesa"],
":dmlab_headless_sw_darwin": [":game_lib_headless_osmesa"],
":dmlab_headless_sw_darwin_x86_64": [":game_lib_headless_osmesa"],
}) + [
":dmlab.lds",
"//deepmind/engine:callbacks",
"//deepmind/engine:context",
"@zlib_archive//:zlib",
],
] + select({
":darwin": [":macos_dlg_lib"],
":darwin_x86_64": [":macos_dlg_lib"],
"//conditions:default": [],
}),
)

cc_library(
Expand Down Expand Up @@ -1007,6 +1193,7 @@ cc_binary(
deps = [
":dmlablib",
"@python_system//:python",
# "@numpy_archive//:numpy_headers",
],
)

Expand Down Expand Up @@ -1038,3 +1225,15 @@ py_test(
main = "python/random_agent_test.py",
deps = [":random_agent"],
)

config_setting(
name = "darwin",
values = {"cpu": "darwin"},
visibility = ["//visibility:public"],
)

config_setting(
name = "darwin_x86_64",
values = {"cpu": "darwin_x86_64"},
visibility = ["//visibility:public"],
)
23 changes: 23 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ new_http_archive(
url = "http://bazel-mirror.storage.googleapis.com/zlib.net/zlib-1.2.8.tar.gz",
)

new_http_archive(
name = "numpy_archive",
build_file = "numpy.BUILD",
sha256 = "4c6b4eef790528bebb7ec9590d74cc193868940fe68e4109a91c196df72d8094",
strip_prefix = "numpy-1.13.3",
url = "https://github.com/numpy/numpy/releases/download/v1.13.3/numpy-1.13.3.tar.gz",
)

# TODO: Replace with hermetic build
new_local_repository(
name = "lua_system",
Expand All @@ -70,3 +78,18 @@ new_local_repository(
build_file = "python.BUILD",
path = "/usr",
)
new_local_repository(
name = "libxml_system",
build_file = "libxml_system.BUILD",
path = "/usr",
)
new_local_repository(
name = "glib_system",
build_file = "glib_system.BUILD",
path = "/usr",
)
new_local_repository(
name = "osmesa_system",
build_file = "osmesa.BUILD",
path = "/opt",
)
7 changes: 6 additions & 1 deletion deepmind/level_generation/text_level/lua_bindings.cc
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,12 @@ bool LuaCustomEntityCallback(
lua_pop(L, res.n_results());
return false;
} else {
auto is_empty = std::mem_fn(&std::string::empty);
// auto is_empty = std::mem_fn(&std::string::empty);
// NOTE: on macOS clang, the above definition of is_empty causes "ld: 32-bit RIP relative reference out of range" error
// See:
// http://blog.quasardb.net/weird-pie-related-linker-errors-on-os-x/
// http://www.cocoabuilder.com/archive/xcode/317778-os-constant-cause-32-bit-rip-relative-reference-out-of-range-linker-error-on-x64.html#319148
auto is_empty = [](std::string& s){ return s.empty(); };
data.erase(std::remove_if(data.begin(), data.end(), is_empty), data.end());

VLOG(1) << "User callback(" << i << ", " << j << ", '" << ent
Expand Down
Loading

0 comments on commit 3b5bfd9

Please sign in to comment.