CMakeLists.txt 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
  2. ################### Variables. ####################
  3. # Change if you want modify path or other values. #
  4. ###################################################
  5. set(PROJECT_NAME IDEHelper)
  6. # Output Variables
  7. set(OUTPUT_DEBUG Debug/bin)
  8. set(CMAKE_DEBUG_POSTFIX "_d")
  9. set(OUTPUT_RELEASE Release/bin)
  10. ############## CMake Project ################
  11. # The main options of project #
  12. #############################################
  13. project(${PROJECT_NAME} CXX C)
  14. # Define Release by default.
  15. if(NOT CMAKE_BUILD_TYPE)
  16. set(CMAKE_BUILD_TYPE "Debug")
  17. message(STATUS "Build type not specified: Use Debug by default.")
  18. endif(NOT CMAKE_BUILD_TYPE)
  19. # Definition of Macros
  20. add_definitions(
  21. -DIDEHELPER_EXPORTS
  22. -DBFSYSLIB_DYNAMIC
  23. -DUNICODE
  24. -D_UNICODE
  25. -DBF_NO_FBX
  26. -DFT2_BUILD_LIBRARY
  27. -DBFSYSLIB_DYNAMIC
  28. )
  29. set (CMAKE_CXX_STANDARD 14)
  30. #add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
  31. INCLUDE(CheckIncludeFiles)
  32. CHECK_INCLUDE_FILES(backtrace.h HAVE_BACKTRACE_HEADERS)
  33. if (HAVE_BACKTRACE_HEADERS)
  34. add_definitions(-DBFP_HAS_BACKTRACE)
  35. endif ()
  36. if (${APPLE})
  37. include_directories(
  38. .
  39. ../
  40. ../BeefySysLib/
  41. ../BeefySysLib/third_party
  42. ../BeefySysLib/third_party/freetype/include
  43. ../BeefySysLib/platform/osx
  44. )
  45. else()
  46. include_directories(
  47. .
  48. ../
  49. ../BeefySysLib/
  50. ../BeefySysLib/third_party
  51. ../BeefySysLib/third_party/freetype/include
  52. ../BeefySysLib/platform/linux
  53. )
  54. endif()
  55. ############## Artefacts Output #################
  56. # Defines outputs , depending Debug or Release. #
  57. #################################################
  58. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  59. add_definitions(
  60. -D_DEBUG
  61. )
  62. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
  63. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
  64. set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
  65. else()
  66. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}")
  67. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}")
  68. set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}")
  69. endif()
  70. ################### Dependencies ##################
  71. # Add Dependencies to project. #
  72. ###################################################
  73. option(BUILD_DEPENDS
  74. "Build other CMake project."
  75. ON
  76. )
  77. # Dependencies : disable BUILD_DEPENDS to link with lib already build.
  78. if(BUILD_DEPENDS)
  79. else()
  80. endif()
  81. ################# Flags ################
  82. # Defines Flags for Windows and Linux. #
  83. ########################################
  84. if(MSVC)
  85. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W3 /MD /MDd /Od /EHsc")
  86. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /W3 /GL /Od /Oi /Gy /EHsc")
  87. endif(MSVC)
  88. if(NOT MSVC)
  89. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -fno-rtti -Wno-multichar -Wno-invalid-offsetof")
  90. endif(NOT MSVC)
  91. ################ Files ################
  92. # -- Add files to project. -- #
  93. #######################################
  94. file(GLOB SRC_FILES
  95. BfDiff.cpp
  96. Debugger.cpp
  97. DebugManager.cpp
  98. DebugVisualizers.cpp
  99. NetManager.cpp
  100. SpellChecker.cpp
  101. Targets.cpp
  102. X86XmmInfo.cpp
  103. LinuxDebugger.cpp
  104. Beef/BfCommon.cpp
  105. Clang/CDepChecker.cpp
  106. Clang/ClangHelper.cpp
  107. Compiler/BfAst.cpp
  108. Compiler/BfAstAllocator.cpp
  109. Compiler/BfAutoComplete.cpp
  110. Compiler/BfCodeGen.cpp
  111. Compiler/BfCompiler.cpp
  112. Compiler/BfConstResolver.cpp
  113. Compiler/BfContext.cpp
  114. Compiler/BfDefBuilder.cpp
  115. Compiler/BfDeferEvalChecker.cpp
  116. Compiler/BfDemangler.cpp
  117. Compiler/BfElementVisitor.cpp
  118. Compiler/BfNamespaceVisitor.cpp
  119. Compiler/BfExprEvaluator.cpp
  120. Compiler/BfIRBuilder.cpp
  121. Compiler/BfIRCodeGen.cpp
  122. Compiler/BfMangler.cpp
  123. Compiler/BfModule.cpp
  124. Compiler/BfModuleTypeUtils.cpp
  125. Compiler/BfParser.cpp
  126. Compiler/BfPrinter.cpp
  127. Compiler/BfReducer.cpp
  128. Compiler/BfResolvedTypeUtils.cpp
  129. Compiler/BfResolvePass.cpp
  130. Compiler/BfSource.cpp
  131. Compiler/BfSourceClassifier.cpp
  132. Compiler/BfSourcePositionFinder.cpp
  133. Compiler/BfStmtEvaluator.cpp
  134. Compiler/BfSystem.cpp
  135. Compiler/BfUtil.cpp
  136. Compiler/BfVarDeclChecker.cpp
  137. Compiler/BfTargetTriple.cpp
  138. Compiler/CeMachine.cpp
  139. Compiler/CeDebugger.cpp
  140. Compiler/MemReporter.cpp
  141. Backend/BeContext.cpp
  142. Backend/BeIRCodeGen.cpp
  143. Backend/BeModule.cpp
  144. )
  145. find_package(LLVM 13 CONFIG COMPONENTS)
  146. if (LLVM_FOUND)
  147. message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
  148. message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
  149. include_directories(${LLVM_INCLUDE_DIRS})
  150. add_definitions(${LLVM_DEFINITIONS})
  151. set(TARGET_LIBS_OS "-lLLVM-13 ${LLVM_SYSTEM_LIBS}")
  152. else()
  153. list(APPEND SRC_FILES
  154. X64.cpp
  155. X86.cpp
  156. X86Target.cpp
  157. )
  158. include_directories(
  159. ../extern/llvm-project_13_0_1/llvm/include
  160. ../extern/llvm-project_13_0_1/llvm/lib/Target
  161. )
  162. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  163. include_directories(
  164. ../extern/llvm_linux_13_0_1/include
  165. ../extern/llvm_linux_13_0_1/lib/Target/X86
  166. ../extern/llvm_linux_13_0_1/lib/Target/AArch64
  167. )
  168. set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_13_0_1/lib")
  169. else()
  170. include_directories(
  171. ../extern/llvm_linux_rel_13_0_1/include
  172. ../extern/llvm_linux_rel_13_0_1/lib/Target/X86
  173. ../extern/llvm_linux_rel_13_0_1/lib/Target/AArch64
  174. )
  175. set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_rel_13_0_1/lib")
  176. endif()
  177. execute_process(
  178. COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_13_0_1/bin/llvm-config --system-libs --link-static
  179. OUTPUT_VARIABLE LLVM_SYSTEM_LIBS
  180. OUTPUT_STRIP_TRAILING_WHITESPACE
  181. RESULT_VARIABLE EXEC_RESULT
  182. )
  183. if (EXEC_RESULT AND NOT EXEC_RESULT EQUAL 0)
  184. if (EXEC_RESULT MATCHES "^[0-9]+$")
  185. message(FATAL_ERROR "llvm-config exited with code ${EXEC_RESULT}.")
  186. else()
  187. message(FATAL_ERROR "llvm-config couldn't be executed: ${EXEC_RESULT}")
  188. endif()
  189. endif()
  190. message(STATUS "Found LLVM 13.0.1 (local build)")
  191. set(TARGET_LIBS_OS "${LLVM_SYSTEM_LIBS}")
  192. list(APPEND LLVM_LIBS
  193. ${LLVM_LIB}/libLLVMCore.a
  194. ${LLVM_LIB}/libLLVMCodeGen.a
  195. ${LLVM_LIB}/libLLVMMC.a
  196. ${LLVM_LIB}/libLLVMMCParser.a
  197. ${LLVM_LIB}/libLLVMMCDisassembler.a
  198. ${LLVM_LIB}/libLLVMObject.a
  199. ${LLVM_LIB}/libLLVMBitReader.a
  200. ${LLVM_LIB}/libLLVMAsmParser.a
  201. ${LLVM_LIB}/libLLVMTarget.a
  202. ${LLVM_LIB}/libLLVMScalarOpts.a
  203. ${LLVM_LIB}/libLLVMInstCombine.a
  204. ${LLVM_LIB}/libLLVMSelectionDAG.a
  205. ${LLVM_LIB}/libLLVMProfileData.a
  206. ${LLVM_LIB}/libLLVMAnalysis.a
  207. ${LLVM_LIB}/libLLVMAsmPrinter.a
  208. ${LLVM_LIB}/libLLVMBitWriter.a
  209. ${LLVM_LIB}/libLLVMVectorize.a
  210. ${LLVM_LIB}/libLLVMipo.a
  211. ${LLVM_LIB}/libLLVMInstrumentation.a
  212. ${LLVM_LIB}/libLLVMDebugInfoDWARF.a
  213. ${LLVM_LIB}/libLLVMDebugInfoPDB.a
  214. ${LLVM_LIB}/libLLVMDebugInfoCodeView.a
  215. ${LLVM_LIB}/libLLVMGlobalISel.a
  216. ${LLVM_LIB}/libLLVMTransformUtils.a
  217. ${LLVM_LIB}/libLLVMBinaryFormat.a
  218. ${LLVM_LIB}/libLLVMIRReader.a
  219. ${LLVM_LIB}/libLLVMLinker.a
  220. ${LLVM_LIB}/libLLVMAggressiveInstCombine.a
  221. ${LLVM_LIB}/libLLVMBitstreamReader.a
  222. ${LLVM_LIB}/libLLVMCFGuard.a
  223. ${LLVM_LIB}/libLLVMTextAPI.a
  224. ${LLVM_LIB}/libLLVMRemarks.a
  225. ${LLVM_LIB}/libLLVMX86Info.a
  226. ${LLVM_LIB}/libLLVMX86Desc.a
  227. ${LLVM_LIB}/libLLVMX86CodeGen.a
  228. ${LLVM_LIB}/libLLVMX86AsmParser.a
  229. ${LLVM_LIB}/libLLVMX86Disassembler.a
  230. ${LLVM_LIB}/libLLVMARMDesc.a
  231. ${LLVM_LIB}/libLLVMARMUtils.a
  232. ${LLVM_LIB}/libLLVMARMInfo.a
  233. ${LLVM_LIB}/libLLVMARMCodeGen.a
  234. ${LLVM_LIB}/libLLVMARMAsmParser.a
  235. ${LLVM_LIB}/libLLVMARMDisassembler.a
  236. ${LLVM_LIB}/libLLVMAArch64Desc.a
  237. ${LLVM_LIB}/libLLVMAArch64Utils.a
  238. ${LLVM_LIB}/libLLVMAArch64Info.a
  239. ${LLVM_LIB}/libLLVMAArch64CodeGen.a
  240. ${LLVM_LIB}/libLLVMAArch64AsmParser.a
  241. ${LLVM_LIB}/libLLVMAArch64Disassembler.a
  242. ${LLVM_LIB}/libLLVMWebAssemblyDesc.a
  243. ${LLVM_LIB}/libLLVMWebAssemblyInfo.a
  244. ${LLVM_LIB}/libLLVMWebAssemblyCodeGen.a
  245. ${LLVM_LIB}/libLLVMWebAssemblyAsmParser.a
  246. ${LLVM_LIB}/libLLVMWebAssemblyDisassembler.a
  247. ${LLVM_LIB}/libLLVMWebAssemblyUtils.a
  248. ${LLVM_LIB}/libLLVMSupport.a
  249. ${LLVM_LIB}/libLLVMDemangle.a
  250. )
  251. FOREACH (lib ${LLVM_LIBS})
  252. string(APPEND TARGET_LIBS_OS " " ${lib})
  253. ENDFOREACH()
  254. endif()
  255. # Add library to build.
  256. add_library(${PROJECT_NAME} SHARED
  257. ${SRC_FILES}
  258. )
  259. if (HAVE_BACKTRACE_HEADERS)
  260. string(APPEND TARGET_LIBS_OS " -lbacktrace")
  261. string(STRIP ${TARGET_LIBS_OS} TARGET_LIBS_OS)
  262. endif()
  263. if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
  264. FILE(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/../IDE/dist/IDEHelper_libs_d.txt" ${TARGET_LIBS_OS})
  265. else()
  266. FILE(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/../IDE/dist/IDEHelper_libs.txt" ${TARGET_LIBS_OS})
  267. endif()
  268. # Link with other dependencies.
  269. if(MSVC)
  270. target_link_libraries(${PROJECT_NAME} BeefySysLib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib LLVMX86Disassembler.lib LLVMMCDisassembler.lib LLVMSupport.lib LLVMX86Info.lib LLVMX86Desc.lib %(AdditionalDependencies) LLVMMC.lib LLVMObject.lib LLVMCore.lib LLVMBitReader.lib LLVMAsmParser.lib LLVMMCParser.lib LLVMCodeGen.lib LLVMTarget.lib LLVMX86CodeGen.lib LLVMScalarOpts.lib LLVMInstCombine.lib LLVMSelectionDAG.lib LLVMProfileData.lib LLVMTransformUtils.lib LLVMAnalysis.lib LLVMX86AsmParser.lib LLVMAsmPrinter.lib LLVMBitWriter.lib LLVMVectorize.lib LLVMipo.lib LLVMInstrumentation.lib LLVMDebugInfoDWARF.lib LLVMDebugInfoPDB.lib LLVMDebugInfoCodeView.lib LLVMGlobalISel.lib LLVMBinaryFormat.lib LLVMAggressiveInstCombine.lib libcurl_a.lib)
  271. else()
  272. target_link_libraries(${PROJECT_NAME} BeefySysLib hunspell pthread dl ${TARGET_LIBS_OS})
  273. endif()