Update readme and fix up some build system problems

develop
Petr Mrázek 2010-03-26 12:20:30 +01:00
parent 0560ce66aa
commit 02b7d92135
4 changed files with 141 additions and 84 deletions

@ -5,6 +5,18 @@ First, there is one dependency, regardless of the OS you use:
cmake - it's the build system cmake - it's the build system
Dependencies
============
You'll need cmake and 'a' compiler for building the main lib and the various tools.
To build the libdfconnect on Linux, you'll have to make a 32bit build.
To build the fake SDL.dll on Windows, you'll have to use MSVC 2008 Express and make
a Release or RelWithDebInfo build.
The python bindings require SWIG and the python devel libs for building.
(Linux only) Veinlook requires the wide-character ncurses library (libncursesw)
Building on Linux: Building on Linux:
-------------------- --------------------
@ -36,9 +48,11 @@ See the section on the shared memory hook library (SHM).
Building on Windows: Building on Windows:
-------------------- --------------------
You need cmake. Get the win32 installer version from the official site: http://www.cmake.org/cmake/resources/software.html You need cmake. Get the win32 installer version from the official site:
http://www.cmake.org/cmake/resources/software.html
It has the usual installer wizard thing. It has the usual installer wizard thing.
* Using mingw: * Using mingw:
You also need a compiler. I build dfhack using mingw. You can get it from the mingw site: You also need a compiler. I build dfhack using mingw. You can get it from the mingw site:
@ -51,16 +65,22 @@ You'll have to add C:\MinGW\ to your PATH variable.
cmake .. -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE:string=Release cmake .. -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE:string=Release
mingw32-make mingw32-make
* Using MSVC * Using MSVC
open up cmd and navigate to the dfhack\build folder, run cmake: open up cmd and navigate to the dfhack\build folder, run cmake:
cd build cd build
cmake .. cmake ..
This will generate MSVC solution and project files. Note that: you are working in the /build folder. This will generate MSVC solution and project files.
Files added to projects will end up there! (and that's wrong). Any changes to the build system should Note that: you are working in the /build folder. Files added to projects will
end up there! (and that's wrong). Any changes to the build system should
be done by changing cmake configs and running cmake on them! be done by changing cmake configs and running cmake on them!
Alo, you'll have to copy the Memory.xml file to the build output folders
MSVC generates. For example from 'output/' to 'output/Release/'
* Using some other compiler: * Using some other compiler:
I'm afraid you are on your own. dfhack wasn't tested with any other compiler. I'm afraid you are on your own. dfhack wasn't tested with any other compiler.
@ -70,19 +90,22 @@ Try using a different cmake generator that's intended for your tools.
Building the shared memory hook library (SHM) Building the shared memory hook library (SHM)
--------------------------------------------- ---------------------------------------------
Unlike the rest of DFHack, The SHM needs special treatment when it comes to compilation. Unlike the rest of DFHack, The SHM needs special treatment when it comes to
Because it shares the memory space with DF itself, it has to be built with the same tools as DF compilation. Because it shares the memory space with DF itself, it has to be
and use the same C and C++/STL libraries. built with the same tools as DF and use the same C and C++/STL libraries.
For DF 40d15 - 40d17 on Windows, use MSVC 2008. You can get the Express edition for free from Microsoft. For DF 40d15 - 40d19_2 on Windows, use MSVC 2008. You can get the Express
edition for free from Microsoft.
Windows dependencies can be determined by a tool like depends.exe (google it). Both the fake SDL.dll Windows dependencies can be determined by a tool like depends.exe (google it).
and DF have to use the same version of the C runtime (MSVCRT). Both the fake SDL.dll and DF have to use the same version of the C runtime
The SHM can't be debugged, because debug builds in MSVC use a different CRT! (MSVCRT).
The SHM can only be debugged using a RelWithDebInfo build!
Linux dependencies can be determined by setting the LD_DEBUG variable and running ./df: Linux dependencies can be determined by setting the LD_DEBUG variable and
export LD_DEBUG=versions running ./df:
./df $export LD_DEBUG=versions
$./df
Example of (a part of a) relevant output from a working SHM installation: Example of (a part of a) relevant output from a working SHM installation:
24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libpthread.so.0 [0] required by file ./dwarfort.exe [0] 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libpthread.so.0 [0] required by file ./dwarfort.exe [0]
@ -104,26 +127,30 @@ Example of (a part of a) relevant output from a working SHM installation:
24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
libdfconnect is the SHM. Both are compiled against the same C++ library and share the same CXXABI version. libdfconnect is the SHM. Both are compiled against the same C++ library and
share the same CXXABI version.
Precompiled SHM libraries are provided in binary releases. Precompiled SHM libraries are provided in binary releases.
* Checking strings support * Checking strings support
Strings are one of the important C++ types and a great indicator that the SHM works. Tools like Dwarf Therapist depend Strings are one of the important C++ types and a great indicator that the SHM
on string support. Reading of strings can be checked by running any of the tools that deal with materials. works. Tools like Dwarf Therapist depend on string support. Reading of strings
can be checked by running any of the tools that deal with materials.
String writing is best tested with a fresh throw-away fort and dfrenamer. Embark, give one dwarf a very long name using dfrenamer String writing is best tested with a fresh throw-away fort and dfrenamer.
and save/exit. If DF crashes during the save sequence, your SHM is not compatible with DF and the throw-away fort is lost. Embark, give one dwarf a very long name using dfrenamer and save/exit.
If DF crashes during the save sequence, your SHM is not compatible with DF and
the throw-away fort is most probably lost.
Build targets Build targets
------------- -------------
dfhack has a few build targets. If you're only after the library run 'make dfhack'. dfhack has a few build targets.
If you're only after the library run 'make dfhack'.
'make' will build everything. 'make' will build everything.
'make expbench' will build the expbench throughput testing program and the library. 'make expbench' will build the expbench testing program and the library.
Build types Build types
----------- -----------
@ -132,7 +159,9 @@ cmake allows you to pick a build type by changing this variable: CMAKE_BUILD_TYP
cmake .. -DCMAKE_BUILD_TYPE:string=BUILD_TYPE cmake .. -DCMAKE_BUILD_TYPE:string=BUILD_TYPE
Without specifying a build type or 'None', cmake uses the CMAKE_CXX_FLAGS variable for building. Without specifying a build type or 'None', cmake uses the CMAKE_CXX_FLAGS
Valid build types include 'Release' and 'Debug'. There are others, but they aren't really that useful. variable for building.
Valid an useful build types include 'Release', 'Debug' and 'RelWithDebInfo'.
There are others, but they aren't really that useful.
Have fun. Have fun.

103
README

@ -8,16 +8,31 @@ tools are written for it.
It is an attempt to unite the various ways tools access DF memory and allow for It is an attempt to unite the various ways tools access DF memory and allow for
easier development of new tools. easier development of new tools.
Getting DFHack Getting DFHack
---------------- ----------------
The project is currently hosted on github: The project is currently hosted on github, for both source and binaries:
http://github.com/peterix/dfhack http://github.com/peterix/dfhack
There's an SVN repository at sourceforge, but will only be updated for major releases: * Packages
https://sourceforge.net/projects/dfhack/
* subversion access: The library and tools are packaged for Archlinux and are available both in AUR
svn co https://dfhack.svn.sourceforge.net/svnroot/dfhack/trunk dfhack and the arch-games repository.
The package name is dfhack-git :)
Clarification
-------------
'fake SDL.dll', 'SHM', 'libdfconnect' and 'shim library' are basically the same
thing. A library that sits between DFHack and DF, provides some extra features,
synchronisation and access control. You should use it for everything that writes
data back to DF.
You'll need the SHM to attach more than one tool to DF on Linux.
The DFHack version of Dwarf Therapist requires it for writing creature names
and professions.
See 'Using DFHack Tools' for instructions on installing it.
Compatibility Compatibility
------------- -------------
@ -31,15 +46,20 @@ OSX is also not supported due to lack of developers with a Mac.
Currently supported Dwarf Fortress versions: Currently supported Dwarf Fortress versions:
* Windows * Windows
40d 38a - 40d19_2
40d9 - 40d18
* Linux * Linux
40d9 - 40d18 40d2 - 40d19
Currently supported DF versions *by the SHM*:
* Windows
40d15 - 40d19
* Linux
40d9 - 40d19 (40d2 - 40d8 might work, but are untested)
Using the library Using the library as a developer
----------------- --------------------------------
The library is compilable under Linux with GCC and under Windows with MinGW32 The library is compilable under Linux with GCC and under Windows with MinGW32
and MSVC compilers. It is using the cmake build system. See COMPILE for details. and MSVC compilers. It is using the cmake build system. See COMPILE for details.
@ -49,7 +69,7 @@ it in-source or add your own extensions. Contributing back to the dfhack
repository is welcome and the right thing to do :) repository is welcome and the right thing to do :)
At the time of writing there's no API reference or documentation. The code does At the time of writing there's no API reference or documentation. The code does
have a lot of comments though. have a lot of comments though (and getting better all the time).
Using DFHack Tools Using DFHack Tools
@ -61,8 +81,8 @@ provide data consistency and synchronization. DFHack will work without the
library, but at suboptimal speeds and the consistency of data written back library, but at suboptimal speeds and the consistency of data written back
to DF is questionable. to DF is questionable.
!!! on Windows this currently only works with DF 40d15 - 40d18 !!! !!! on Windows this currently only works with DF 40d15 - 40d19_2 !!!
On Linux, it works with the whole range of supported DF versions. On Linux, it works with DF 40d9 - 40d19
!!! use the pre-compiled library intended for your OS and version of DF !!! !!! use the pre-compiled library intended for your OS and version of DF !!!
You can find them in the 'precompiled' folder. You can find them in the 'precompiled' folder.
@ -83,27 +103,12 @@ to DF is questionable.
** Installing on Linux ** Installing on Linux
- Open your DF folder and the libs folder within it - Open your DF folder and the libs folder within it
- copy DFHack libdfconnect.so to the libs folder - copy DFHack libdfconnect.so to the libs folder
- copy the df startup script, name it dfhacked - copy the df-hacked script to your DF folder
- open the new dfhacked startup script and add this line:
export LD_PRELOAD="./libs/libdfconnect.so" # Hack DF!
just before the line that launches DF
Here's an example how the file can look after the change:
#!/bin/sh
DF_DIR=$(dirname "$0")
cd "${DF_DIR}"
export SDL_DISABLE_LOCK_KEYS=1 # Work around for bug in Debian/Ubuntu SDL patch.
#export SDL_VIDEO_CENTERED=1 # Centre the screen. Messes up resizing.
ldd dwarfort.exe | grep SDL_image | grep -qv "not found$"
if [ $? -eq 0 ]; then
mkdir unused_libs
mv libs/libSDL* unused_libs/
fi
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"./libs" # Update library search path.
export LD_PRELOAD="./libs/libdfconnect.so" # Hack DF!
./dwarfort.exe $* # Go, go, go! :)
- Use this new startup script to start DF - Use this new startup script to start DF
** Replacing libdfconnect.so
- Make sure you close DF before you replace this file! DF crashes whn you don't
close it first!
** Uninstalling on Linux ** Uninstalling on Linux
- Open your DF and DF/libs folders - Open your DF and DF/libs folders
@ -121,9 +126,16 @@ be useful and are cross-platform just like the library itself.
If the tool writes back to DF's memory, make sure you are using the shared If the tool writes back to DF's memory, make sure you are using the shared
memory interface mentioned in the previous section! memory interface mentioned in the previous section!
* catsplosion- Makes all cats pregnant and due in 100 game steps. Use with care.
* magma_create - creates 7/7 magma at the DF's cursor
* reveal - plain old reveal tool. It reveals all the map blocks already * reveal - plain old reveal tool. It reveals all the map blocks already
initialized by DF. initialized by DF.
* veinlook - a silly map viewer. It can mass-dig veins in a map square.
(Linux only)
* prospector - scans the map for minerals. by default it only scans only visible * prospector - scans the map for minerals. by default it only scans only visible
veins. You can make it show hidden things with '-a' and base rock veins. You can make it show hidden things with '-a' and base rock
and soil layers with '-b'. These can be combined ('-ab') and soil layers with '-b'. These can be combined ('-ab')
@ -132,7 +144,7 @@ memory interface mentioned in the previous section!
It will clean your irrigated farms too, so consider yourself It will clean your irrigated farms too, so consider yourself
warned. warned.
* incremental - incremental search utility. * incrementalsearch - incremental search utility (Linux only).
* bauxite - converts all mechanisms into bauxite mechanisms. * bauxite - converts all mechanisms into bauxite mechanisms.
@ -150,16 +162,17 @@ memory interface mentioned in the previous section!
6 = STAIR_UPDOWN 6 = STAIR_UPDOWN
7 = RAMP 7 = RAMP
8 = RAMP_TOP
8 = FLOOR 9 = FLOOR
9 = TREE_DEAD 10 = TREE_DEAD
10 = TREE_OK 11 = TREE_OK
11 = SAPLING_DEAD 12 = SAPLING_DEAD
12 = SAPLING_OK 13 = SAPLING_OK
13 = SHRUB_DEAD 14 = SHRUB_DEAD
14 = SHRUB_OK 15 = SHRUB_OK
15 = BOULDER 16 = BOULDER
16 = PEBBLES 17 = PEBBLES
Example : dfdigger -o 100,100,15 -t 9,10 -m 10 Example : dfdigger -o 100,100,15 -t 9,10 -m 10
This will start looking for trees at coords 100,100,15 and designate ten of them for cutting. This will start looking for trees at coords 100,100,15 and designate ten of them for cutting.
@ -169,6 +182,6 @@ Memory offset definitions
------------------------- -------------------------
The file with memory offset definitions used by dfhack can be found in the The file with memory offset definitions used by dfhack can be found in the
output folder. output folder.
~ EOF ~ ~ EOF ~

