CMakeLists.txt 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. if(NOT DEFINED NASM)
  2. set(NASM nasm CACHE FILEPATH "Path to NASM/YASM executable")
  3. endif()
  4. if(SIMD_X86_64)
  5. set(NAFLAGS -fwin64 -DWIN64 -D__x86_64__)
  6. else()
  7. if(BORLAND)
  8. set(NAFLAGS -fobj -DOBJ32)
  9. else()
  10. set(NAFLAGS -fwin32 -DWIN32)
  11. endif()
  12. endif()
  13. set(NAFLAGS ${NAFLAGS} -I${CMAKE_SOURCE_DIR}/win/ -I${CMAKE_CURRENT_SOURCE_DIR}/)
  14. # This only works if building from the command line. There is currently no way
  15. # to set a variable's value based on the build type when using the MSVC IDE.
  16. if(CMAKE_BUILD_TYPE STREQUAL "Debug"
  17. OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
  18. set(NAFLAGS ${NAFLAGS} -g)
  19. endif()
  20. if(SIMD_X86_64)
  21. set(SIMD_BASENAMES jfdctflt-sse-64 jccolor-sse2-64 jcgray-sse2-64
  22. jchuff-sse2-64 jcsample-sse2-64 jdcolor-sse2-64 jdmerge-sse2-64
  23. jdsample-sse2-64 jfdctfst-sse2-64 jfdctint-sse2-64 jidctflt-sse2-64
  24. jidctfst-sse2-64 jidctint-sse2-64 jidctred-sse2-64 jquantf-sse2-64
  25. jquanti-sse2-64)
  26. message(STATUS "Building x86_64 SIMD extensions")
  27. else()
  28. set(SIMD_BASENAMES jsimdcpu jfdctflt-3dn jidctflt-3dn jquant-3dn jccolor-mmx
  29. jcgray-mmx jcsample-mmx jdcolor-mmx jdmerge-mmx jdsample-mmx jfdctfst-mmx
  30. jfdctint-mmx jidctfst-mmx jidctint-mmx jidctred-mmx jquant-mmx jfdctflt-sse
  31. jidctflt-sse jquant-sse jccolor-sse2 jcgray-sse2 jchuff-sse2 jcsample-sse2
  32. jdcolor-sse2 jdmerge-sse2 jdsample-sse2 jfdctfst-sse2 jfdctint-sse2
  33. jidctflt-sse2 jidctfst-sse2 jidctint-sse2 jidctred-sse2 jquantf-sse2
  34. jquanti-sse2)
  35. message(STATUS "Building i386 SIMD extensions")
  36. endif()
  37. if(MSVC_IDE)
  38. set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
  39. else()
  40. set(OBJDIR ${CMAKE_CURRENT_BINARY_DIR})
  41. endif()
  42. file(GLOB INC_FILES *.inc)
  43. foreach(file ${SIMD_BASENAMES})
  44. set(DEPFILE "")
  45. set(SIMD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${file}.asm)
  46. if(${file} MATCHES jccolor)
  47. set(DEPFILE ${file})
  48. string(REGEX REPLACE "jccolor" "jccolext" DEPFILE ${DEPFILE})
  49. set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
  50. endif()
  51. if(${file} MATCHES jcgray)
  52. set(DEPFILE ${file})
  53. string(REGEX REPLACE "jcgray" "jcgryext" DEPFILE ${DEPFILE})
  54. set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
  55. endif()
  56. if(${file} MATCHES jdcolor)
  57. set(DEPFILE ${file})
  58. string(REGEX REPLACE "jdcolor" "jdcolext" DEPFILE ${DEPFILE})
  59. set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
  60. endif()
  61. if(${file} MATCHES jdmerge)
  62. set(DEPFILE ${file})
  63. string(REGEX REPLACE "jdmerge" "jdmrgext" DEPFILE ${DEPFILE})
  64. set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
  65. endif()
  66. set(SIMD_OBJ ${OBJDIR}/${file}.obj)
  67. add_custom_command(OUTPUT ${SIMD_OBJ}
  68. DEPENDS ${SIMD_SRC} ${DEPFILE} ${INC_FILES}
  69. COMMAND ${NASM} ${NAFLAGS} ${SIMD_SRC} -o${SIMD_OBJ})
  70. set(SIMD_OBJS ${SIMD_OBJS} ${SIMD_OBJ})
  71. endforeach()
  72. set(SIMD_OBJS ${SIMD_OBJS} PARENT_SCOPE)
  73. add_custom_target(simd DEPENDS ${SIMD_OBJS})