CMakeLists.txt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. cmake_minimum_required(VERSION 3.5)
  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 17)
  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 19.1 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. string(APPEND TARGET_LIBS_OS "-lLLVM-19 ${LLVM_SYSTEM_LIBS}")
  152. string(STRIP ${TARGET_LIBS_OS} TARGET_LIBS_OS)
  153. else()
  154. message(FATAL_ERROR "LLVM not found")
  155. endif()
  156. # Add library to build.
  157. add_library(${PROJECT_NAME} STATIC
  158. ${SRC_FILES}
  159. )
  160. if (HAVE_BACKTRACE_HEADERS)
  161. string(APPEND TARGET_LIBS_OS " -lbacktrace")
  162. string(STRIP ${TARGET_LIBS_OS} TARGET_LIBS_OS)
  163. endif()
  164. if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
  165. FILE(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/../IDE/dist/IDEHelper_libs_d.txt" ${TARGET_LIBS_OS})
  166. else()
  167. FILE(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/../IDE/dist/IDEHelper_libs.txt" ${TARGET_LIBS_OS})
  168. endif()
  169. # Link with other dependencies.
  170. if(MSVC)
  171. 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)
  172. else()
  173. target_link_libraries(${PROJECT_NAME} BeefySysLib hunspell pthread dl ${TARGET_LIBS_OS})
  174. endif()