CMakeLists.txt 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. cmake_minimum_required(VERSION 3.9)
  2. set(PROJECT_NAME qlow)
  3. project(${PROJECT_NAME})
  4. include(CheckIPOSupported)
  5. check_ipo_supported(RESULT ipo_supported)
  6. set(CMAKE_CXX_STANDARD 17)
  7. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  8. set(CMAKE_CXX_EXTENSIONS OFF)
  9. find_package(BISON 3.0.0)
  10. find_package(FLEX 2.4.0)
  11. find_package(LLVM REQUIRED CONFIG)
  12. if( NOT LLVM_FOUND )
  13. message(FATAL_ERROR "LLVM package can't be found. Set CMAKE_PREFIX_PATH variable to LLVM's installation prefix.")
  14. endif()
  15. if ( BISON_FOUND AND FLEX_FOUND )
  16. BISON_TARGET(QlowParser ast/syntax.y ${CMAKE_CURRENT_BINARY_DIR}/syntax.cpp)
  17. FLEX_TARGET(QlowLexer ast/lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)
  18. ADD_FLEX_BISON_DEPENDENCY(QlowLexer QlowParser)
  19. else()
  20. FILE(GLOB AdditionalSources bison/*.cpp)
  21. include_directories(bison/)
  22. endif()
  23. FILE(GLOB CppSources *.cpp ast/*.cpp sem/*.cpp)
  24. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  25. include_directories(ast sem .)
  26. add_executable(${PROJECT_NAME} ${BISON_QlowParser_OUTPUTS} ${FLEX_QlowLexer_OUTPUTS} ${CppSources} ${AdditionalSources})
  27. include_directories( ${LLVM_INCLUDE_DIRS} )
  28. link_directories( ${LLVM_LIBRARY_DIRS} )
  29. add_definitions( ${LLVM_DEFINITIONS} )
  30. if ( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG )
  31. target_compile_options(${PROJECT_NAME} PRIVATE
  32. -Wall -Wextra -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable
  33. )
  34. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -DDEBUGGING")
  35. endif()
  36. if ( MSVC )
  37. target_compile_options(${PROJECT_NAME} PRIVATE "/W4")
  38. endif()
  39. if(ipo_supported)
  40. #set_property(TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
  41. endif()
  42. #explicit_llvm_config(${PROJECT_NAME} STATIC_LIBRARY)
  43. llvm_config(${PROJECT_NAME})
  44. target_link_libraries(${PROJECT_NAME} LLVM)
  45. # MIRParser
  46. # LTO
  47. # Passes
  48. # ObjCARCOpts
  49. # LibDriver
  50. # MCJIT
  51. # XCoreDisassembler
  52. # XCoreCodeGen
  53. # XCoreDesc
  54. # XCoreInfo
  55. # XCoreAsmPrinter
  56. # X86Disassembler
  57. # X86AsmParser
  58. # SystemZDisassembler
  59. # SystemZCodeGen
  60. # SystemZAsmParser
  61. # SystemZDesc
  62. # SystemZInfo
  63. # SystemZAsmPrinter
  64. # SparcDisassembler
  65. # SparcCodeGen
  66. # SparcAsmParser
  67. # SparcDesc
  68. # SparcInfo
  69. # SparcAsmPrinter
  70. # PowerPCDisassembler
  71. # PowerPCCodeGen
  72. # PowerPCAsmParser
  73. # PowerPCDesc
  74. # PowerPCInfo
  75. # PowerPCAsmPrinter
  76. # NVPTXCodeGen
  77. # NVPTXDesc
  78. # NVPTXInfo
  79. # NVPTXAsmPrinter
  80. # MSP430CodeGen
  81. # MSP430Desc
  82. # MSP430Info
  83. # MSP430AsmPrinter
  84. # MipsDisassembler
  85. # MipsCodeGen
  86. # MipsAsmParser
  87. # MipsDesc
  88. # MipsInfo
  89. # MipsAsmPrinter
  90. # LanaiDisassembler
  91. # LanaiCodeGen
  92. # LanaiAsmParser
  93. # LanaiDesc
  94. # LanaiAsmPrinter
  95. # LanaiInfo
  96. # HexagonDisassembler
  97. # HexagonCodeGen
  98. # HexagonAsmParser
  99. # HexagonDesc
  100. # HexagonInfo
  101. # BPFDisassembler
  102. # BPFCodeGen
  103. # BPFAsmParser
  104. # BPFDesc
  105. # BPFInfo
  106. # BPFAsmPrinter
  107. # ARMDisassembler
  108. # ARMCodeGen
  109. # ARMAsmParser
  110. # ARMDesc
  111. # ARMInfo
  112. # ARMAsmPrinter
  113. # ARMUtils
  114. # AMDGPUDisassembler
  115. # AMDGPUCodeGen
  116. # AMDGPUAsmParser
  117. # AMDGPUDesc
  118. # AMDGPUInfo
  119. # AMDGPUAsmPrinter
  120. # AMDGPUUtils
  121. # AArch64Disassembler
  122. # AArch64CodeGen
  123. # AArch64AsmParser
  124. # AArch64Desc
  125. # AArch64Info
  126. # AArch64AsmPrinter
  127. # AArch64Utils
  128. # Interpreter
  129. # WindowsManifest
  130. # Symbolize
  131. # DebugInfoPDB
  132. # DebugInfoDWARF
  133. # LineEditor
  134. # X86CodeGen
  135. # GlobalISel
  136. # X86Desc
  137. # X86Info
  138. # MCDisassembler
  139. # X86AsmPrinter
  140. # X86Utils
  141. # SelectionDAG
  142. # AsmPrinter
  143. # CodeGen
  144. # FuzzMutate
  145. # DlltoolDriver
  146. # Option
  147. # Coroutines
  148. # ipo
  149. # Instrumentation
  150. # Vectorize
  151. # ScalarOpts
  152. # Linker
  153. # IRReader
  154. # AsmParser
  155. # InstCombine
  156. # BitWriter
  157. # AggressiveInstCombine
  158. # Coverage
  159. # ObjectYAML
  160. # OrcJIT
  161. # TransformUtils
  162. # ExecutionEngine
  163. # Target
  164. # Analysis
  165. # ProfileData
  166. # RuntimeDyld
  167. # Object
  168. # MCParser
  169. # BitReader
  170. # MC
  171. # DebugInfoCodeView
  172. # DebugInfoMSF
  173. # Core
  174. # BinaryFormat
  175. # TableGen
  176. # Support
  177. # Demangle
  178. #)
  179. #list(REMOVE_ITEM LIBRARY_LIST LLVM [])
  180. #message(${LIBRARY_LIST})
  181. #target_link_libraries(${PROJECT_NAME} ${LIBRARY_LIST})