@ -1,21 +1,19 @@
# m a i n p r o j e c t f i l e . u s e i t f r o m a b u i l d s u b - f o l d e r , s e e C O M P I L E f o r d e t a i l s
# # s o m e g e n e r i c C M a k e m a g i c
cmake_minimum_required ( VERSION 3. 6 FATAL_ERROR )
cmake_minimum_required ( VERSION 3. 18 FATAL_ERROR )
cmake_policy ( SET CMP0048 NEW )
cmake_policy ( SET CMP0074 NEW )
project ( dfhack )
if ( "${CMAKE_GENERATOR}" STREQUAL Ninja )
if ( "${CMAKE_VERSION}" VERSION_LESS 3.9 )
message ( WARNING "You are using an old version of CMake (${CMAKE_VERSION}) with Ninja. This may result in ninja errors - see docs/Compile.rst for more details. Upgrading your CMake version is recommended." )
endif ( )
endif ( )
# s e t u p v e r s i o n i n g .
set ( DF_VERSION "50.08" )
set ( DFHACK_RELEASE "r2rc1" )
set ( DFHACK_PRERELEASE TRUE )
if ( NOT( "${CMAKE_VERSION}" VERSION_LESS 3.12 ) )
# m a k e Z L I B _ R O O T w o r k i n C M a k e > = 3 . 1 2
# h t t p s : / / c m a k e . o r g / c m a k e / h e l p / g i t - s t a g e / p o l i c y / C M P 0 0 7 4 . h t m l
cmake_policy ( SET CMP0074 NEW )
endif ( )
set ( DFHACK_VERSION "${DF_VERSION}-${DFHACK_RELEASE}" )
set ( DFHACK_ABI_VERSION 1 )
set ( DFHACK_BUILD_ID "" CACHE STRING "Build ID (should be specified on command line)" )
# S e t u p b u i l d t y p e s
if ( CMAKE_CONFIGURATION_TYPES )
@ -123,7 +121,7 @@ elseif("${DFHACK_BUILD_ARCH}" STREQUAL "64")
set ( DFHACK_SETARCH "x86_64" )
add_definitions ( -DDFHACK64 )
else ( )
message ( SEND_ERROR "Invalid build architecture (should be 32 / 64): ${DFHACK_BUILD_ARCH}")
message ( SEND_ERROR "Invalid build architecture (should be 32 or 64): ${DFHACK_BUILD_ARCH}")
endif ( )
if ( CMAKE_CROSSCOMPILING )
@ -182,30 +180,24 @@ endif()
if ( NOT EXISTS ${ dfhack_SOURCE_DIR } /library/xml/codegen.pl
O R N O T E X I S T S $ { d f h a c k _ S O U R C E _ D I R } / s c r i p t s / C M a k e L i s t s . t x t
O R N O T E X I S T S $ { d f h a c k _ S O U R C E _ D I R } / d e p e n d s / c l s o c k e t / C M a k e L i s t s . t x t
O R N O T E X I S T S $ { d f h a c k _ S O U R C E _ D I R } / d e p e n d s / j s o n c p p - s u b / C M a k e L i s t s . t x t
O R N O T E X I S T S $ { d f h a c k _ S O U R C E _ D I R } / d e p e n d s / l i b e x p a t / e x p a t / C M a k e L i s t s . t x t
O R N O T E X I S T S $ { d f h a c k _ S O U R C E _ D I R } / d e p e n d s / l i b z i p / C M a k e L i s t s . t x t
O R N O T E X I S T S $ { d f h a c k _ S O U R C E _ D I R } / d e p e n d s / x l s x i o / C M a k e L i s t s . t x t
O R N O T E X I S T S $ { d f h a c k _ S O U R C E _ D I R } / d e p e n d s / g o o g l e t e s t / C M a k e L i s t s . t x t
O R N O T E X I S T S $ { d f h a c k _ S O U R C E _ D I R } / d e p e n d s / l u a c o v / s r c
)
message ( SEND_ERROR "One or more required submodules could not be found! Run 'git submodule update --init' from the root DFHack directory. (See the section 'Getting the Code' in docs/ Compile.rst)")
message ( SEND_ERROR "One or more required submodules could not be found! Run 'git submodule update --init' from the root DFHack directory. (See the section 'Getting the Code' in docs/ dev/compile/ Compile.rst)")
endif ( )
# s e t u p v e r s i o n i n g .
set ( DF_VERSION "50.08" )
set ( DFHACK_RELEASE "r3" )
set ( DFHACK_PRERELEASE FALSE )
set ( DFHACK_VERSION "${DF_VERSION}-${DFHACK_RELEASE}" )
set ( DFHACK_ABI_VERSION 1 )
set ( DFHACK_BUILD_ID "" CACHE STRING "Build ID (should be specified on command line)" )
# d f h a c k d a t a g o e s h e r e :
set ( DFHACK_DATA_DESTINATION hack )
# # w h e r e t o i n s t a l l things ( after the build is done, classic 'make install' or package structure )
# t h e d f h a c k l i b r a r i e s w i l l b e i n s t a l l e d h e r e :
if ( UNIX )
# p u t t h e l i b i n t o D F / h a c k
set ( DFHACK_LIBRARY_DESTINATION hack )
set ( DFHACK_LIBRARY_DESTINATION ${ DFHACK_DATA_DESTINATION } )
else ( )
# w i n d o w s i s c r a p , t h e r e f o r e w e c a n ' t d o n i c e t h i n g s w i t h i t . l e a v e t h e l i b s o n a n a s t y p i l e . . .
set ( DFHACK_LIBRARY_DESTINATION . )
@ -213,31 +205,26 @@ endif()
# e x t e r n a l t o o l s w i l l b e i n s t a l l e d h e r e :
set ( DFHACK_BINARY_DESTINATION . )
# d f h a c k d a t a g o e s h e r e :
set ( DFHACK_DATA_DESTINATION hack )
# p l u g i n l i b s g o h e r e :
set ( DFHACK_PLUGIN_DESTINATION hack/plugins )
# d f h a c k h e a d e r f i l e s g o h e r e :
set ( DFHACK_INCLUDES_DESTINATION hack/include )
set ( DFHACK_PLUGIN_DESTINATION ${ DFHACK_DATA_DESTINATION } /plugins )
# d f h a c k l u a f i l e s g o h e r e :
set ( DFHACK_LUA_DESTINATION hack /lua)
set ( DFHACK_LUA_DESTINATION ${ DFHACK_DATA_DESTINATION } /lua )
# t h e w i n d o w s . l i b f i l e g o e s h e r e :
set ( DFHACK_DEVLIB_DESTINATION hack )
set ( DFHACK_DEVLIB_DESTINATION ${ DFHACK_DATA_DESTINATION } )
# u s e r d o c u m e n t a t i o n g o e s h e r e :
set ( DFHACK_USERDOC_DESTINATION hack )
set ( DFHACK_USERDOC_DESTINATION ${ DFHACK_DATA_DESTINATION } )
# d e v e l o p e r d o c u m e n t a t i o n g o e s h e r e :
set ( DFHACK_DEVDOC_DESTINATION hack )
set ( DFHACK_DEVDOC_DESTINATION ${ DFHACK_DATA_DESTINATION } )
# s o m e o p t i o n s f o r t h e u s e r / d e v e l o p e r t o p l a y w i t h
option ( BUILD_LIBRARY "Build the library that goes into DF ." ON )
option ( BUILD_PLUGINS "Build the plugins." ON )
option ( BUILD_LIBRARY "Build the DFHack library." ON )
option ( BUILD_PLUGINS "Build the DFHack plugins." ON )
set ( CMAKE_POSITION_INDEPENDENT_CODE TRUE )
if ( UNIX )
# # f l a g s f o r G C C
# d e f a u l t t o h i d d e n s y m b o l s
# b u i l d 3 2 b i t
# e n s u r e c o m p a t i b i l i t y w i t h o l d e r C P U s
# e n a b l e C + + 1 1 f e a t u r e s
add_definitions ( -DLINUX_BUILD )
@ -254,7 +241,7 @@ if(UNIX)
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -march=i686" )
endif ( )
string ( REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" )
set ( CMAKE_INSTALL_RPATH "hack" )
set ( CMAKE_INSTALL_RPATH ${ DFHACK_LIBRARY_DESTINATION } )
elseif ( MSVC )
# f o r m s v c , t e l l i t t o a l w a y s u s e 8 - b y t e p o i n t e r s t o m e m b e r f u n c t i o n s t o a v o i d c o n f u s i o n
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /vmg /vmm /MP" )
@ -276,30 +263,36 @@ elseif(WIN32)
add_definitions ( -DWIN32 )
endif ( )
# # # # d o w n l o a d d e p e n d s # # # #
# # # # d e p e n d e n c i e s # # # #
# f i x f o r p y e n v : d e f a u l t t o ` p y t h o n 3 ` b e f o r e ` p y t h o n 3 . x `
set ( Python_FIND_UNVERSIONED_NAMES FIRST )
include ( CMake/DownloadFile.cmake )
if ( WIN32 )
# D o w n l o a d z l i b o n W i n d o w s
set ( ZLIB_DOWNLOAD_DIR ${ dfhack_SOURCE_DIR } /depends/zlib/lib/win ${ DFHACK_BUILD_ARCH } )
if ( ${ DFHACK_BUILD_ARCH } STREQUAL "64" )
download_file ( "https://github.com/DFHack/dfhack-bin/releases/download/0.44.09/win64-zlib.lib"
$ { Z L I B _ D O W N L O A D _ D I R } / z l i b . l i b
" a 3 b 2 f c 6 b 6 8 e f a f a 8 9 b 0 8 8 2 e 3 5 4 f c 8 4 1 8 " )
else ( )
download_file ( "https://github.com/DFHack/dfhack-bin/releases/download/0.44.09/win32-zlib.lib"
$ { Z L I B _ D O W N L O A D _ D I R } / z l i b . l i b
" f 4 e b a a 2 1 d 9 d e 2 8 5 6 6 e 8 8 b 1 e d f c d f f 9 0 1 " )
set ( ZLIB_FILE zlib.lib )
set ( ZLIB_PATH ${ dfhack_SOURCE_DIR } /depends/zlib/ )
set ( ZLIB_MD5 a3b2fc6b68efafa89b0882e354fc8418 )
download_file ( "https://github.com/DFHack/dfhack-bin/releases/download/0.44.09/win64-${ZLIB_FILE}"
$ { Z L I B _ P A T H } l i b / $ { Z L I B _ F I L E }
$ { Z L I B _ M D 5 } )
set ( ZLIB_ROOT ${ ZLIB_PATH } )
else ( )
# R e s c a n f o r p t h r e a d a n d z l i b i f t h e b u i l d a r c h c h a n g e d
if ( NOT "${DFHACK_BUILD_ARCH}" STREQUAL "${DFHACK_BUILD_ARCH_PREV}" )
unset ( ZLIB_LIBRARY CACHE )
unset ( CMAKE_HAVE_PTHREAD_H CACHE )
endif ( )
# M o v e z l i b t o t h e b u i l d f o l d e r s o p o s s i b l e 3 2 a n d 6 4 - b i t b u i l d s
# i n t h e s a m e s o u r c e t r e e d o n ' t c o n f l i c t
file( COPY ${ dfhack_SOURCE_DIR } /depends/zlib
D E S T I N A T I O N $ { C M A K E _ B I N A R Y _ D I R } / d e p e n d s / )
file ( COPY ${ ZLIB_DOWNLOAD_DIR } /zlib.lib
D E S T I N A T I O N $ { C M A K E _ B I N A R Y _ D I R } / d e p e n d s / z l i b / l i b / )
if ( NOT APPLE AND DFHACK_BUILD_32 )
set ( ZLIB_ROOT /usr/lib/i386-linux-gnu )
endif( )
endif ( )
find_package ( ZLIB REQUIRED )
include_directories ( ${ ZLIB_INCLUDE_DIRS } )
if ( WIN32 )
# D o t h e s a m e f o r S D L . d l l
# ( D F H a c k d o e s n ' t r e q u i r e t h i s a t b u i l d t i m e , s o n o n e e d t o m o v e i t t o t h e b u i l d f o l d e r )
# T O D O : r e m o v e S D L . d l l f r o m o u r d i s t r i b u t i o n o n c e D F m o v e s t o S D L 2 . w e o n l y
@ -315,7 +308,6 @@ if(WIN32)
$ { S D L _ D O W N L O A D _ D I R } / S D L . d l l
" 5 a 0 9 6 0 4 d a c a 6 b 2 b 5 c e 0 4 9 d 7 9 a f 9 3 5 d 6 a " )
endif ( )
endif ( )
if ( APPLE )
@ -376,29 +368,6 @@ endif()
# # # # e x p o s e d e p e n d s # # # #
# f i x f o r p y e n v : d e f a u l t t o ` p y t h o n 3 ` b e f o r e ` p y t h o n 3 . x `
set ( Python_FIND_UNVERSIONED_NAMES FIRST )
if ( UNIX )
# R e s c a n f o r p t h r e a d a n d z l i b i f t h e b u i l d a r c h c h a n g e d
if ( NOT "${DFHACK_BUILD_ARCH}" STREQUAL "${DFHACK_BUILD_ARCH_PREV}" )
unset ( ZLIB_LIBRARY CACHE )
unset ( CMAKE_HAVE_PTHREAD_H CACHE )
endif ( )
endif ( )
# f i n d a n d m a k e a v a i l a b l e l i b z
if ( NOT UNIX ) # W i n d o w s
# z l i b i s i n h e r e s o 3 2 - b i t a n d 6 4 - b i t b u i l d s i n t h e s a m e s o u r c e t r e e a r e p o s s i b l e
set ( ZLIB_ROOT ${ CMAKE_BINARY_DIR } /depends/zlib/ )
else ( )
if ( NOT APPLE AND DFHACK_BUILD_32 )
# 3 2 - b i t L i n u x
set ( ZLIB_ROOT /usr/lib/i386-linux-gnu )
endif ( )
endif ( )
find_package ( ZLIB REQUIRED )
include_directories ( depends/protobuf )
include_directories ( depends/lua/include )
include_directories ( depends/md5 )
@ -420,7 +389,6 @@ endif()
include_directories ( depends/lodepng )
include_directories ( depends/tthread )
include_directories ( ${ ZLIB_INCLUDE_DIRS } )
include_directories ( depends/clsocket/src )
include_directories ( depends/xlsxio/include )
add_subdirectory ( depends )