// -*- MPC -*-
// Any of these platforms can be set using
//   -value_template platforms="blah blah blah"
// when generating a CDT project/workspace combo.  The default is to use the
// platform that matches the host that's running MPC (see fill_value() in
// CDT6ProjectCreator.pm).
//

//
// Platforms
//

conditional_include "common"
conditional_include "unixcommon" // We include this at the global b/c most
                                 // platforms are unix-ish.  windowscommon
                                 // overrides these in the relevant scopes.

// These will have platform_specializer appended if it's defined
configuration_parent_root = cdt.managedbuild.config.gnu
toolchain_superclass_root = cdt.managedbuild.toolchain.gnu
toolchain_internal_builder_root = cdt.managedbuild.target.gnu.builder
targetplatform_superclass = cdt.managedbuild.target.gnu.platform
outputtype_superclass = cdt.managedbuild.tool.gnu.cpp.linker.output

// These are just defaults
exe_ext_nodot =
dll_ext_nodot = so
lib_ext_nodot = a
tool_name_prefix = GNU
c_linker_tool_superclass_root = cdt.managedbuild.tool.gnu.c.linker // must have .so.debug appended
cpp_linker_tool_superclass_root = cdt.managedbuild.tool.gnu.cpp.linker // must have .so.debug appended
linker_option_superclass = gnu.cpp.link.option // must have .XXX appended
cpp_compiler_option_superclass = gnu.cpp.compiler.option
c_compiler_superclass = ???
c_compiler_option_superclass = gnu.c.compiler.option
project_element_type_id = cdt.managedbuild.target.gnu
c_linker_dynamiclib_superclass = gnu.c.link.so.debug.option.shared
cpp_linker_dynamiclib_superclass = gnu.cpp.link.so.debug.option.shared
cpp_linker_tool_input_superclass = cdt.managedbuild.tool.gnu.cpp.linker.input

linux {
  binary_parsers = org.eclipse.cdt.core.ELF
  error_parsers = org.eclipse.cdt.core.GASErrorParser org.eclipse.cdt.core.GLDErrorParser org.eclipse.cdt.core.GCCErrorParser
  threadflags = -pthread
  platform_libs += rt dl
}

// cellppu is an example for how to do a cross-compile (or, really, any compile using
// tools with non-standard names).
cellppu {
  as = ppu-as
  ar = ppu-ar
  cc = ppu-gcc
  // can set ccld to name of C Linker if different from cc
  cxx = ppu-g++
  // can set cxxld to name of C++ Linker if different from cxx

  binary_parsers = org.eclipse.cdt.core.ELF
  error_parsers = org.eclipse.cdt.core.GASErrorParser org.eclipse.cdt.core.GLDErrorParser org.eclipse.cdt.core.GCCErrorParser
  threadflags = -pthread
  platform_libs += rt dl
}

// This scope serves as an example of a custom platform.  On 64-bit linux,
// you can compile a 32-bit binary by passing -m32 to gcc.  Using this custom
// platform, MPC can generate CDT projects that have "Build Configurations"
// for both 64-bit and 32-bit.  This would be enabled by running mwc.pl with
// -value_template platforms="linux linux_m32"
linux_m32 {
  binary_parsers = org.eclipse.cdt.core.ELF
  error_parsers = org.eclipse.cdt.core.GASErrorParser org.eclipse.cdt.core.GLDErrorParser org.eclipse.cdt.core.GCCErrorParser
  ccflags += -m32
  cxxflags += -m32
  linkflags += -m32
  threadflags = -pthread
  platform_libs += rt dl
}

