Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ repos:
rev: v0.6.13
- hooks:
- description: Format files with clang-format
entry: clang-format
entry: clang-format -i
files: ^(src\/nle|include\/nle|win\/rl|sys\/unix\/nle).*\.(c|cc|cxx|cpp|cu|h|hpp|hxx|cuh|proto)$
id: clang-format
language: system
Expand Down
59 changes: 52 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
message(NOTICE "*** CMakeLists.txt: ${CMAKE_CURRENT_LIST_FILE}")

cmake_minimum_required(VERSION 3.28)
if(NOT DEFINED NLE_VERSION)
if(DEFINED SKBUILD_PROJECT_VERSION)
Expand Down Expand Up @@ -93,7 +95,8 @@ add_compile_definitions(
HACKDIR="${HACKDIR}"
DEFAULT_WINDOW_SYS="rl"
DLB
NOCWD_ASSUMPTIONS)
NOCWD_ASSUMPTIONS
NO_TERMCAP_HEADERS)

set(NLE_SRC ${nle_SOURCE_DIR}/src)
set(NLE_INC ${nle_SOURCE_DIR}/include)
Expand All @@ -108,10 +111,49 @@ set(NLE_INC_GEN ${nle_BINARY_DIR}/include)
set(NLE_DAT_GEN ${nle_BINARY_DIR}/dat)
set(NLE_UTIL_GEN ${nle_BINARY_DIR}/util)

# TODO: NH5 - Sometimes the other CMakeLists.txt executions will not detect this
# setting. Why is this?
set(LUA_INCLUDE ${nle_BINARY_DIR}/lua/src/fetch-lua/src)
message(NOTICE "-- LUA_INCLUDE: ${LUA_INCLUDE}")

set(CMAKE_INSTALL_MESSAGE LAZY) # Don't tell us about up-to-date files.
add_subdirectory(util)
add_subdirectory(dat)

# Lua.
set(LUA_VERSION 5.4.3)
include(ExternalProject)
ExternalProject_Add(
fetch-lua
PREFIX "lua"
URL http://www.lua.org/ftp/lua-${LUA_VERSION}.tar.gz
URL_HASH
SHA512=3a1a3ee8694b72b4ec9d3ce76705fe179328294353604ca950c53f41b41161b449877d43318ef4501fee44ecbd6c83314ce7468d7425ba9b2903c9c32a28bbc0
BUILD_IN_SOURCE TRUE
CONFIGURE_COMMAND ""
BUILD_COMMAND make
BUILD_BYPRODUCTS <BINARY_DIR>/src/liblua.a
INSTALL_COMMAND ""
STEP_TARGETS build)

ExternalProject_Get_Property(fetch-lua BINARY_DIR)
set(TOPLUALIB ${BINARY_DIR}/src/liblua.a)

add_custom_command(
OUTPUT ${NLE_INC_GEN}/nhlua.h
COMMAND ${CMAKE_COMMAND} -E echo "/* nhlua.h - generated by top Makefile */" >
${NLE_INC_GEN}/nhlua.h
COMMAND ${CMAKE_COMMAND} -E echo "#include \"lua.h\"" >>
${NLE_INC_GEN}/nhlua.h
COMMAND ${CMAKE_COMMAND} -E echo "#include \"lualib.h\"" >>
${NLE_INC_GEN}/nhlua.h
COMMAND ${CMAKE_COMMAND} -E echo "#include \"lauxlib.h\"" >>
${NLE_INC_GEN}/nhlua.h
COMMAND ${CMAKE_COMMAND} -E echo "/*nhlua.h*/" >> ${NLE_INC_GEN}/nhlua.h
VERBATIM)

add_custom_target(lua_support DEPENDS fetch-lua-build ${NLE_INC_GEN}/nhlua.h)

file(
GLOB
NETHACK_SRC
Expand Down Expand Up @@ -152,22 +194,24 @@ set_target_properties(tmt PROPERTIES C_STANDARD 11)

# libnethack library
add_library(nethack SHARED ${NETHACK_SRC})
add_dependencies(nethack util dat)
add_dependencies(nethack util dat lua_support)
set_target_properties(nethack PROPERTIES CXX_STANDARD 14 SUFFIX ".so")
target_compile_options(
nethack
PRIVATE -Wno-deprecated-non-prototype
PRIVATE -Wno-unused-variable)
PRIVATE -Wno-unused-variable
PRIVATE -fPIC)
target_include_directories(
nethack
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${NLE_INC_GEN} /usr/local/include
${CMAKE_CURRENT_SOURCE_DIR}/third_party/libtmt ${bzip2_SOURCE_DIR})
${LUA_INCLUDE} ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libtmt
${bzip2_SOURCE_DIR})
# target_link_directories(nethack PUBLIC /usr/local/lib)

