cmake_minimum_required (VERSION 3.12)
project (libdisasm)

# Offer the user the choice of overriding the installation directories
set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries")
set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables")

if(USE_QT4)
	find_package (Qt4 REQUIRED)
	include_directories( ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} )
	INCLUDE( ${QT_USE_FILE} )
	ADD_DEFINITIONS( ${QT_DEFINITIONS} )
else()
	find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
	find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)
	get_target_property(QtCore_location Qt${QT_VERSION_MAJOR}::Core LOCATION)
endif()

include_directories ( ${UDIS86_DIR} ${CAPSTONE_INC} )
include_directories( ${PARSER_INC} )

if (USE_UDIS86)
	set (disasm_wrappers_srcs
		udis/UDisasm.cpp
	)
	set (disasm_wrappers_hdrs
		udis/UDisasm.h
	)
	message(STATUS "udis_dir='${UDIS86_DIR}'")
	message(STATUS "udis_lib='${UDIS86_LIB}'")
else()
	set (disasm_wrappers_srcs
		cdis/CDisasm.cpp
	)
	set (disasm_wrappers_hdrs
		cdis/CDisasm.h
	)
	message(STATUS "capstone_includes='${CAPSTONE_INC}'")
	message(STATUS "capstone_lib='${CAPSTONE_LIB}'")
endif ()

# multi-processor compilation
if(MSVC)
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
endif()

set (disasm_srcs
	Disasm.cpp
	PeDisasm.cpp
	${disasm_wrappers_srcs}
)

set (disasm_hdrs
	bear_disasm.h
	Disasm.h
	PeDisasm.h
	MnemType.h
	${disasm_wrappers_hdrs}
)

add_library( ${PROJECT_NAME} STATIC ${disasm_srcs} ${disasm_hdrs} )

if (USE_UDIS86)
    set (def
        "BUILD_WITH_UDIS86"
    )
    list(APPEND deflist ${def})
    set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_DEFINITIONS "${deflist}")
endif()

if (USE_UDIS86)
    target_link_libraries( ${PROJECT_NAME} ${PARSER_LIB} ${UDIS86_LIB} )
else()
    target_link_libraries( ${PROJECT_NAME} ${PARSER_LIB} ${CAPSTONE_LIB} )
endif()

if(USE_QT4)
	target_link_libraries ( ${PROJECT_NAME} ${QT_QTCORE_LIBRARIES} )
else()
	target_link_libraries( ${PROJECT_NAME} Qt${QT_VERSION_MAJOR}::Core)
endif()

