project : pin {
  specific (prop:windows) {
    link_options += /EXPORT:main
  }

  verbatim (make, top) {
    no_hidden_visibility = 1
  }

  verbatim (gnuace, top) {
    no_hidden_visibility = 1
  }

  verbatim (make, macros) {
    ifeq ($(shell uname -s), Darwin)
      CPPFLAGS += -DTARGET_MAC
      LDFLAGS  += -nostdlib -ldl-dynamic -lunwind-dynamic -lpin3dwarf -lpinpthread -Wl,-exported_symbols_list -Wl,$(PIN_ROOT)/source/include/pin/pintool.exp
      LDFLAGS  -= -lpthread
    else
      CPPFLAGS += -DTARGET_LINUX -fno-rtti -Wl,--hash-style=sysv
      LDLIBS   += -nostdlib -ldl-dynamic -lunwind-dynamic -lpin3dwarf
      LDFLAGS  += -Wl,-Bsymbolic -Wl,--version-script=$(PIN_ROOT)/source/include/pin/pintool.ver
    endif
  }

  verbatim (gnuace, macros) {
    ifeq ($(shell uname -s), Darwin)
      CPPFLAGS += -DTARGET_MAC
      LDFLAGS  += -lpindwarf -lpinpthread -Wl,-exported_symbols_list -Wl,$(PIN_ROOT)/source/include/pin/pintool.exp
      LDFLAGS  -= -lpthread
    else
      CPPFLAGS += -DTARGET_LINUX -Wl,--hash-style=sysv
      LIBS     += -lpindwarf
      LDFLAGS  += -Wl,-Bsymbolic -Wl,--version-script=$(PIN_ROOT)/source/include/pin/pintool.ver
    endif
  }
}

feature (ia32) {
  specific (vc9) {
    link_options += /ENTRY:Ptrace_DllMainCRTStartup@12
  }

  specific (prop:microsoft) {
    EntryPointSymbol = Ptrace_DllMainCRTStartup@12
  }
}

feature (intel64) {
  specific (vc9) {
    link_options += /ENTRY:Ptrace_DllMainCRTStartup
  }

  specific (prop:microsoft) {
    EntryPointSymbol = Ptrace_DllMainCRTStartup
  }

  specific (make, gnuace) {
    compile_flags += $(PIN_ROOT)/intel64/runtime/pincrt/crtendS.o
    libpaths += $(PIN_ROOT)/intel64/runtime/pincrt
  }
}