# Careful with -DMONITOR_HEAP: Ironically, it fails to fclose FILE* heaplog.
# target_compile_definitions(nethack PUBLIC "$<$<CONFIG:DEBUG>:MONITOR_HEAP>")

target_link_libraries(nethack PUBLIC m fcontext bz2_static tmt)
target_link_libraries(nethack PUBLIC m fcontext bz2_static tmt ${TOPLUALIB})

# dlopen wrapper library
add_library(nethackdl STATIC "sys/unix/nledl.c")
Expand All @@ -180,7 +224,7 @@ target_link_libraries(nethackdl PUBLIC dl)
add_executable(rlmain "sys/unix/rlmain.cc")
set_target_properties(rlmain PROPERTIES CXX_STANDARD 11)
target_link_libraries(rlmain PUBLIC nethackdl)
target_include_directories(rlmain PUBLIC ${NLE_INC_GEN})
target_include_directories(rlmain PUBLIC ${NLE_INC_GEN} ${LUA_INCLUDE})
add_dependencies(rlmain util) # For pm.h.

# pybind11 core python library.
Expand All @@ -194,7 +238,8 @@ pybind11_add_module(
$<TARGET_OBJECTS:tile>)
target_link_libraries(_pynethack PUBLIC nethackdl)
set_target_properties(_pynethack PROPERTIES CXX_STANDARD 14)
target_include_directories(_pynethack PUBLIC ${NLE_INC_GEN} ${NLE_WIN}/share)
target_include_directories(_pynethack PUBLIC ${NLE_INC_GEN} ${NLE_WIN}/share
${LUA_INCLUDE})
# add_dependencies(_pynethack util tile) # For pm.h.

# ttyrec converter library
Expand Down
218 changes: 44 additions & 174 deletions dat/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,47 +5,57 @@ set(DATHELP
keyhelp
history
opthelp
optmenu
wizhelp)

set(SPECIAL_LEVELS
bigroom.des
castle.des
endgame.des
gehennom.des
knox.des
medusa.des
mines.des
oracle.des
sokoban.des
tower.des
yendor.des)

set(QUEST_LEVELS
Arch.des
Barb.des
Caveman.des
Healer.des
Knight.des
Monk.des
Priest.des
Ranger.des
Rogue.des
Samurai.des
Tourist.des
Valkyrie.des
Wizard.des)
file(
GLOB SPECIAL_LEVELS
RELATIVE ${NH_DAT}
asmodeus.lua
baalz.lua
bigrm-??.lua
castle.lua
fakewiz?.lua
juiblex.lua
knox.lua
medusa-?.lua
minend-?.lua
minefill.lua
minetn-?.lua
oracle.lua
orcus.lua
sanctum.lua
soko?-?.lua
tower?.lua
valley.lua
wizard?.lua
nhcore.lua
nhlib.lua
themerms.lua
astral.lua
air.lua
earth.lua
fire.lua
water.lua)

file(
GLOB QUEST_LEVELS
RELATIVE ${NH_DAT}
???-goal.lua ???-fil?.lua ???-loca.lua ???-strt.lua)

set(DATDLB
${DATHELP}
dungeon
dungeon.lua
tribute
${SPECIAL_LEVELS}
${QUEST_LEVELS}
bogusmon
data
engrave
epitaph
oracles
options
quest.dat
quest.lua
rumors)

file(MAKE_DIRECTORY ${NLE_DAT_GEN})
Expand All @@ -57,11 +67,11 @@ set(ALL_DAT_NOTGEN
${QUEST_LEVELS}
bogusmon.txt
data.base
dungeon.def
dungeon.lua
engrave.txt
epitaph.txt
oracles.txt
quest.txt
quest.lua
rumors.fal
rumors.tru
tribute)
Expand All @@ -74,129 +84,6 @@ endforeach(filename)
# Dat files that are not inputs to any tools.
set(ALL_DAT_NOTGEN ${ALL_DAT_NOTGEN} license symbols)

