CMakeLists.txt 3.18 KB
# hook.pro
# CONFIG += eh eha
# include(../dllconfig.pri)

# hookxp.pro
# CONFIG += noeh
# include(../dllconfig.pri)

# dllconfig.pri
# include(../../../config.pri)
# win32 {
#   CONFIG(eh): DEFINES += ITH_HAS_SEH
#   CONFIG(noeh): DEFINES -= ITH_HAS_SEH
# }

# config.pri
#   CONFIG(eha) {
#     message(CONFIG eha)
#     QMAKE_CXXFLAGS_STL_ON        -= /EHsc
#     QMAKE_CXXFLAGS_EXCEPTIONS_ON -= /EHsc
#     QMAKE_CXXFLAGS_STL_ON        += /EHa
#     QMAKE_CXXFLAGS_EXCEPTIONS_ON += /EHa
#   }
#
#  CONFIG(noeh) { # No Exception handler
#    QMAKE_CXXFLAGS          += /GR-
#    QMAKE_CXXFLAGS_RTTI_ON  -= /GR
#    QMAKE_CXXFLAGS_STL_ON        -= /EHsc
#    QMAKE_CXXFLAGS_EXCEPTIONS_ON -= /EHsc
#  }

include_directories(${CMAKE_CURRENT_SOURCE_DIR})

set(vnrhook_src
  cli.h
  config.h
  hook.h
  main.cc
  engine/engine.cc
  engine/engine.h
  engine/hookdefs.h
  engine/match.cc
  engine/match.h
  engine/pchooks.cc
  engine/pchooks.h
  engine/util.cc
  engine/util.h
  hijack/texthook.cc
  rpc/pipe.cc
  tree/avl.h
  ${PROJECT_SOURCE_DIR}/ccutil/ccmacro.h
  ${PROJECT_SOURCE_DIR}/cpputil/cpplocale.h
  ${PROJECT_SOURCE_DIR}/cpputil/cppmarshal.h
  ${PROJECT_SOURCE_DIR}/cpputil/cppmath.h
  ${PROJECT_SOURCE_DIR}/cpputil/cpppath.h
  ${PROJECT_SOURCE_DIR}/cpputil/cppstring.h
  ${PROJECT_SOURCE_DIR}/cpputil/cpptype.h
  ${PROJECT_SOURCE_DIR}/cpputil/cppunicode.h
  ${PROJECT_SOURCE_DIR}/disasm/disasm.cc
  ${PROJECT_SOURCE_DIR}/memdbg/memdbg.h
  ${PROJECT_SOURCE_DIR}/memdbg/memsearch.cc
  ${PROJECT_SOURCE_DIR}/memdbg/memsearch.h
  ${PROJECT_SOURCE_DIR}/ntinspect/ntinspect.cc
  ${PROJECT_SOURCE_DIR}/ntinspect/ntinspect.h
  ${PROJECT_SOURCE_DIR}/winversion/winversion.cc
  ${PROJECT_SOURCE_DIR}/winversion/winversion.h
  ${common_src}
  ${import_src}
)

source_group("common" FILES ${common_src})
source_group("import" FILES ${import_src})

add_library(vnrhook SHARED ${vnrhook_src})

set(vnrhookxp_src ${vnrhook_src}
  ${PROJECT_SOURCE_DIR}/winseh/winseh.cc
  ${PROJECT_SOURCE_DIR}/winseh/winseh_safe.cc
  ${PROJECT_SOURCE_DIR}/winseh/winseh.h
  ${PROJECT_SOURCE_DIR}/winseh/safeseh.asm
)

enable_language(ASM_MASM)

set_source_files_properties(
  ${PROJECT_SOURCE_DIR}/winseh/safeseh.asm
  PROPERTIES
  # CMAKE_ASM_MASM_FLAGS /safeseh # CMake bug 14711: http://www.cmake.org/Bug/view.php?id=14711
  COMPILE_FLAGS /safeseh
)

add_library(vnrhookxp SHARED ${vnrhookxp_src})

set_target_properties(vnrhook vnrhookxp PROPERTIES
  LINK_FLAGS "/SUBSYSTEM:WINDOWS /MANIFEST:NO"
)

target_compile_options(vnrhook PRIVATE
  /EHa
  $<$<CONFIG:Release>:>
  $<$<CONFIG:Debug>:>
)

target_compile_options(vnrhookxp PRIVATE
  /GR-
# /EHs-c- # disable exception handling # CMake bug 15243: http://www.cmake.org/Bug/view.php?id=15243
  $<$<CONFIG:Release>:>
  $<$<CONFIG:Debug>:>
)

if(TARGET vnrhookxp)
  STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
endif(TARGET vnrhookxp)

set(vnrhook_libs
  vnrsys
  ${WDK_HOME}/lib/wxp/i386/ntdll.lib
  Version.lib
)

target_link_libraries(vnrhook ${vnrhook_libs})
target_link_libraries(vnrhookxp ${vnrhook_libs})

target_compile_definitions(vnrhook
  PRIVATE
  -DITH_HAS_SEH
)
target_compile_definitions(vnrhookxp
  PRIVATE
)

install(TARGETS vnrhook vnrhookxp RUNTIME
  DESTINATION .
  CONFIGURATIONS Release
)