CMakeLists.txt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. target_compile_definitions(${PROJECT_NAME} PRIVATE LLVM_VERSION=${LLVM_VERSION_MAJOR})
  31. if ( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG )
  32. target_compile_options(${PROJECT_NAME} PRIVATE
  33. -Wall -Wextra -Wpedantic -pedantic -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable
  34. )
  35. target_link_libraries(${PROJECT_NAME} stdc++fs)
  36. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -DDEBUGGING")
  37. endif()
  38. if ( MSVC )
  39. target_compile_options(${PROJECT_NAME} PRIVATE "/W4")
  40. endif()
  41. if(ipo_supported)
  42. #set_property(TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
  43. endif()
  44. #explicit_llvm_config(${PROJECT_NAME} STATIC_LIBRARY)
  45. llvm_config(${PROJECT_NAME})
  46. llvm_map_components_to_libnames(llvm_libs X86 passes)
  47. #message( ${llvm_libs} )
  48. target_link_libraries(${PROJECT_NAME} LLVM) # ${llvm_libs})
  49. # MIRParser
  50. # LTO
  51. # Passes
  52. # ObjCARCOpts
  53. # LibDriver
  54. # MCJIT
  55. # XCoreDisassembler
  56. # XCoreCodeGen
  57. # XCoreDesc
  58. # XCoreInfo
  59. # XCoreAsmPrinter
  60. # X86Disassembler
  61. # X86AsmParser
  62. # SystemZDisassembler
  63. # SystemZCodeGen
  64. # SystemZAsmParser
  65. # SystemZDesc
  66. # SystemZInfo
  67. # SystemZAsmPrinter
  68. # SparcDisassembler
  69. # SparcCodeGen
  70. # SparcAsmParser
  71. # SparcDesc
  72. # SparcInfo
  73. # SparcAsmPrinter
  74. # PowerPCDisassembler
  75. # PowerPCCodeGen
  76. # PowerPCAsmParser
  77. # PowerPCDesc
  78. # PowerPCInfo
  79. # PowerPCAsmPrinter
  80. # NVPTXCodeGen
  81. # NVPTXDesc
  82. # NVPTXInfo
  83. # NVPTXAsmPrinter
  84. # MSP430CodeGen
  85. # MSP430Desc
  86. # MSP430Info
  87. # MSP430AsmPrinter
  88. # MipsDisassembler
  89. # MipsCodeGen
  90. # MipsAsmParser
  91. # MipsDesc
  92. # MipsInfo
  93. # MipsAsmPrinter
  94. # LanaiDisassembler
  95. # LanaiCodeGen
  96. # LanaiAsmParser
  97. # LanaiDesc
  98. # LanaiAsmPrinter
  99. # LanaiInfo
  100. # HexagonDisassembler
  101. # HexagonCodeGen
  102. # HexagonAsmParser
  103. # HexagonDesc
  104. # HexagonInfo
  105. # BPFDisassembler
  106. # BPFCodeGen
  107. # BPFAsmParser
  108. # BPFDesc
  109. # BPFInfo
  110. # BPFAsmPrinter
  111. # ARMDisassembler
  112. # ARMCodeGen
  113. # ARMAsmParser
  114. # ARMDesc
  115. # ARMInfo
  116. # ARMAsmPrinter
  117. # ARMUtils
  118. # AMDGPUDisassembler
  119. # AMDGPUCodeGen
  120. # AMDGPUAsmParser
  121. # AMDGPUDesc
  122. # AMDGPUInfo
  123. # AMDGPUAsmPrinter
  124. # AMDGPUUtils
  125. # AArch64Disassembler
  126. # AArch64CodeGen
  127. # AArch64AsmParser
  128. # AArch64Desc
  129. # AArch64Info
  130. # AArch64AsmPrinter
  131. # AArch64Utils
  132. # Interpreter
  133. # WindowsManifest
  134. # Symbolize
  135. # DebugInfoPDB
  136. # DebugInfoDWARF
  137. # LineEditor
  138. # X86CodeGen
  139. # GlobalISel
  140. # X86Desc
  141. # X86Info
  142. # MCDisassembler
  143. # X86AsmPrinter
  144. # X86Utils
  145. # SelectionDAG
  146. # AsmPrinter
  147. # CodeGen
  148. # FuzzMutate
  149. # DlltoolDriver
  150. # Option
  151. # Coroutines
  152. # ipo
  153. # Instrumentation
  154. # Vectorize
  155. # ScalarOpts
  156. # Linker
  157. # IRReader
  158. # AsmParser
  159. # InstCombine
  160. # BitWriter
  161. # AggressiveInstCombine
  162. # Coverage
  163. # ObjectYAML
  164. # OrcJIT
  165. # TransformUtils
  166. # ExecutionEngine
  167. # Target
  168. # Analysis
  169. # ProfileData
  170. # RuntimeDyld
  171. # Object
  172. # MCParser
  173. # BitReader
  174. # MC
  175. # DebugInfoCodeView
  176. # DebugInfoMSF
  177. # Core
  178. # BinaryFormat
  179. # TableGen
  180. # Support
  181. # Demangle
  182. #)
  183. #list(REMOVE_ITEM LIBRARY_LIST LLVM [])
  184. #message(${LIBRARY_LIST})
  185. #target_link_libraries(${PROJECT_NAME} ${LIBRARY_LIST})