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