ParseAsm.cmake 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. macro(cpu CPU_STR)
  2. set(CPU_STR "combined")
  3. if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386")
  4. set(CPU_STR "i386")
  5. elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
  6. set(CPU_STR "x86_64")
  7. elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
  8. if(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8")
  9. set(CPU_STR "x86_64")
  10. else()
  11. set(CPU_STR "i386")
  12. endif()
  13. elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
  14. set(CPU_STR "arm")
  15. elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "mips")
  16. set(CPU_STR "mips")
  17. elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc")
  18. set(CPU_STR "ppc")
  19. endif()
  20. endmacro ()
  21. macro(abi ABI_STR)
  22. set(ABI_STR "sysv")
  23. if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  24. set(ABI_STR "ms")
  25. elseif(${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN")
  26. set(ABI_STR "ms")
  27. elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
  28. set(ABI_STR "aapcs")
  29. elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "mips")
  30. set(ABI_STR "o32")
  31. endif()
  32. endmacro ()
  33. macro(binaryformat BF_STR)
  34. set(BF_STR "elf")
  35. if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  36. set(BF_STR "pe")
  37. elseif(${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN")
  38. set(BF_STR "pe")
  39. elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AIX")
  40. set(BF_STR "xcoff")
  41. elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
  42. set(BF_STR "macho")
  43. endif()
  44. endmacro ()
  45. set(ABI_STR)
  46. abi(ABI_STR)
  47. set(BF_STR)
  48. binaryformat(BF_STR)
  49. set(CPU_STR)
  50. cpu(CPU_STR)
  51. macro(parse_asm JUMP_SRC MAKE_SRC)
  52. # ARM/AAPCS/ELF
  53. if(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "arm" AND ${ABI_STR} STREQUAL "aapcs" AND ${BF_STR} STREQUAL "elf")
  54. set(JUMP_SRC "asm/jump_arm_aapcs_elf_gas.S")
  55. set(MAKE_SRC "asm/make_arm_aapcs_elf_gas.S")
  56. # ARM/AAPCS/MACH-O
  57. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "arm" AND ${ABI_STR} STREQUAL "aapcs" AND ${BF_STR} STREQUAL "macho")
  58. set(JUMP_SRC "asm/jump_arm_aapcs_macho_gas.S")
  59. set(MAKE_SRC "asm/make_arm_aapcs_macho_gas.S")
  60. # ARM64/AAPCS/ELF
  61. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "arm" AND ${ABI_STR} STREQUAL "aapcs" AND ${BF_STR} STREQUAL "elf")
  62. set(JUMP_SRC "asm/jump_arm64_aapcs_elf_gas.S")
  63. set(MAKE_SRC "asm/make_arm64_aapcs_elf_gas.S")
  64. # ARM64/AAPCS/MACH-O
  65. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "arm" AND ${ABI_STR} STREQUAL "aapcs" AND ${BF_STR} STREQUAL "macho")
  66. set(JUMP_SRC "asm/jump_arm64_aapcs_macho_gas.S")
  67. set(MAKE_SRC "asm/make_arm64_aapcs_macho_gas.S")
  68. # MIPS/O32/ELF
  69. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "mips" AND ${ABI_STR} STREQUAL "o32" AND ${BF_STR} STREQUAL "elf")
  70. set(JUMP_SRC "asm/jump_mips32_o32_elf_gas.S")
  71. set(MAKE_SRC "asm/make_mips32_o32_elf_gas.S")
  72. # MIPS/O32/ELF
  73. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "ppc" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "elf")
  74. set(JUMP_SRC "asm/jump_ppc32_sysv_elf_gas.S")
  75. set(MAKE_SRC "asm/make_ppc32_sysv_elf_gas.S")
  76. # MIPS/O32/MACH-O
  77. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "ppc" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "macho")
  78. set(JUMP_SRC "asm/jump_ppc32_sysv_macho_gas.S")
  79. set(MAKE_SRC "asm/make_ppc32_sysv_macho_gas.S")
  80. # POWERPC_32/SYSV/XCOFF
  81. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "ppc" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "xcoff")
  82. set(JUMP_SRC "asm/jump_ppc32_sysv_xcoff_gas.S")
  83. set(MAKE_SRC "asm/make_ppc32_sysv_xcoff_gas.S")
  84. # POWERPC_64/SYSV/ELF
  85. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "ppc" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "elf")
  86. set(JUMP_SRC "asm/jump_ppc64_sysv_elf_gas.S")
  87. set(MAKE_SRC "asm/make_ppc64_sysv_elf_gas.S")
  88. # POWERPC_64/SYSV/MACH-O
  89. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "ppc" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "macho")
  90. set(JUMP_SRC "asm/jump_ppc64_sysv_macho_gas.S")
  91. set(MAKE_SRC "asm/make_ppc64_sysv_macho_gas.S")
  92. # POWERPC_64/SYSV/XCOFF(to do 32_64)
  93. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "ppc" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "macho")
  94. set(JUMP_SRC "asm/jump_ppc32_ppc64_sysv_macho_gas.S")
  95. set(MAKE_SRC "asm/make_ppc32_ppc64_sysv_macho_gas.S")
  96. # X86/SYSV/ELF
  97. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "i386" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "elf")
  98. set(JUMP_SRC "asm/jump_i386_sysv_elf_gas.S")
  99. set(MAKE_SRC "asm/make_i386_sysv_elf_gas.S")
  100. # X86/SYSV/MACH-O
  101. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "i386" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "macho")
  102. set(JUMP_SRC "asm/jump_i386_sysv_macho_gas.S")
  103. set(MAKE_SRC "asm/make_i386_sysv_macho_gas.S")
  104. # X86/MS/PE
  105. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "i386" AND ${ABI_STR} STREQUAL "ms" AND ${BF_STR} STREQUAL "pe")
  106. if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
  107. set(JUMP_SRC "asm/jump_i386_ms_pe_gas.asm")
  108. set(MAKE_SRC "asm/make_i386_ms_pe_gas.asm")
  109. else()
  110. set(JUMP_SRC "asm/jump_i386_ms_pe_masm.asm")
  111. set(MAKE_SRC "asm/make_i386_ms_pe_masm.asm")
  112. endif()
  113. # X86_64/SYSV/ELF
  114. elseif((${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8") AND (${CPU_STR} STREQUAL "x86_64") AND (${ABI_STR} STREQUAL "sysv") AND (${BF_STR} STREQUAL "elf"))
  115. set(JUMP_SRC "asm/jump_x86_64_sysv_elf_gas.S")
  116. set(MAKE_SRC "asm/make_x86_64_sysv_elf_gas.S")
  117. # X86_64/SYSV/MACH-O
  118. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "4" AND ${CPU_STR} STREQUAL "x86_64" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "macho")
  119. set(JUMP_SRC "asm/jump_x86_64_sysv_macho_gas.S")
  120. set(MAKE_SRC "asm/make_x86_64_sysv_macho_gas.S")
  121. # X86_64/MS/PE
  122. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "x86_64" AND ${ABI_STR} STREQUAL "ms" AND ${BF_STR} STREQUAL "pe")
  123. if((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") OR (${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang"))
  124. set(JUMP_SRC "asm/jump_x86_64_ms_pe_gas.asm")
  125. set(MAKE_SRC "asm/make_x86_64_ms_pe_gas.asm")
  126. else()
  127. set(JUMP_SRC "asm/jump_x86_64_ms_pe_masm.asm")
  128. set(MAKE_SRC "asm/make_x86_64_ms_pe_masm.asm")
  129. endif()
  130. # X86_64/SYSV/X32
  131. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "x86_64" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "macho")
  132. set(JUMP_SRC "asm/jump_x86_64_sysv_macho_gas.S")
  133. set(MAKE_SRC "asm/make_x86_64_sysv_macho_gas.S")
  134. # X86 universal
  135. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "universal" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "macho")
  136. set(JUMP_SRC "asm/jump_i386_x86_64_sysv_macho_gas.S")
  137. set(MAKE_SRC "asm/make_i386_x86_64_sysv_macho_gas.S")
  138. # COMBINED
  139. elseif(${CMAKE_C_SIZEOF_DATA_PTR} STREQUAL "8" AND ${CPU_STR} STREQUAL "combined" AND ${ABI_STR} STREQUAL "sysv" AND ${BF_STR} STREQUAL "macho")
  140. set(JUMP_SRC "asm/jump_combined_sysv_macho_gas.S")
  141. set(MAKE_SRC "asm/make_combined_sysv_macho_gas.S")
  142. endif()
  143. endmacro ()