# Result of running lev_comp.
set(LEVS_GEN
Arc-fila.lev
Arc-filb.lev
Arc-goal.lev
Arc-loca.lev
Arc-strt.lev
Bar-fila.lev
Bar-filb.lev
Bar-goal.lev
Bar-loca.lev
Bar-strt.lev
Cav-fila.lev
Cav-filb.lev
Cav-goal.lev
Cav-loca.lev
Cav-strt.lev
Hea-fila.lev
Hea-filb.lev
Hea-goal.lev
Hea-loca.lev
Hea-strt.lev
Kni-fila.lev
Kni-filb.lev
Kni-goal.lev
Kni-loca.lev
Kni-strt.lev
Mon-fila.lev
Mon-filb.lev
Mon-goal.lev
Mon-loca.lev
Mon-strt.lev
Pri-fila.lev
Pri-filb.lev
Pri-goal.lev
Pri-loca.lev
Pri-strt.lev
Ran-fila.lev
Ran-filb.lev
Ran-goal.lev
Ran-loca.lev
Ran-strt.lev
Rog-fila.lev
Rog-filb.lev
Rog-goal.lev
Rog-loca.lev
Rog-strt.lev
Sam-fila.lev
Sam-filb.lev
Sam-goal.lev
Sam-loca.lev
Sam-strt.lev
Tou-fila.lev
Tou-filb.lev
Tou-goal.lev
Tou-loca.lev
Tou-strt.lev
Val-fila.lev
Val-filb.lev
Val-goal.lev
Val-loca.lev
Val-strt.lev
Wiz-fila.lev
Wiz-filb.lev
Wiz-goal.lev
Wiz-loca.lev
Wiz-strt.lev
air.lev
asmodeus.lev
astral.lev
baalz.lev
bigrm-1.lev
bigrm-10.lev
bigrm-2.lev
bigrm-3.lev
bigrm-4.lev
bigrm-5.lev
bigrm-6.lev
bigrm-7.lev
bigrm-8.lev
bigrm-9.lev
castle.lev
earth.lev
fakewiz1.lev
fakewiz2.lev
fire.lev
juiblex.lev
knox.lev
medusa-1.lev
medusa-2.lev
medusa-3.lev
medusa-4.lev
minefill.lev
minend-1.lev
minend-2.lev
minend-3.lev
minetn-1.lev
minetn-2.lev
minetn-3.lev
minetn-4.lev
minetn-5.lev
minetn-6.lev
minetn-7.lev
oracle.lev
orcus.lev
sanctum.lev
soko1-1.lev
soko1-2.lev
soko2-1.lev
soko2-2.lev
soko3-1.lev
soko3-2.lev
soko4-1.lev
soko4-2.lev
tower1.lev
tower2.lev
tower3.lev
valley.lev
water.lev
wizard1.lev
wizard2.lev
wizard3.lev)

add_custom_command(
DEPENDS $<TARGET_FILE:makedefs> bogusmon.txt engrave.txt epitaph.txt
OUTPUT bogusmon epitaph engrave
Expand Down Expand Up @@ -224,39 +111,22 @@ add_custom_command(

# Hack: Depend on date.h to avoid race.
add_custom_command(
DEPENDS $<TARGET_FILE:makedefs> ${NLE_INC_GEN}/date.h
DEPENDS $<TARGET_FILE:makedefs> generate_date_h
OUTPUT options
COMMAND makedefs ARGS -v)

# Hack: Depend on bogusmon to avoid race wrt. makedef's grep.tmp file. Best to
# be defensive about the paths (matters if NetHack's make install was run).
add_custom_command(
DEPENDS $<TARGET_FILE:makedefs> $<TARGET_FILE:dgn_comp>
${NLE_DAT_GEN}/dungeon.def ${NLE_DAT_GEN}/bogusmon
OUTPUT dungeon dungeon.pdf
COMMAND makedefs ARGS -e
COMMAND dgn_comp ARGS dungeon.pdf)

add_custom_command(
DEPENDS lev_comp
OUTPUT ${LEVS_GEN}
COMMAND lev_comp ${SPECIAL_LEVELS}
COMMAND lev_comp ${QUEST_LEVELS})

add_custom_command(
OUTPUT perm record logfile xlogfile COMMAND ${CMAKE_COMMAND} -E touch perm
record logfile xlogfile)

# Defensive dependencies for when we also build NetHack with make/make install.
list(TRANSFORM DATDLB PREPEND ${NLE_DAT_GEN}/ OUTPUT_VARIABLE
NLE_DAT_GEN_DATDLB)
list(TRANSFORM LEVS_GEN PREPEND ${NLE_DAT_GEN}/ OUTPUT_VARIABLE
NLE_DAT_GEN_LEVS_GEN)

add_custom_command(
DEPENDS dlb ${NLE_DAT_GEN_DATDLB} ${NLE_DAT_GEN_LEVS_GEN}
DEPENDS dlb ${NLE_DAT_GEN_DATDLB}
OUTPUT nhdat
COMMAND LC_ALL=C $<TARGET_FILE:dlb> ARGS cf nhdat ${DATDLB} ${LEVS_GEN})
COMMAND LC_ALL=C $<TARGET_FILE:dlb> ARGS cf nhdat ${DATDLB})

set(ALL_DAT_GEN nhdat perm record logfile xlogfile)
list(TRANSFORM ALL_DAT_GEN PREPEND ${NLE_DAT_GEN}/)
Expand Down
Loading
Loading