| # Copyright Vladimir Prus 2004. |
| # Distributed under the Boost Software License, Version 1.0. |
| # (See accompanying file LICENSE_1_0.txt |
| # or copy at http://www.boost.org/LICENSE_1_0.txt) |
| |
| # Importing common is needed because the rules we inherit here depend on it. |
| # That is nasty. |
| import common ; |
| import errors ; |
| import feature ; |
| import clang ; |
| import msvc ; |
| import os ; |
| import toolset ; |
| import generators ; |
| import type ; |
| import path ; |
| import set ; |
| |
| feature.extend-subfeature toolset clang : platform : win ; |
| |
| toolset.inherit-generators clang-win <toolset>clang <toolset-clang:platform>win : msvc ; |
| toolset.inherit-flags clang-win : msvc : <debug-symbols>on/<debug-store>object <asynch-exceptions>off <asynch-exceptions>on : YLOPTION ; |
| toolset.inherit-rules clang-win : msvc ; |
| |
| # Override default do-nothing generators. |
| generators.override clang-win.compile.c.pch : pch.default-c-pch-generator ; |
| generators.override clang-win.compile.c++.pch : pch.default-cpp-pch-generator ; |
| generators.override clang-win.compile.rc : rc.compile.resource ; |
| generators.override clang-win.compile.mc : mc.compile ; |
| |
| toolset.flags clang-win.compile PCH_SOURCE <pch>on : <pch-source> ; |
| |
| toolset.flags clang-win.compile CFLAGS <debug-symbols>on/<debug-store>object : "" ; |
| |
| # Initializes the intel toolset for windows |
| rule init ( version ? : # the compiler version |
| command * : # the command to invoke the compiler itself |
| options * # Additional option: <compatibility> |
| # either 'vc6', 'vc7', 'vc7.1' |
| # or 'native'(default). |
| ) |
| { |
| local compatibility = |
| [ feature.get-values <compatibility> : $(options) ] ; |
| local condition = [ common.check-init-parameters clang-win |
| : version $(version) : compatibility $(compatibility) ] ; |
| |
| if ! $(compatibility) |
| { |
| import errors ; |
| errors.error "Please set <compatibility> property for visual studio version!" ; |
| } |
| local vc_version = [ MATCH vc([0-9]+) : $(compatibility) ] ; |
| if ! $(vc_version) |
| { |
| errors.user-error "Invalid value for compatibility option:" |
| $(compatibility) ; |
| } |
| |
| local m = [ MATCH ([0-9]+).* : $(version) ] ; |
| local major = $(m[1]) ; |
| |
| command = [ common.get-invocation-command clang-win : clang-cl.exe : |
| $(command) ] ; |
| |
| common.handle-options clang-win : $(condition) : $(command) : $(options) ; |
| |
| local setup ; |
| setup = [ get-visual-studio-vcvars $(vc_version) ] ; # Get visual studio vcvars bat file path |
| |
| local target_types ; |
| if [ MATCH ^(AMD64) : [ os.environ PROCESSOR_ARCHITECTURE ] ] |
| { |
| target_types = x86 amd64 ; |
| } |
| else |
| { |
| target_types = x86 x86_amd64 ; |
| } |
| |
| for local c in $(target_types) |
| { |
| local cpu-conditions ; |
| local setup-call ; |
| setup-call = "call \""$(setup)"\" $(c) > nul " ; |
| cpu-conditions = $(condition)/$(.cpu-arch-$(c)) ; |
| |
| if [ os.name ] = NT |
| { |
| setup-call = $(setup-call)" |
| " ; |
| } |
| else |
| { |
| setup-call = "cmd /S /C "$(setup-call)" \"&&\" " ; |
| } |
| |
| if $(.debug-configuration) |
| { |
| for local cpu-condition in $(cpu-conditions) |
| { |
| ECHO "notice: [clang-cfg] condition: '$(cpu-condition)', setup: '$(setup-call)'" ; |
| } |
| } |
| |
| local compiler ; |
| compiler = [ path.native $(command) ] ; |
| compiler = "\"$(compiler)\"" ; |
| |
| toolset.flags clang-win.compile .CC $(cpu-conditions) : $(setup-call)$(compiler) ; |
| toolset.flags clang-win.link .LD $(cpu-conditions) : $(setup-call)link /nologo ; |
| toolset.flags clang-win.archive .LD $(cpu-conditions) : $(setup-call)link /lib /nologo ; |
| toolset.flags clang-win.link .MT $(cpu-conditions) : $(setup-call)mt -nologo ; |
| toolset.flags clang-win.compile .MC $(cpu-conditions) : $(setup-call)mc ; |
| toolset.flags clang-win.compile .RC $(cpu-conditions) : $(setup-call)rc ; |
| } |
| |
| |
| local C++FLAGS ; |
| |
| if $(vc_version) = 10 |
| { |
| C++FLAGS += -fmsc-version=1600 ; |
| } |
| else if $(vc_version) = 11 |
| { |
| C++FLAGS += -fmsc-version=1700 ; |
| } |
| else if $(vc_version) = 12 |
| { |
| C++FLAGS += -fmsc-version=1800 ; |
| } |
| |
| toolset.flags clang-win CFLAGS $(condition) : $(C++FLAGS) ; |
| |
| msvc.configure-version-specific clang-win : $(vc_version) : $(condition) ; |
| } |
| |
| local rule get-visual-studio-vcvars ( version ) |
| { |
| local env_variable_name ; |
| env_variable_name = "VS"$(version:U)"0COMNTOOLS" ; |
| |
| local vc-path = [ os.environ $(env_variable_name) ] ; |
| vc-path = [ path.join $(vc-path) "../../VC/vcvarsall.bat" ] ; |
| path.native $(vc-path) ; |
| } |
| |
| |
| if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ] |
| { |
| .debug-configuration = true ; |
| } |
| |
| # Copied from msvc.jam |
| # Supported CPU architectures. |
| .cpu-arch-x86 = |
| <architecture>/<address-model> |
| <architecture>/<address-model>32 |
| <architecture>x86/<address-model> |
| <architecture>x86/<address-model>32 ; |
| |
| .cpu-arch-amd64 = |
| <architecture>/<address-model>64 |
| <architecture>x86/<address-model>64 ; |
| |
| .cpu-arch-x86_amd64 = |
| <architecture>/<address-model>64 |
| <architecture>x86/<address-model>64 ; |
| |
| # toolset.flags clang-win.link LIBRARY_OPTION <toolset>clang : "" ; |
| |
| toolset.flags clang-win YLOPTION ; |
| |