@ -29,7 +29,8 @@ TARGET_LINK_LIBRARIES(dfmaterialtest dfhack)
ADD_EXECUTABLE(dfposition position.cpp) ADD_EXECUTABLE(dfposition position.cpp)
TARGET_LINK_LIBRARIES(dfposition dfhack) TARGET_LINK_LIBRARIES(dfposition dfhack)
# suspendtest - test if suspend works. df should stop responding when suspended by dfhack # suspendtest - test if suspend works. df should stop responding when suspended
# by dfhack
ADD_EXECUTABLE(dfsuspend suspendtest.cpp) ADD_EXECUTABLE(dfsuspend suspendtest.cpp)
TARGET_LINK_LIBRARIES(dfsuspend dfhack) TARGET_LINK_LIBRARIES(dfsuspend dfhack)
@ -44,8 +45,8 @@ TARGET_LINK_LIBRARIES(dfhotkeynotedump dfhack)
# findnameindexes # findnameindexes
# Author: belal # Author: belal
ADD_EXECUTABLE(dffindnameindexes findnameindexes.cpp) #ADD_EXECUTABLE(dffindnameindexes findnameindexes.cpp)
TARGET_LINK_LIBRARIES(dffindnameindexes dfhack) #TARGET_LINK_LIBRARIES(dffindnameindexes dfhack)
# settlementdump - dumps the settlements on the loaded map # settlementdump - dumps the settlements on the loaded map
# Author: belal # Author: belal
@ -53,8 +54,8 @@ ADD_EXECUTABLE(dfsettlementdump settlementdump.cpp)
TARGET_LINK_LIBRARIES(dfsettlementdump dfhack) TARGET_LINK_LIBRARIES(dfsettlementdump dfhack)
# veccheck - read vector values at address # veccheck - read vector values at address
ADD_EXECUTABLE(dfvecc veccheck.cpp) #ADD_EXECUTABLE(dfvecc veccheck.cpp)
TARGET_LINK_LIBRARIES(dfvecc dfhack) #TARGET_LINK_LIBRARIES(dfvecc dfhack)
# catsplosion - Makes every cat pregnant, and almost due... # catsplosion - Makes every cat pregnant, and almost due...
# Author: Zhentar # Author: Zhentar
@ -97,21 +98,27 @@ IF(UNIX)
ENDIF(CURSES_FOUND) ENDIF(CURSES_FOUND)
ENDIF(UNIX) ENDIF(UNIX)
# renamer - change the custom names and professions of creatures, sends keys to df directly # renamer - change the custom names and professions of creatures, sends keys to
# df directly
# Author: belal
ADD_EXECUTABLE(dfrenamer renamer.cpp) ADD_EXECUTABLE(dfrenamer renamer.cpp)
TARGET_LINK_LIBRARIES(dfrenamer dfhack) TARGET_LINK_LIBRARIES(dfrenamer dfhack)
IF(UNIX) IF(UNIX)
install(TARGETS install(TARGETS
dfattachtest dfattachtest
dfbuildingsdump
dfcreaturedump
dfitemdump
dfexpbench dfexpbench
dfcreaturedump
dfbuildingsdump
dfmaterialtest dfmaterialtest
dfposition dfposition
dfrenamer
dfsuspend dfsuspend
dfitemdump
dfhotkeynotedump
#dffindnameindexes
dfsettlementdump
dfrenamer
#dfvecc
dfcatsplosion dfcatsplosion
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
) )

