Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
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
56 changes: 50 additions & 6 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 MYCFLAGS=-fPIC
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,7 +194,7 @@ 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
Expand All @@ -161,13 +203,14 @@ target_compile_options(
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 +223,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 +237,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