PROJECT(x86mod) CMAKE_MINIMUM_REQUIRED(VERSION 2.4) SET(YASM_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../.." CACHE STRING "Location of Yasm source") IF (NOT YASM_SOURCE_DIR) MESSAGE(FATAL_ERROR "YASM_SOURCE_DIR must be defined") ENDIF (NOT YASM_SOURCE_DIR) SET(SOURCE_DIR "${YASM_SOURCE_DIR}/modules/arch/x86") SET (YASM_POSSIBLE_PATHS "$ENV{ProgramFiles}/Yasm/Bin" /usr/bin /usr/local/bin ) FIND_PROGRAM(YASM_PATH yasm PATHS ${YASM_POSSIBLE_PATHS} ) SET (GENPERF_POSSIBLE_PATHS ${YASM_SOURCE_DIR}/objdir/tools/genperf ${YASM_SOURCE_DIR}/objdir/tools/genperf/Debug ${YASM_SOURCE_DIR}/objdir/tools/genperf/Release ) FIND_PROGRAM(GENPERF_PATH genperf DOC "The path to the yasm genperf executable" PATHS ${GENPERF_POSSIBLE_PATHS} ) IF (NOT GENPERF_PATH) MESSAGE(FATAL_ERROR "Could not find genperf executable") ENDIF (NOT GENPERF_PATH) SET (YASM_POSSIBLE_INCLUDE_PATHS "${YASM_PATH}" "${YASM_PATH}/../include" "$ENV{ProgramFiles}/Yasm/Include" /usr/include /usr/local/include ) FIND_PATH(YASM_INCLUDE_PATH NAMES libyasm.h DOC "The path to the libyasm include files" PATHS ${YASM_POSSIBLE_INCLUDE_PATHS} ) IF (NOT YASM_INCLUDE_PATH) MESSAGE(FATAL_ERROR "Could not find yasm include files") ENDIF (NOT YASM_INCLUDE_PATH) INCLUDE_DIRECTORIES(${YASM_INCLUDE_PATH}) INCLUDE_DIRECTORIES(${YASM_SOURCE_DIR}) SET (YASM_POSSIBLE_LIB_PATHS "${YASM_PATH}" "${YASM_PATH}/../lib" "${YASM_INCLUDE_PATH}/../lib" "$ENV{ProgramFiles}/Yasm/Lib" /usr/lib /usr/local/lib ) FIND_LIBRARY(YASM_LIBRARY NAMES yasm DOC "The path to the libyasm library" PATHS ${YASM_POSSIBLE_LIB_PATHS} ) IF (NOT YASM_LIBRARY) MESSAGE(FATAL_ERROR "Could not find yasm library") ENDIF (NOT YASM_LIBRARY) INCLUDE(FindPythonInterp) IF (NOT PYTHON_EXECUTABLE) MESSAGE(FATAL_ERROR "Could not find Python executable") ENDIF (NOT PYTHON_EXECUTABLE) INCLUDE_DIRECTORIES(${SOURCE_DIR}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf COMMAND ${PYTHON_EXECUTABLE} ${SOURCE_DIR}/gen_x86_insn.py ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf MAIN_DEPENDENCY ${SOURCE_DIR}/gen_x86_insn.py ) macro (YASM_GENPERF _in_NAME _out_NAME) add_custom_command( OUTPUT ${_out_NAME} COMMAND ${GENPERF_PATH} ${_in_NAME} ${_out_NAME} MAIN_DEPENDENCY ${_in_NAME} ) endmacro (YASM_GENPERF) YASM_GENPERF( ${SOURCE_DIR}/x86cpu.gperf ${CMAKE_CURRENT_BINARY_DIR}/x86cpu.c ) YASM_GENPERF( ${SOURCE_DIR}/x86regtmod.gperf ${CMAKE_CURRENT_BINARY_DIR}/x86regtmod.c ) YASM_GENPERF( ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.c ) YASM_GENPERF( ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.c ) SET(insn_DEPS ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.c ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.c ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c ) SET_SOURCE_FILES_PROPERTIES(${SOURCE_DIR}/x86id.c PROPERTIES OBJECT_DEPENDS "${insn_DEPS}" ) ADD_LIBRARY(x86mod MODULE init_plugin.c ${SOURCE_DIR}/x86arch.c ${SOURCE_DIR}/x86bc.c ${SOURCE_DIR}/x86expr.c ${SOURCE_DIR}/x86id.c x86cpu.c x86regtmod.c ) TARGET_LINK_LIBRARIES(x86mod ${YASM_LIBRARY})