summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt126
1 files changed, 105 insertions, 21 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d997b98..a2e3456 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,41 +35,25 @@ set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
-# Some sources and includes are generated, such as the protocol headers.
-# We defer to generate.make for these rules.
-# Note that these are raw Makefile rules, not CMake rules, so a simple
-# add_custom_command() won't work.
-execute_process(COMMAND make -f ${CMAKE_SOURCE_DIR}/generate.mk
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
-
-# The generate target must be re-run when the scripts change
-set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
- "${PROJECT_SOURCE_DIR}/generate.mk"
- "${PROJECT_SOURCE_DIR}/tools/config.py"
- "${PROJECT_SOURCE_DIR}/tools/protocol.py"
-)
-
# Search through the tree for sources
# For each subfolder in src, add all .cpp files to a subfolder's SOURCES
# variable.
-set(ALL_SOURCES "")
foreach(dir admin ast char compat conf generic high ints io login map mmo net proto-base range sexpr shared strings tests wire strtest)
file(GLOB_RECURSE ${dir}_SOURCES CONFIGURE_DEPENDS src/${dir}/*.cpp)
# Exclude any _test.cpp files from the build
- set(ALL_SOURCES ${ALL_SOURCES} ${${dir}_SOURCES})
list(FILTER ${dir}_SOURCES EXCLUDE REGEX ".*_test.cpp")
message("Adding sources in ${dir}: ${${dir}_SOURCES}")
endforeach()
-# All targets include the include/ directory
-include_directories(include)
+# All targets include the src/ and include/ directories
+include_directories(src include)
# We want -fvisibility=hidden for regular objects, but not shared libraries.
# CMake provides a helpful preset for this.
# FIXME this is currently broken
#set(CMAKE_CXX_VISIBILITY_PRESET hidden)
# General purpose build flags.
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fstack-protector -fno-strict-aliasing -flto")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fstack-protector -fno-strict-aliasing -flto=auto")
# Enable link time optimization, and track function and data sections. We let
# the linker remove unused code.
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto -ffunction-sections -fdata-sections -Wl,--gc-sections")
@@ -108,7 +92,91 @@ set(conf_SOURCES ${conf_SOURCES} src/conf/install.hpp src/conf/version.hpp)
# And have the build search for files in the build directory.
# Note that #includes with generated files should use a path relative to the
# top level source or build directory.
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/src)
+
+set(generated_conf_SOURCES
+ ${CMAKE_CURRENT_BINARY_DIR}/src/admin/admin_conf.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/admin/admin_conf.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/char/char_conf.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/char/char_conf.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/char/char_lan_conf.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/char/char_lan_conf.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/char/inter_conf.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/char/inter_conf.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/login/login_conf.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/login/login_conf.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/login/login_lan_conf.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/login/login_lan_conf.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/map/battle_conf.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/map/battle_conf.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/map/map_conf.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/map/map_conf.hpp)
+
+set(generated_proto_SOURCES
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/any-user.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/char-map.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/char-user.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/client-enum.hpp
+ # ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/client-packet-info.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/fwd.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/login-admin.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/login-char.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/login-user.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/map-user.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-AccountId.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-BeingRemoveWhy.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-BlockId.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-CharData.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-CharId.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-CharKey.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-CharSelect.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-ClientVersion.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-DamageType.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-DIR.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-EPOS.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-GlobalReg.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-HumanTimeDiff.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Item.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-ItemLook.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-ItemNameId.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-ItemType.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-LOOK.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Opt0.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Opt1.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Opt2.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Opt3.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-PartyId.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-PartyMember.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-PartyMost.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-PickupFail.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Point.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-SEX.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-SkillFlags.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-SkillID.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-SkillInfo.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-SkillValue.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Species.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-SP.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Stats6.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-StatusChange.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Storage.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/src/proto2/net-Version.hpp)
+
+add_custom_target(generate_code
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/admin
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/char
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/login
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/map
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/proto2
+ COMMAND ${CMAKE_SOURCE_DIR}/tools/config.py
+ COMMAND ${CMAKE_SOURCE_DIR}/tools/protocol.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ BYPRODUCTS ${generated_conf_SOURCES} ${generated_proto_SOURCES}
+ COMMENT "Generating code..."
+ DEPENDS
+ ${CMAKE_SOURCE_DIR}/tools/config.py
+ ${CMAKE_SOURCE_DIR}/tools/protocol.py
+)
# Add a shared library: libtmwa-shared.so.0
# When we add_executable later, we need to link against this library.
@@ -133,8 +201,11 @@ add_executable(tmwa-login ${login_SOURCES}
${mmo_SOURCES}
${net_SOURCES}
${wire_SOURCES}
+ ${generated_conf_SOURCES}
+ ${generated_proto_SOURCES}
)
target_link_libraries(tmwa-login tmwa-shared)
+add_dependencies(tmwa-login generate_code)
add_executable(tmwa-char ${char_SOURCES}
${generic_SOURCES}
@@ -143,8 +214,11 @@ add_executable(tmwa-char ${char_SOURCES}
${mmo_SOURCES}
${net_SOURCES}
${wire_SOURCES}
+ ${generated_conf_SOURCES}
+ ${generated_proto_SOURCES}
)
target_link_libraries(tmwa-char tmwa-shared)
+add_dependencies(tmwa-login generate_code)
add_executable(tmwa-map ${map_SOURCES}
${ast_SOURCES}
@@ -155,8 +229,11 @@ add_executable(tmwa-map ${map_SOURCES}
${mmo_SOURCES}
${net_SOURCES}
${wire_SOURCES}
+ ${generated_conf_SOURCES}
+ ${generated_proto_SOURCES}
)
target_link_libraries(tmwa-map tmwa-shared)
+add_dependencies(tmwa-login generate_code)
add_executable(tmwa-admin ${admin_SOURCES}
${generic_SOURCES}
@@ -165,11 +242,18 @@ add_executable(tmwa-admin ${admin_SOURCES}
${mmo_SOURCES}
${net_SOURCES}
${wire_SOURCES}
+ ${generated_conf_SOURCES}
+ ${generated_proto_SOURCES}
)
target_link_libraries(tmwa-admin tmwa-shared)
+add_dependencies(tmwa-login generate_code)
-# TODO: Call make -f ${CMAKE_SOURCE_DIR}/generate.mk clean to clean up the
+# Call 'make -f generate.mk clean' to clean up the
# generated files. We want this to be run every time we call make clean.
+add_custom_target(distclean
+ DEPENDS clean
+ COMMAND make -f generate.mk clean
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
# Install targets
install(TARGETS tmwa-login tmwa-char tmwa-map tmwa-admin tmwa-shared