macosx {
  dll_ext = .dylib
  exe_ext_nodot =
  dll_ext_nodot = dylib
  lib_ext_nodot = a

  binary_parsers = org.eclipse.cdt.core.MachO64
  error_parsers = org.eclipse.cdt.core.GASErrorParser org.eclipse.cdt.core.GLDErrorParser org.eclipse.cdt.core.GCCErrorParser
  host_platform = host_macosx
  project_element_type_id = cdt.managedbuild.target.macosx
  // platform_specializer gets added on to various things like configuration_parent_root, etc.
  configuration_parent_root = cdt.managedbuild.config
  platform_specializer = macosx
  tool_name_prefix = "MacOS X"
  linker_option_superclass = macosx.cpp.link.option
  c_linker_dynamiclib_superclass = macosx.c.link.macosx.so.debug.option.shared
  cpp_linker_dynamiclib_superclass = macosx.cpp.link.macosx.so.debug.option.shared
  c_linker_tool_superclass_root = cdt.managedbuild.tool.macosx.c.linker.macosx // must have .so.debug appended
  cpp_linker_tool_superclass_root = cdt.managedbuild.tool.macosx.cpp.linker.macosx // must have .so.debug appended
cpp_linker_tool_input_superclass = cdt.managedbuild.tool.macosx.cpp.linker.input
  outputtype_superclass = cdt.managedbuild.tool.macosx.cpp.linker.output.so
}

win32 {
  conditional_include "windowscommon"

  lib_prefix = lib // this is different from VC++ b/c we're using mingw

  exe_ext_nodot = exe
  dll_ext_nodot = dll
  lib_ext_nodot = lib

  platform_libs =
  threadflags = -mthreads

  binary_parsers = org.eclipse.cdt.core.PE
  error_parsers = org.eclipse.cdt.core.GASErrorParser org.eclipse.cdt.core.GLDErrorParser org.eclipse.cdt.core.GCCErrorParser
  host_platform = host_win32
  project_element_type_id = cdt.managedbuild.target.gnu.mingw
  platform_specializer = mingw
  tool_name_prefix = MinGW
  linker_option_superclass = gnu.cpp.link.option // must have .XXX appended
  c_compiler_superclass = cdt.managedbuild.tool.gnu.c.compiler.mingw
  c_linker_dynamiclib_superclass = gnu.c.link.mingw.so.debug.option.shared
  cpp_linker_dynamiclib_superclass = gnu.cpp.link.mingw.so.debug.option.shared
  c_linker_tool_superclass_root = cdt.managedbuild.tool.gnu.c.linker.mingw // must have .so.debug appended
  cpp_linker_tool_superclass_root = cdt.managedbuild.tool.gnu.cpp.linker.mingw // must have .so.debug appended
  cpp_linker_tool_input_superclass = cdt.managedbuild.tool.mingw.cpp.linker.input
}

cygwin {
  binary_parsers = org.eclipse.cdt.core.PE
  error_parsers = org.eclipse.cdt.core.GASErrorParser org.eclipse.cdt.core.GLDErrorParser org.eclipse.cdt.core.GCCErrorParser
  host_platform = host_win32
  platform_specializer = cygwin
}

solaris {
  binary_parsers = org.eclipse.cdt.core.ELF
  error_parsers = org.eclipse.cdt.core.GASErrorParser org.eclipse.cdt.core.GLDErrorParser org.eclipse.cdt.core.GCCErrorParser
  platform_specializer = solaris
}

// default values for the host-specific variables, overridden below
host_platform = linux
libenv = LD_LIBRARY_PATH
shell = sh
script_ext = .sh
script_hdr = #!/bin/sh
script_tmpfile = temporary$$.src
makefile_tmpfile = temporary$$$$.src
setenv = export
envvar_pre = $
pathsep = :
quote_echo = '
ln = ln -sf

host_macosx {
  libenv = DYLD_LIBRARY_PATH
}

host_win32 {
  libenv = PATH
  shell = cmd /c
  script_ext = .cmd
  script_hdr = "@echo off & set TMPFILE=temporary%RANDOM%.src"
  script_tmpfile = %TMPFILE%
  makefile_tmpfile = temporary_mpc.src
  setenv = set
  envvar_pre = %
  envvar_post = %
  pathsep = ;
  mkdir_pre = if not exist
  ln = copy /y
  quote_echo =
}

// Abstractions for different configurations
release {
  optimization_level = max
  debugging_level = none
}

debug {
  optimization_level = none
  debugging_level = max
}
