You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

195 lines
4.8 KiB

##############################################################
#
# This file contains general variable definitions used by the PinTools makefiles.
# See makefile.unix.config for an explanation of each variable defined in this file.
#
##############################################################
###### Architecture ######
# Identify the architecture of the host
ifndef HOST_ARCH
HST := $(shell uname -m)
ifeq ($(HST),x86)
HOST_ARCH := ia32
endif
ifeq ($(HST),i386)
HOST_ARCH := ia32
endif
ifeq ($(HST),i686)
HOST_ARCH := ia32
endif
ifeq ($(HST),x86_64)
HOST_ARCH := intel64
endif
ifeq ($(HST),amd64)
HOST_ARCH := intel64
endif
# Verify known host
ifndef HOST_ARCH
$(error Could not detect the host architecture. Please define HOST_ARCH from the command line.)
endif
endif
# Define the architecture of the target
TARGET ?= $(HOST_ARCH)
ifeq ($(TARGET),ia32)
BITS := 32
else
BITS := 64
endif
# Define the output directory
OBJDIR := obj-$(TARGET)/
# Seperator for list of paths
PATHS_SEPERATOR := :
###### Operating system ######
# Identify the operating system
ifndef HOST_OS
OS := $(shell uname -s)
ifeq ($(OS),Darwin)
HOST_OS := mac
endif
ifeq ($(OS),Linux)
HOST_OS := linux
endif
endif
TARGET_OS ?= $(HOST_OS)
# Verify known operating system
ifndef TARGET_OS
$(error Could not identify the host operating system. Please define TARGET_OS from the command line.)
endif
# Define the general OS type
OS_TYPE := unix
###### Program definitions ######
# COMPILER may have already been defined during the build so don't override it with the hardcoded defaults below.
ifdef ICCPIN
COMPILER ?= icc
endif
ifeq ($(TARGET_OS),mac)
COMPILER ?= clang
endif
COMPILER ?= gcc
ifeq ($(ICC),1)
# This makefile assumes that the iccvars script has been run. So if the user didn't
# specify a full path to CC and CXX, we override them now and let the PATH set by the
# iccvars script to find the appropriate compiler.
ifeq ($(origin CC), default)
CC := icc
CXX := icpc
endif
endif
# If the native compiler and binutils are too new, we must link the tools with older
# versions of binutils to test tools in probe mode. To do that we put their directory
# in the front of the PATH environment variable.
ifdef BINUTILS_PATH
LINKER := env PATH=$(BINUTILS_PATH):$(PATH) $(CXX)
else
LINKER := $(CXX)
endif
ARCHIVER := /usr/bin/ar cr
ifeq ($(TARGET_OS),mac)
ASMBLR := $(CXX)
else
ASMBLR := $(CC)
endif
###### File extensions ######
EXE_SUFFIX := .exe
OBJ_SUFFIX := .o
DLL_SUFFIX := .so
ifeq ($(TARGET_OS),mac)
# macOS* has a different suffix for dlls, so override DLL_SUFFIX.
DLL_SUFFIX := .dylib
endif
PINTOOL_SUFFIX := $(DLL_SUFFIX)
SATOOL_SUFFIX := .exe
LIB_SUFFIX := .a
ASM_SUFFIX := .s
DLL_PREFIX := lib
DLL_LINKAGE_SUFFIX := $(DLL_SUFFIX)
DBG_SUFFIX :=
###### Function pre/suffixes ######
ifeq ($(TARGET_OS),mac)
# The function naming convention on mac is to have all public functions start with '_'
GLOBALFUN_PREFIX := _
else
GLOBALFUN_PREFIX :=
endif
###### Attach support ######
# Some linux security modules make attach mode unusable
ifeq ($(TARGET_OS),linux)
ifeq ($(shell cat /proc/sys/kernel/yama/ptrace_scope 2>&1),1)
ATTACH := 0
endif
endif
ATTACH ?= 1
###### Additional utilities ######
RM := $(CMD_PREFIX) rm
MV := $(CMD_PREFIX) mv
SYNC := $(CMD_PREFIX) sync
PYTHON := $(CMD_PREFIX) python3
DIFF := $(CMD_PREFIX) diff -w
# macOS* has a different compare program.
# It is overridden in makefile.unix.config since it depends on TOOLS_ROOT which is defined in that file.
CMP := $(CMD_PREFIX) cmp
CMD :=
SH := $(CMD_PREFIX) sh
TR := $(CMD_PREFIX) tr
GREP := $(CMD_PREFIX) grep
QGREP := $(CMD_PREFIX) grep -q
CGREP := $(CMD_PREFIX) grep -c
EGREP := $(CMD_PREFIX) egrep
PGREP := $(CMD_PREFIX) pgrep
LINECOUNT := $(CMD_PREFIX) wc -l
BASHTEST := $(CMD_PREFIX) test
TOUCH := $(CMD_PREFIX) touch
STRIP := /usr/bin/strip
CP := $(CMD_PREFIX) cp
OBJCOPY := $(CMD_PREFIX) objcopy
LS_VERBOSE := $(CMD_PREFIX) ls -l
READLINK := $(CMD_PREFIX) readlink
ifeq ($(TARGET_OS),mac)
SETARCH := $(CMD_PREFIX) arch
SET_TOOL_DLL_PATH := export PIN_VM_DYLD_LIBRARY_PATH=:$(OBJDIR);
else
SETARCH := $(CMD_PREFIX) setarch
ifeq ($(TARGET),ia32)
SET_TOOL_DLL_PATH := export PIN_VM32_LD_LIBRARY_PATH=:$(OBJDIR);
else
SET_TOOL_DLL_PATH := export PIN_VM64_LD_LIBRARY_PATH=:$(OBJDIR);
endif
# Remove the time stamp for ls to make it more deterministic
LS_VERBOSE += --time-style=+""
endif
SORT := $(CMD_PREFIX) sort
SED := $(CMD_PREFIX) sed
EXPR := $(CMD_PREFIX) expr
UNAME := $(CMD_PREFIX) uname
AWK := $(CMD_PREFIX) awk
XARGS := $(CMD_PREFIX) xargs
SUDO := $(CMD_PREFIX) sudo
CHOWN := $(CMD_PREFIX) chown
CHMOD := $(CMD_PREFIX) chmod