detours 0.2.0

Detours is a software package for monitoring and instrumenting API calls on Windows.
##############################################################################
##
##  Establish build target type for Detours.
##
##  Microsoft Research Detours Package
##
##  Copyright (c) Microsoft Corporation.  All rights reserved.
##

############################################## Determine Processor Build Type.
#
# Default the detours architecture to match the compiler target that
# has been selected by the user via the VS Developer Command Prompt
# they launched.
!IF "$(DETOURS_TARGET_PROCESSOR)" == "" && "$(VSCMD_ARG_TGT_ARCH)" != ""

DETOURS_TARGET_PROCESSOR = $(VSCMD_ARG_TGT_ARCH)

!ENDIF

!IF "$(DETOURS_TARGET_PROCESSOR)" == "" && "$(PROCESSOR_ARCHITEW6432)" != ""

DETOURS_TARGET_PROCESSOR = X86

!ENDIF

!IF "$(DETOURS_TARGET_PROCESSOR)" == ""

DETOURS_TARGET_PROCESSOR = $(PROCESSOR_ARCHITECTURE)

!ENDIF

# Uppercase DETOURS_TARGET_PROCESSOR
DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:a=A)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:b=B)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:c=C)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:d=D)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:e=E)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:f=F)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:g=G)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:h=H)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:i=I)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:j=J)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:k=K)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:l=L)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:m=M)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:n=N)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:o=O)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:p=P)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:q=Q)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:r=R)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:s=S)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:t=T)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:u=U)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:v=V)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:w=W)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:x=X)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:y=Y)

DETOURS_TARGET_PROCESSOR=$(DETOURS_TARGET_PROCESSOR:z=Z)


!IF "$(DETOURS_TARGET_PROCESSOR)" == "WIN32"

DETOURS_TARGET_PROCESSOR = X86

!ENDIF

!IF "$(DETOURS_TARGET_PROCESSOR)" == "AMD64"

DETOURS_TARGET_PROCESSOR = X64

!ENDIF


!if "$(DETOURS_TARGET_PROCESSOR:64=)" == "$(DETOURS_TARGET_PROCESSOR)"

DETOURS_32BIT=1

DETOURS_BITS=32

!else
DETOURS_64BIT=1

DETOURS_BITS=64

!endif

########################################## Configure build based on Processor.
##
## DETOURS_OPTION_PROCESSOR: Set this macro if the processor *will* run code
##                           from another ISA (i.e. x86 on x64).
##
##      DETOURS_OPTION_BITS: Set this macro if the processor *may* have
##                           an alternative word size.
##
!IF "$(DETOURS_TARGET_PROCESSOR)" == "X64"

#!MESSAGE Building for 64-bit X64.
DETOURS_SOURCE_BROWSING = 0

DETOURS_OPTION_PROCESSOR=X86

DETOURS_OPTION_BITS=32

!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "IA64"

#!MESSAGE Building for 64-bit IA64.
DETOURS_OPTION_PROCESSOR=X86

DETOURS_OPTION_BITS=32

!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "X86"

#!MESSAGE Building for 32-bit X86.
DETOURS_OPTION_BITS=64

# Don't set DETOURS_OPTION_PROCESSOR for x64 because we don't *know* that
# we'll run on a 64-bit machine.
!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "ARM"

#!MESSAGE Building for 32-bit ARM.
!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "ARM64"

#!MESSAGE Building for 64-bit ARM64.
!ELSEIF "$(DETOURS_TARGET_PROCESSOR)" == "ARM64EC"

#!MESSAGE Building for 64-bit ARM64EC.
!ELSE
!MESSAGE Note: To select the target processor architecture set either

!MESSAGE       PROCESSOR_ARCHITECTURE or DETOURS_TARGET_PROCESSOR.
!MESSAGE
!ERROR Unknown target processor: "$(DETOURS_TARGET_PROCESSOR)"

!ENDIF

##############################################################################
##
!IF "$(DETOURS_CONFIG)" == "Debug"

DETOURS_DEBUG=1

!ELSE
DETOURS_DEBUG=0

!ENDIF

INCD = $(ROOT)\include

LIBD = $(ROOT)\lib.$(DETOURS_TARGET_PROCESSOR)$(DETOURS_CONFIG)

BIND = $(ROOT)\bin.$(DETOURS_TARGET_PROCESSOR)$(DETOURS_CONFIG)

OBJD = obj.$(DETOURS_TARGET_PROCESSOR)$(DETOURS_CONFIG)

!IF "$(DETOURS_OPTION_PROCESSOR)" != ""

OPTD = $(ROOT)\bin.$(DETOURS_OPTION_PROCESSOR)$(DETOURS_CONFIG)

!ENDIF

INCDS = $(ROOT)\include


LIBDS = \

        $(ROOT)\lib.x86$(DETOURS_CONFIG) \
        $(ROOT)\lib.x64$(DETOURS_CONFIG) \
        $(ROOT)\lib.ia64$(DETOURS_CONFIG) \
        $(ROOT)\lib.arm$(DETOURS_CONFIG) \
        $(ROOT)\lib.arm64$(DETOURS_CONFIG) \

BINDS = \

        $(ROOT)\bin.x86$(DETOURS_CONFIG) \
        $(ROOT)\bin.x64$(DETOURS_CONFIG) \
        $(ROOT)\bin.ia64$(DETOURS_CONFIG) \
        $(ROOT)\bin.arm$(DETOURS_CONFIG) \
        $(ROOT)\bin.arm64$(DETOURS_CONFIG) \

OBJDS = \

        obj.x86$(DETOURS_CONFIG) \
        obj.x64$(DETOURS_CONFIG) \
        obj.ia64$(DETOURS_CONFIG) \
        obj.arm$(DETOURS_CONFIG) \
        obj.arm64$(DETOURS_CONFIG) \

##############################################################################