1. CC = g++6
  2. GAME_VERSION := $(shell cat ../../__REVISION__)
  3. GccMajorVersion := $(shell expr `$(CC) -dumpversion | cut -f1 -d.`)
  4. GccMinorVersion := $(shell expr `$(CC) -dumpversion | cut -f2 -d.`)
  5. GccMinorEGT8 := $(shell expr $(GccMinorVersion) \>= 8)
  6. INCDIR =
  7. LIBDIR =
  8. BINDIR = ..
  9. OBJDIR = .obj
  10. $(shell if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi)
  11. ## LIST OF CONSTANTS BEGIN
  12. ENABLE_GOOGLE_TEST = 0
  13. ENABLE_HSHIELD_SYSTEM = 0
  14. ENABLE_XTRAP_SYSTEM = 0
  15. ENABLE_LUA_5_VERSION = 0
  16. ENABLE_GCC_AUTODEPEND = 1
  17. ENABLE_STATIC = 0
  18. ## LIST OF CONSTANTS END
  19. # Depend Path File
  20. ifneq ($(ENABLE_GCC_AUTODEPEND), 1)
  21. DEPFILE = Depend
  22. endif
  23. # Standard Libraries
  24. LIBS = -lm -lmd
  25. # Project Flags
  26. CFLAGS = -m32 -g -Wall -O2 -pipe -fexceptions -fno-strict-aliasing -pthread -D_THREAD_SAFE -DNDEBUG -static-libstdc++
  27. CFLAGS += -Wno-deprecated-declarations -Wno-nonnull-compare -Wno-deprecated-declarations -Wno-array-bounds -Wunused-but-set-variable -Wno-address -Wunused-but-set-variable -Wmaybe-uninitialized
  28. CXXFLAGS = -std=c++11 -Wl,-rpath=/usr/local/lib/gcc6
  29. ifeq ($(ENABLE_STATIC), 1)
  30. CFLAGS += -static
  31. endif
  32. ifeq ($(GccMinorEGT8), 1)
  33. CFLAGS += -Wno-unused-local-typedefs
  34. endif
  35. # FreeBSD stack protector
  36. CFLAGS += -fstack-protector-all
  37. # Version defines
  38. CFLAGS += -D__USER__=\"$(USER)\" -D__HOSTNAME__=\"$(HOSTNAME)\" -D__PWD__=\"$(PWD)\" -D__GAME_VERSION__=\"$(GAME_VERSION)\"
  39. # Boost
  40. INCDIR += -I../../../Extern/include/boost
  41. # DevIL
  42. INCDIR += -I../../../Extern/include/IL
  43. LIBS += ../../../Extern/lib/libIL.a\
  44. ../../../Extern/lib/libjasper.a\
  45. ../../../Extern/lib/libpng.a\
  46. ../../../Extern/lib/libtiff.a\
  47. ../../../Extern/lib/libjbig.a\
  48. ../../../Extern/lib/libmng.a\
  49. /usr/lib/liblzma.a\
  50. ../../../Extern/lib/liblcms.a\
  51. ../../../Extern/lib/libjpeg.a
  52. # MySQL
  53. INCDIR += -I/usr/local/include/mysql
  54. LIBS += /usr/local/lib/mysql/libmysqlclient.a /usr/lib/libz.a
  55. # CryptoPP
  56. LIBS += ../../../Extern/lib/libcryptopp.a
  57. # GTest
  58. ifeq ($(ENABLE_GOOGLE_TEST), 1)
  59. LIBS += /usr/local/lib/libgtest.a
  60. CFLAGS += -DENABLE_GOOGLE_TEST
  61. endif
  62. # HackShield
  63. ifeq ($(ENABLE_HSHIELD_SYSTEM), 1)
  64. INCDIR += -I../../libhackshield/include
  65. CFLAGS += -DENABLE_HSHIELD_SYSTEM
  66. endif
  67. # XTrap
  68. ifeq ($(ENABLE_XTRAP_SYSTEM), 1)
  69. INCDIR += -I../../libxtrap/include
  70. CFLAGS += -DENABLE_XTRAP_SYSTEM
  71. endif
  72. # OpenSSL
  73. INCDIR += -I/usr/include
  74. LIBS += -lssl -lcrypto
  75. # LIBS += /usr/lib/libssl.a
  76. # Lua
  77. CFLAGS += -DENABLE_LUA_5_VERSION=ENABLE_LUA_5_VERSION
  78. ifeq ($(ENABLE_LUA_5_VERSION), 2)
  79. INCDIR += -I../../liblua/5.2/install/include
  80. LIBDIR += -L../../liblua/5.2/install/lib
  81. LIBS += ../../liblua/5.2/install/lib/liblua.a
  82. else
  83. INCDIR += -I../../liblua/5.0/include
  84. LIBDIR += -L../../liblua/5.0/lib
  85. LIBS += ../../liblua/5.0/lib/liblua.a ../../liblua/5.0/lib/liblualib.a
  86. endif
  87. # Project Libraries
  88. INCDIR += -I../../../Extern/include
  89. INCDIR += -I/usr/local/include
  90. LIBDIR += -L/usr/local/lib
  91. INCDIR += -I../../libserverkey
  92. LIBDIR += -L../../libthecore/lib -L../../libpoly -L../../libsql -L../../libgame/lib -L../../libserverkey
  93. LIBS += -lthecore -lpoly -lsql -lgame -lserverkey
  94. # PROJECT_SRC_FILES BEGIN
  95. MAINCPP = main.cpp
  96. CFILE = minilzo.c
  97. CPPFILE = char_battle_zodiac.cpp char_zodiac_temple.cpp questlua_zodiac_temple.cpp zodiac_temple.cpp aura_refine.cpp combat_zone.cpp damage_top.cpp itemshop_manager.cpp drop_item.cpp TempleOchao.cpp questlua_TempleOchao.cpp char_cards.cpp title.cpp maintenance.cpp MountSystem.cpp BattleArena.cpp FSM.cpp MarkConvert.cpp MarkImage.cpp MarkManager.cpp OXEvent.cpp TrafficProfiler.cpp ani.cpp\
  98. arena.cpp banword.cpp battle.cpp blend_item.cpp block_country.cpp buffer_manager.cpp building.cpp castle.cpp\
  99. char.cpp char_affect.cpp char_battle.cpp char_change_empire.cpp char_horse.cpp char_item.cpp char_manager.cpp\
  100. char_quickslot.cpp char_resist.cpp char_skill.cpp char_state.cpp PetSystem.cpp cmd.cpp cmd_emotion.cpp cmd_general.cpp\
  101. cmd_gm.cpp cmd_oxevent.cpp config.cpp constants.cpp crc32.cpp cuberenewal.cpp db.cpp desc.cpp\
  102. desc_client.cpp desc_manager.cpp desc_p2p.cpp dev_log.cpp dungeon.cpp empire_text_convert.cpp entity.cpp\
  103. entity_view.cpp event.cpp event_queue.cpp exchange.cpp file_loader.cpp fishing.cpp gm.cpp guild.cpp\
  104. guild_manager.cpp guild_war.cpp horse_rider.cpp horsename_manager.cpp input.cpp input_auth.cpp input_db.cpp\
  105. input_login.cpp input_main.cpp input_p2p.cpp input_teen.cpp input_udp.cpp ip_ban.cpp\
  106. item.cpp item_addon.cpp item_attribute.cpp item_manager.cpp item_manager_idrange.cpp locale.cpp\
  107. locale_service.cpp log.cpp login_data.cpp lzo_manager.cpp marriage.cpp matrix_card.cpp\
  108. messenger_manager.cpp mining.cpp mob_manager.cpp monarch.cpp motion.cpp over9refine.cpp p2p.cpp packet_info.cpp\
  109. party.cpp passpod.cpp pcbang.cpp polymorph.cpp priv_manager.cpp pvp.cpp\
  110. questevent.cpp questlua.cpp questlua_affect.cpp questlua_arena.cpp questlua_ba.cpp questlua_building.cpp\
  111. questlua_danceevent.cpp questlua_dungeon.cpp questlua_forked.cpp questlua_game.cpp questlua_global.cpp\
  112. questlua_guild.cpp questlua_horse.cpp questlua_pet.cpp questlua_item.cpp questlua_marriage.cpp questlua_mgmt.cpp\
  113. questlua_monarch.cpp questlua_npc.cpp questlua_oxevent.cpp questlua_party.cpp questlua_pc.cpp\
  114. questlua_quest.cpp questlua_target.cpp questmanager.cpp questnpc.cpp questpc.cpp\
  115. refine.cpp regen.cpp safebox.cpp sectree.cpp sectree_manager.cpp sequence.cpp shop.cpp\
  116. skill.cpp start_position.cpp target.cpp text_file_loader.cpp trigger.cpp utils.cpp vector.cpp war_map.cpp\
  117. wedding.cpp xmas_event.cpp version.cpp panama.cpp threeway_war.cpp map_location.cpp auth_brazil.cpp\
  118. BlueDragon.cpp BlueDragon_Binder.cpp DragonLair.cpp questlua_dragonlair.cpp\
  119. HackShield.cpp HackShield_Impl.cpp char_hackshield.cpp skill_power.cpp affect.cpp\
  120. SpeedServer.cpp questlua_speedserver.cpp XTrapManager.cpp auto_event_manager.cpp DailyBoss.cpp\
  121. auction_manager.cpp FileMonitor_FreeBSD.cpp ClientPackageCryptInfo.cpp cipher.cpp item_block.cpp\
  122. buff_on_attributes.cpp dragon_soul_table.cpp DragonSoul.cpp MeleyLair.cpp questlua_MeleyLair.cpp map_manager.cpp\
  123. group_text_parse_tree.cpp char_dragonsoul.cpp questlua_dragonsoul.cpp SupportSystem.cpp questlua_support.cpp New_PetSystem.cpp questlua_petnew.cpp\
  124. shop_manager.cpp shopEx.cpp item_manager_read_tables.cpp shutdown_manager.cpp instant_equip.cpp biolog.cpp attr_transfer.cpp switchbot.cpp
  125. # PROJECT_SRC_FILES END
  126. # PROJECT_OBJ_FILES BEGIN
  127. COBJS = $(CFILE:%.c=$(OBJDIR)/%.o)
  128. CPPOBJS = $(CPPFILE:%.cpp=$(OBJDIR)/%.o)
  129. ifeq ($(ENABLE_GCC_AUTODEPEND), 1)
  130. CDEPS = $(COBJS:%.o=%.d)
  131. CPPDEPS = $(CPPOBJS:%.o=%.d)
  132. endif
  133. MAINOBJ = $(MAINCPP:%.cpp=$(OBJDIR)/%.o)
  134. ifeq ($(ENABLE_GCC_AUTODEPEND), 1)
  135. MAINDEPS = $(MAINOBJ:%.o=%.d)
  136. endif
  137. # PROJECT_OBJ_FILES END
  138. # Target Paths
  139. MAIN_TARGET = $(BINDIR)/game_r$(GAME_VERSION)
  140. #MAIN_TARGET = $(BINDIR)/game
  141. default: $(MAIN_TARGET)
  142. test: $(TEST_TARGET)
  143. $(OBJDIR)/%.o: %.c
  144. @echo compiling $<
  145. @$(CC) $(CFLAGS) $(INCDIR) -c $< -o $@
  146. ifeq ($(ENABLE_GCC_AUTODEPEND), 1)
  147. @$(CC) -MM -MG -MP $(CFLAGS) $(INCDIR) -c $< -o $(OBJDIR)/$*.d
  148. @sed -i '' -e's/$*.o:/$(OBJDIR)\/$*.o:/g' $(OBJDIR)/$*.d
  149. endif
  150. $(OBJDIR)/%.o: %.cpp
  151. @echo compiling $<
  152. @$(CC) $(CFLAGS) $(CXXFLAGS) $(INCDIR) -c $< -o $@
  153. ifeq ($(ENABLE_GCC_AUTODEPEND), 1)
  154. @$(CC) -MM -MG -MP $(CFLAGS) $(CXXFLAGS) $(INCDIR) -c $< -o $(OBJDIR)/$*.d
  155. @sed -i '' -e's/$*.o:/$(OBJDIR)\/$*.o:/g' $(OBJDIR)/$*.d
  156. endif
  157. limit_time:
  158. @echo update limit time
  159. @python update_limit_time.py
  160. $(MAIN_TARGET): $(CPPOBJS) $(COBJS) $(MAINOBJ)
  161. @echo linking $(MAIN_TARGET)
  162. @$(CC) $(CFLAGS) $(CXXFLAGS) $(LIBDIR) $(COBJS) $(CPPOBJS) $(MAINOBJ) $(LIBS) -o $(MAIN_TARGET)
  163. dump:
  164. @$(CC) -dM -E - < /dev/null > .nope.nope
  165. symlink:
  166. @ln -fs game_r$(GAME_VERSION) $(BINDIR)/game_symlink
  167. strip:
  168. @cp $(MAIN_TARGET) $(BINDIR)/game_r
  169. @strip $(BINDIR)/game_r
  170. clean:
  171. @echo cleaning $(MAIN_TARGET) $(OBJDIR)
  172. @rm -f $(COBJS) $(CPPOBJS) $(MAINOBJ)
  173. ifeq ($(ENABLE_GCC_AUTODEPEND), 1)
  174. @rm -f $(CDEPS) $(CPPDEPS) $(MAINDEPS)
  175. endif
  176. @rm -f $(BINDIR)/game_r* $(BINDIR)/test_r* $(BINDIR)/conv
  177. dep:
  178. ifeq ($(ENABLE_GCC_AUTODEPEND), 1)
  179. @echo "Note: gcc autodepend is autodetected, so target dep skipped"
  180. else
  181. makedepend -f $(DEPFILE) $(INCDIR) -I/usr/include/c++/3.3 -I/usr/include/c++/4.2 -p$(OBJDIR)/ $(CPPFILE) $(CFILE) $(MAINCPP) $(TESTCPP) 2> /dev/null > $(DEPFILE)
  182. endif
  183. # AUTO_DEPEND_CHECK BEGIN
  184. ifeq ($(ENABLE_GCC_AUTODEPEND), 1)
  185. sinclude $(CDEPS)
  186. sinclude $(CPPDEPS)
  187. sinclude $(MAINDEPS)
  188. else
  189. sinclude $(DEPFILE)
  190. endif
  191. # AUTO_DEPEND_CHECK END