@ -17,9 +17,12 @@ TARGET_LINK_LIBRARIES(dfprospector dfhack)
ADD_EXECUTABLE(dfcleanmap cleanmap.cpp) ADD_EXECUTABLE(dfcleanmap cleanmap.cpp)
TARGET_LINK_LIBRARIES(dfcleanmap dfhack) TARGET_LINK_LIBRARIES(dfcleanmap dfhack)
# incrementalsearch - a bit like cheat engine, only DF-specific and very basic IF(UNIX)
# incrementalsearch - a bit like cheat engine, only DF-specific, very basic
# and Linux-only
ADD_EXECUTABLE(dfincremental incrementalsearch.cpp) ADD_EXECUTABLE(dfincremental incrementalsearch.cpp)
TARGET_LINK_LIBRARIES(dfincremental dfhack) TARGET_LINK_LIBRARIES(dfincremental dfhack)
ENDIF(UNIX)
# bauxite - turn all mechanisms into bauxite mechanisms # bauxite - turn all mechanisms into bauxite mechanisms
# Author: Alex Legg # Author: Alex Legg
@ -31,22 +34,27 @@ TARGET_LINK_LIBRARIES(dfbauxite dfhack)
ADD_EXECUTABLE(dfdigger digger.cpp) ADD_EXECUTABLE(dfdigger digger.cpp)
TARGET_LINK_LIBRARIES(dfdigger dfhack) TARGET_LINK_LIBRARIES(dfdigger dfhack)
# itemdesignator - change some item designations (dump, forbid, on-fire) for all items of a given type and material # itemdesignator - change some item designations (dump, forbid, on-fire) for all
# items of a given type and material
# Author: belal
ADD_EXECUTABLE(dfitemdesignator itemdesignator.cpp) ADD_EXECUTABLE(dfitemdesignator itemdesignator.cpp)
TARGET_LINK_LIBRARIES(dfitemdesignator dfhack) TARGET_LINK_LIBRARIES(dfitemdesignator dfhack)
# a magma creation toold # a magma creation tool
# Author: Aleric
ADD_EXECUTABLE(dfmagma_create magma_create.cpp) ADD_EXECUTABLE(dfmagma_create magma_create.cpp)
TARGET_LINK_LIBRARIES(dfmagma_create dfhack) TARGET_LINK_LIBRARIES(dfmagma_create dfhack)
IF(UNIX) IF(UNIX)
install(TARGETS install(TARGETS
dfreveal dfbauxite
dfprospector
dfcleanmap dfcleanmap
dfdigger
dfincremental dfincremental
dfbauxite
dfitemdesignator dfitemdesignator
dfmagma_create
dfprospector
dfreveal
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
) )
ENDIF(UNIX) ENDIF(UNIX)