blob: 3bd4ce89f7a14242d674735832c6dcae884136e0 [file] [log] [blame]
DRCc869c2c2010-10-15 08:43:32 +00001if(NOT DEFINED NASM)
2 set(NASM nasm)
3endif()
4
5if(SIMD_X86_64)
6 set(NAFLAGS -fwin64 -DWIN64 -D__x86_64__ -I${CMAKE_SOURCE_DIR}/win/
7 -I${CMAKE_CURRENT_SOURCE_DIR}/)
8else()
9 set(NAFLAGS -fwin32 -DWIN32 -I${CMAKE_SOURCE_DIR}/win/
10 -I${CMAKE_CURRENT_SOURCE_DIR}/)
11endif()
12
13if(MSVC)
14 set(NAFLAGS ${NAFLAGS} -DMSVC)
15endif()
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.
19if(CMAKE_BUILD_TYPE STREQUAL "Debug"
20 OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
21 set(NAFLAGS ${NAFLAGS} -g)
22endif()
23
24if(SIMD_X86_64)
DRCda5220a2011-03-02 02:17:30 +000025 set(SIMD_BASENAMES jfsseflt-64 jccolss2-64 jdcolss2-64 jcgrass2-64
26 jcsamss2-64 jdsamss2-64 jdmerss2-64 jcqnts2i-64 jfss2fst-64 jfss2int-64
27 jiss2red-64 jiss2int-64 jiss2fst-64 jcqnts2f-64 jiss2flt-64)
DRCc869c2c2010-10-15 08:43:32 +000028 message(STATUS "Building x86_64 SIMD extensions")
29else()
DRCda5220a2011-03-02 02:17:30 +000030 set(SIMD_BASENAMES jsimdcpu jccolmmx jcgrammx jdcolmmx jcsammmx jdsammmx
31 jdmermmx jcqntmmx jfmmxfst jfmmxint jimmxred jimmxint jimmxfst jcqnt3dn
32 jf3dnflt ji3dnflt jcqntsse jfsseflt jisseflt jccolss2 jcgrass2 jdcolss2
33 jcsamss2 jdsamss2 jdmerss2 jcqnts2i jfss2fst jfss2int jiss2red jiss2int
34 jiss2fst jcqnts2f jiss2flt)
DRCc869c2c2010-10-15 08:43:32 +000035 message(STATUS "Building i386 SIMD extensions")
36endif()
37
38if(MSVC_IDE)
39 set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/$(OutDir)")
40else()
41 set(OBJDIR ${CMAKE_CURRENT_BINARY_DIR})
42endif()
43
44foreach(file ${SIMD_BASENAMES})
DRCd830d362010-10-15 20:07:41 +000045 set(DEPFILE "")
DRCc869c2c2010-10-15 08:43:32 +000046 set(SIMD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${file}.asm)
DRCd830d362010-10-15 20:07:41 +000047 if(${file} MATCHES col)
48 set(DEPFILE ${SIMD_SRC})
49 string(REGEX REPLACE "col" "clr" DEPFILE ${DEPFILE})
50 endif()
51 if(${file} MATCHES mer)
52 set(DEPFILE ${SIMD_SRC})
53 string(REGEX REPLACE "mer" "mrg" DEPFILE ${DEPFILE})
54 endif()
DRC58b6ec42011-04-02 02:14:13 +000055 if(${file} MATCHES gra)
56 set(DEPFILE ${SIMD_SRC})
57 string(REGEX REPLACE "gra" "gry" DEPFILE ${DEPFILE})
58 endif()
DRCc869c2c2010-10-15 08:43:32 +000059 set(SIMD_OBJ ${OBJDIR}/${file}.obj)
DRCd830d362010-10-15 20:07:41 +000060 add_custom_command(OUTPUT ${SIMD_OBJ} DEPENDS ${SIMD_SRC} ${DEPFILE} *.inc
DRCc869c2c2010-10-15 08:43:32 +000061 COMMAND ${NASM} ${NAFLAGS} ${SIMD_SRC} -o${SIMD_OBJ})
62 set(SIMD_OBJS ${SIMD_OBJS} ${SIMD_OBJ})
63endforeach()
64
65set(SIMD_OBJS ${SIMD_OBJS} PARENT_SCOPE)
66add_custom_target(simd DEPENDS ${SIMD_OBJS})