diff --git a/.ci/azp-linux-test.yml b/.ci/azp-linux-test.yml index 9736e215d7..393a01b46a 100644 --- a/.ci/azp-linux-test.yml +++ b/.ci/azp-linux-test.yml @@ -1,3 +1,8 @@ +parameters: +- name: b2_opts + type: string + default: '' + steps: - bash: | set -e @@ -26,16 +31,16 @@ steps: displayName: Test - bash: | set -e - ./src/engine/b2 b2 warnings-as-errors=on variant=debug,release address-model=32,64 toolset=${TOOLSET} + ./src/engine/b2 b2 warnings-as-errors=on variant=debug,release ${TOOLSET:+toolset=$TOOLSET} ${{ parameters.b2_opts }} displayName: "No Warnings" - bash: | set -e ./bootstrap.sh ${TOOLSET} - ./b2 --prefix=$HOME/temp/.b2 install toolset=${TOOLSET} + ./b2 --prefix=$HOME/temp/.b2 install ${TOOLSET:+toolset=$TOOLSET} ${{ parameters.b2_opts }} rm ./b2 export PATH=$HOME/temp/.b2/bin:$PATH cd $HOME touch build.jam b2 -v - b2 -n --debug-configuration toolset=${TOOLSET} + b2 -n --debug-configuration ${TOOLSET:+toolset=$TOOLSET} ${{ parameters.b2_opts }} displayName: Bootstrap diff --git a/.ci/azp-macos-test.yml b/.ci/azp-macos-test.yml index 1e517948b4..b93ea97393 100644 --- a/.ci/azp-macos-test.yml +++ b/.ci/azp-macos-test.yml @@ -1,3 +1,8 @@ +parameters: +- name: b2_opts + type: string + default: '' + steps: - bash: | set -e @@ -20,16 +25,16 @@ steps: displayName: Test - bash: | set -e - ./src/engine/b2 b2 warnings-as-errors=on variant=debug,release address-model=32,64 ${TOOLSET:+toolset=$TOOLSET} + ./src/engine/b2 b2 warnings-as-errors=on variant=debug,release ${TOOLSET:+toolset=$TOOLSET} ${{ parameters.b2_opts }} displayName: "No Warnings" - bash: | set -e ./bootstrap.sh ${TOOLSET} - ./b2 --prefix=$HOME/temp/.b2 install ${TOOLSET:+toolset=$TOOLSET} + ./b2 --prefix=$HOME/temp/.b2 install ${TOOLSET:+toolset=$TOOLSET} ${{ parameters.b2_opts }} rm ./b2 export PATH=$HOME/temp/.b2/bin:$PATH cd $HOME touch build.jam b2 -v - b2 -n --debug-configuration ${TOOLSET:+toolset=$TOOLSET} + b2 -n --debug-configuration ${TOOLSET:+toolset=$TOOLSET} ${{ parameters.b2_opts }} displayName: Bootstrap diff --git a/.ci/azp-windows-test.yml b/.ci/azp-windows-test.yml index 037aeccdb4..0f1e68cafd 100644 --- a/.ci/azp-windows-test.yml +++ b/.ci/azp-windows-test.yml @@ -1,3 +1,8 @@ +parameters: +- name: b2_opts + type: string + default: '' + steps: - powershell: | Set-PSDebug -Trace 1 @@ -22,7 +27,7 @@ steps: $env:HOME = $env:HOMEDRIVE + $env:HOMEPATH $env:path += ';' + $env:CXX_PATH echo "using" $env:TEST_TOOLSET ":" ":" $env:CXX ";" > ${env:HOME}/user-config.jam - ./src/engine/b2.exe --debug-configuration b2 warnings-as-errors=on variant=debug,release toolset=$env:TEST_TOOLSET + ./src/engine/b2.exe --debug-configuration b2 warnings-as-errors=on variant=debug,release toolset=$env:TEST_TOOLSET ${{ parameters.b2_opts }} displayName: "No Warnings" - powershell: | Set-PSDebug -Trace 1 @@ -30,11 +35,11 @@ steps: $env:path += ';' + $env:CXX_PATH echo "using" $env:TEST_TOOLSET ":" ":" $env:CXX ";" > ${env:HOME}/user-config.jam ./bootstrap.bat $env:TOOLSET - ./b2.exe --debug-configuration --prefix=${env:HOME}/temp/.b2 install toolset=$env:TEST_TOOLSET + ./b2.exe --debug-configuration --prefix=${env:HOME}/temp/.b2 install toolset=$env:TEST_TOOLSET ${{ parameters.b2_opts }} Remove-Item ./b2.exe $env:path += $env:HOME + '/temp/.b2' + ';' + $env:PATH cd $env:HOME echo $null >> build.jam b2 -v - b2 -n --debug-configuration + b2 -n --debug-configuration toolset=$env:TEST_TOOLSET ${{ parameters.b2_opts }} displayName: Bootstrap diff --git a/.github/workflows/installer_windows.yml b/.github/workflows/installer_windows.yml index f8ab137592..fe9f0f7dfc 100644 --- a/.github/workflows/installer_windows.yml +++ b/.github/workflows/installer_windows.yml @@ -55,9 +55,9 @@ jobs: uses: actions/upload-artifact@main with: name: installer - path: "${{github.workspace}}\\b2-pkg\\stage\\*.msi*" + path: "./b2-pkg/stage/*.msi*" - name: "Publish" uses: softprops/action-gh-release@master if: ${{ github.event_name == 'release' && github.event.action == 'published' }} with: - files: "${{github.workspace}}\\b2-pkg\\stage\\*.msi*" + files: "./b2-pkg/stage/*.msi*" diff --git a/.github/workflows/release_archives.yml b/.github/workflows/release_archives.yml index d388ef85b6..96cbf4fb76 100644 --- a/.github/workflows/release_archives.yml +++ b/.github/workflows/release_archives.yml @@ -74,7 +74,7 @@ jobs: - name: "Upload" uses: actions/upload-artifact@main with: - name: archives-${{github.run_id}} + name: B2-${{matrix.name}} path: "${{github.workspace}}/b2-*" - name: "Publish" diff --git a/Jamroot.jam b/Jamroot.jam index afe7421c71..73f5dbf079 100644 --- a/Jamroot.jam +++ b/Jamroot.jam @@ -153,7 +153,7 @@ exe b2 clang-win:advapi32 clang-win:user32 windows,gcc:src/engine/res.rc - windows,clang:src/engine/res.rc + windows,clang-linux:src/engine/res.rc msvc:src/engine/b2.exe.manifest clang-win:src/engine/b2.exe.manifest ; diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b67384e021..5cafff3bae 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -35,6 +35,7 @@ variables: - { name: linux_latest_os, value: 'focal' } - { name: windows_latest_vm, value: 'windows-2022' } - { name: clang_latest, value: '17' } +- { name: clang_latest_libstdcxx, value: 9 } - { name: gcc_latest, value: '13' } - { name: vc_latest, value: 'vc143' } - { name: vs_latest, value: '2022' } @@ -91,12 +92,14 @@ stages: - job: 'Linux_Latest' strategy: matrix: - GCC ${{variables.gcc_latest}}: {TOOLSET: "gcc-${{variables.gcc_latest}}", PACKAGES: "g++-${{variables.gcc_latest}}", VM_IMAGE: "${{variables.linux_latest_vm}}"} - Clang ${{variables.clang_latest}}: {TOOLSET: "clang-${{variables.clang_latest}}", PACKAGES: "clang-${{variables.clang_latest}}", LLVM_OS: "${{variables.linux_latest_os}}", LLVM_VER: "${{variables.clang_latest}}", VM_IMAGE: "${{variables.linux_latest_vm}}"} + GCC ${{variables.gcc_latest}}: {TOOLSET: "gcc-${{variables.gcc_latest}}", PACKAGES: "g++-${{variables.gcc_latest}}-multilib", VM_IMAGE: "${{variables.linux_latest_vm}}"} + Clang ${{variables.clang_latest}}: {TOOLSET: "clang-${{variables.clang_latest}}", PACKAGES: "clang-${{variables.clang_latest}} libstdc++-${{variables.clang_latest_libstdcxx}}-dev-i386-cross", LLVM_OS: "${{variables.linux_latest_os}}", LLVM_VER: "${{variables.clang_latest}}", VM_IMAGE: "${{variables.linux_latest_vm}}"} pool: vmImage: $(VM_IMAGE) steps: - template: .ci/azp-linux-test.yml + parameters: + b2_opts: address-model=32,64 - job: 'Windows_Latest' strategy: @@ -108,6 +111,8 @@ stages: continueOnError: 'true' steps: - template: .ci/azp-windows-test.yml + parameters: + b2_opts: address-model=32,64 - job: 'macOS' strategy: diff --git a/src/engine/build.sh b/src/engine/build.sh index 912c9478d5..9a1e0b1a05 100755 --- a/src/engine/build.sh +++ b/src/engine/build.sh @@ -251,7 +251,7 @@ check_toolset () if test_toolset sunpro && test_compiler /opt/SUNWspro/bin/CC -std=c++11 ; then B2_TOOLSET=sunpro ; return ${TRUE} ; fi # Generic (cxx) if test_toolset cxx && test_compiler cxx ; then B2_TOOLSET=cxx ; return ${TRUE} ; fi - if test_toolset cxx && test_compiler cpp ; then B2_TOOLSET=cxx ; return ${TRUE} ; fi + if test_toolset cxx && test_compiler c++ ; then B2_TOOLSET=cxx ; return ${TRUE} ; fi if test_toolset cxx && test_compiler CC ; then B2_TOOLSET=cxx ; return ${TRUE} ; fi # Nothing found. @@ -506,9 +506,16 @@ mod_version.cpp \ if test_true ${B2_DEBUG_OPT} ; then B2_CXXFLAGS="${B2_CXXFLAGS_DEBUG}" else B2_CXXFLAGS="${B2_CXXFLAGS_RELEASE} -DNDEBUG" fi - if [ -z "$B2_DONT_EMBED_MANIFEST" ] && [ -x "$(command -v windres)" ] ; then - B2_CXXFLAGS="${B2_CXXFLAGS} -Wl,res.o" - ( B2_VERBOSE_OPT=${TRUE} echo_run windres --input res.rc --output res.o ) + if [ -z "$B2_DONT_EMBED_MANIFEST" ] ; then + case "$(${B2_CXX} ${B2_CXXFLAGS} -dumpmachine 2>/dev/null)" in + *-windows*|*-mingw*|*-msys*|*-cygnus*|*-cygwin*) + WINDRES="$(${B2_CXX} ${B2_CXXFLAGS} -print-prog-name=windres 2>/dev/null)" + ;; + esac + if [ -n "${WINDRES}" ] ; then + B2_CXXFLAGS="${B2_CXXFLAGS} -Wl,res.o" + ( B2_VERBOSE_OPT=${TRUE} echo_run ${WINDRES} --input res.rc --output res.o ) + fi fi ( B2_VERBOSE_OPT=${TRUE} echo_run ${B2_CXX} ${B2_CXXFLAGS} ${B2_SOURCES} -o b2 ) } diff --git a/src/engine/config_toolset.bat b/src/engine/config_toolset.bat index 8b5e3091a1..a2419ace04 100644 --- a/src/engine/config_toolset.bat +++ b/src/engine/config_toolset.bat @@ -259,7 +259,8 @@ goto :eof :Embed_Minafest_Via_Windres if not defined B2_DONT_EMBED_MANIFEST ( - where windres >NUL 2>NUL - if errorlevel 1 ( call; ) else ( set "B2_CXX=windres --input res.rc --output res.o && %B2_CXX% -Wl,res.o" ) + for /f %%i in ('%B2_CXX% --print-prog-name=windres 2^>NUL') do ( + set "B2_CXX="%%i" --input res.rc --output res.o && %B2_CXX% -Wl,res.o" + ) ) goto :eof diff --git a/src/tools/clang-linux.jam b/src/tools/clang-linux.jam index 26891f4b60..82501f6a88 100644 --- a/src/tools/clang-linux.jam +++ b/src/tools/clang-linux.jam @@ -30,11 +30,18 @@ toolset.inherit-generators clang-linux clang linux : gcc : gcc.mingw.link gcc.mingw.link.dll gcc.cygwin.link gcc.cygwin.link.dll ; +local all-os = [ feature.values ] ; +local all-arch = [ feature.values ] ; + toolset.inherit-rules clang-linux : gcc ; toolset.inherit-flags clang-linux : gcc : full on/full on/fat + $(all-os)/32 + $(all-os)/64 + $(all-os)/$(all-arch)/32 + $(all-os)/$(all-arch)/64 : INCLUDE-GCH ; @@ -126,6 +133,12 @@ rule get-short-version ( command-string : single-digit-since ? ) return $(version[1]) ; } +local rule compile-link-flags ( * ) +{ + toolset.flags clang-linux.compile OPTIONS $(1) : $(2) ; + toolset.flags clang-linux.link OPTIONS $(1) : $(2) ; +} + ############################################################################### # Flags @@ -135,6 +148,9 @@ toolset.flags clang-linux.compile INCLUDE-PCH : -include-pch ; # For clang, 'on' and 'full' are identical. toolset.flags clang-linux.compile OPTIONS full : -Wno-inline ; +compile-link-flags 32 : -m32 ; +compile-link-flags 64 : -m64 ; + # LTO toolset.flags clang-linux.compile OPTIONS on/thin : -flto=thin ; toolset.flags clang-linux.link OPTIONS on/thin : -flto=thin ; diff --git a/src/tools/clang-win.jam b/src/tools/clang-win.jam index 92fed5e463..639a343c26 100644 --- a/src/tools/clang-win.jam +++ b/src/tools/clang-win.jam @@ -209,9 +209,9 @@ rule init ( version ? : command * : options * ) } toolset.flags clang-win.compile .CC $(cond) : $(compiler) --target=$(clang-arch)-pc-windows-msvc ; - toolset.flags clang-win.link .LD $(cond) : $(compiler) --target=$(clang-arch)-pc-windows-msvc ; + toolset.flags clang-win.link .LD $(cond) : $(compiler) --target=$(clang-arch)-pc-windows-msvc -fuse-ld=lld ; toolset.flags clang-win.link LINKOPT $(cond) : /link ; - toolset.flags clang-win.link LINKFLAGS $(cond) : "/incremental:no" "/manifest" "/machine:$(linker-arch)" ; + toolset.flags clang-win.link LINKFLAGS $(cond) : "/incremental:no" "/machine:$(linker-arch)" ; if $(arch) = x86 { toolset.flags clang-win.compile .ASM $(cond) : $(assembler) -nologo -c -Zp4 -Cp -Cx ; @@ -230,6 +230,18 @@ rule init ( version ? : command * : options * ) } } + local conditions = [ feature.split $(condition) ] ; + if ! [ version.version-less [ SPLIT_BY_CHARACTERS $(version) : . ] : 15 ] { + toolset.add-defaults $(conditions:J=,)\:linker ; + } + else { + # Clang seems to not care about adding WinSDK to PATH. + # Both MSVC link and LLVM lld-link (until v15) will fail to embed manifest. + # LINK : fatal error LNK1158: cannot run 'rc.exe' + # lld-link: error: unable to find mt.exe in PATH: no such file or directory + toolset.add-requirements $(conditions:J=,)\:mt ; + } + toolset.flags clang-win.link LIBRARY_OPTION clang-win : "" : unchecked ; # Enable response file control diff --git a/src/tools/flags.jam b/src/tools/flags.jam index 8bf6431c9f..72cc1ab728 100644 --- a/src/tools/flags.jam +++ b/src/tools/flags.jam @@ -116,7 +116,7 @@ generators.register generators.register [ class.new flag-check-generator EXE : msvc : "(LNK4044)" ] ; generators.register - [ class.new flag-check-generator EXE : clang : "(LNK4044)" ] ; # FIXME: clang-win doesn't work but clang does + [ class.new flag-check-generator EXE : clang : "(LNK4044|ignoring unknown argument)" ] ; generators.register [ class.new flag-check-generator OBJ : intel : "(#10006)" ] ; generators.register diff --git a/src/tools/fop.jam b/src/tools/fop.jam index 697cbe9656..57f8d8afc0 100644 --- a/src/tools/fop.jam +++ b/src/tools/fop.jam @@ -23,7 +23,7 @@ rule init ( fop-command ? : java-home ? : java ? ) } else { - if ! ( $(1) && $(2) && $(3) ) + if ! ( $(1) || $(2) || $(3) ) { return ; } diff --git a/src/tools/gcc.jam b/src/tools/gcc.jam index e5f8f53a46..61072358fb 100644 --- a/src/tools/gcc.jam +++ b/src/tools/gcc.jam @@ -184,11 +184,12 @@ rule init ( version ? : command * : options * : requirement * ) bin ?= [ common.get-absolute-tool-path $(command[-1]) ] ; root ?= $(bin:D) ; } + local machine ; local target-os ; # Autodetect the version and flavor if not given. if $(command) { - local machine = [ MATCH "^([^ ]+)" : + machine = [ MATCH "^([^ ]+)" : [ SHELL "$(command-string) -dumpmachine" ] ] ; if ! $(version) { # ?= operator does not short-circuit version ?= [ get-short-version $(command-string) ] ; @@ -203,6 +204,8 @@ rule init ( version ? : command * : options * : requirement * ) case *mingw* : target-os ?= windows ; case *cygwin* : target-os ?= cygwin ; case *linux* : target-os ?= linux ; + case *aix* : target-os ?= aix ; + case *hpux* : target-os ?= hpux ; # TODO: finish this list. } } @@ -276,6 +279,20 @@ rule init ( version ? : command * : options * : requirement * ) toolset.flags gcc VERSION $(condition) : [ regex.split $(version) "[.]" ] ; init-cxxstd-flags $(condition) : $(version) ; + + if ! $(target-os) in aix hpux + { + if [ MATCH "^(i.86|x86|powerpc|ppc|sparc)" : $(machine:L) ] + { + compile-link-flags $(condition)//32 : -m32 ; + compile-link-flags $(condition)//64 : -m64 ; + } + if [ MATCH "^(s390)" : $(machine:L) ] + { + compile-link-flags $(condition)//32 : -m31 ; + compile-link-flags $(condition)//64 : -m64 ; + } + } } if [ os.name ] = NT @@ -369,6 +386,8 @@ local rule compile-link-flags ( * ) compile-link-flags hpux/64 : -mlp64 ; local generic-os = [ set.difference $(all-os) : aix hpux ] ; + compile-link-flags $(generic-os)/s390x/32 : -m31 ; + compile-link-flags $(generic-os)/s390x/64 : -m64 ; local arch = power sparc x86 ; compile-link-flags $(generic-os)/$(arch)/32 : -m32 ; compile-link-flags $(generic-os)/$(arch)/64 : -m64 ; diff --git a/src/tools/msvc.jam b/src/tools/msvc.jam index 54a6ced323..0dc654fd8f 100644 --- a/src/tools/msvc.jam +++ b/src/tools/msvc.jam @@ -602,21 +602,13 @@ rule configure-version-specific ( toolset : version : conditions ) toolset.flags $(toolset).link LINKFLAGS $(conditions)/$(.cpu-arch-arm) : "/MACHINE:ARM" ; toolset.flags $(toolset).link LINKFLAGS $(conditions)/$(.cpu-arch-arm64) : "/MACHINE:ARM64" ; - if [ version.version-less [ SPLIT_BY_CHARACTERS [ MATCH "^([0123456789.]+)" : $(version) ] : . ] : 11 ] - { - # Make sure that manifest will be generated even if there is no - # dependencies to put there. - toolset.flags $(toolset).link LINKFLAGS $(conditions) : /MANIFEST ; - } - else - { - toolset.flags $(toolset).link LINKFLAGS $(conditions)/mt : /MANIFEST ; - toolset.flags $(toolset).link LINKFLAGS $(conditions)/linker/off : /MANIFEST ; - toolset.flags $(toolset).link LINKFLAGS $(conditions)/linker/on : "/MANIFEST:EMBED" ; - - local conditionx = [ feature.split $(conditions) ] ; + local conditionx = [ feature.split $(conditions) ] ; + if ! [ version.version-less [ SPLIT_BY_CHARACTERS [ MATCH "^([0123456789.]+)" : $(version) ] : . ] : 11 ] { toolset.add-defaults $(conditionx:J=,)\:linker ; } + else { + toolset.add-requirements $(conditionx:J=,)\:mt ; + } } toolset.pop-checking-for-flags-module ; @@ -2012,6 +2004,10 @@ local rule register-toolset-really ( ) toolset.flags msvc LINKFLAGS native : "/subsystem:native" ; toolset.flags msvc LINKFLAGS auto : "/subsystem:posix" ; + toolset.flags msvc.link LINKFLAGS mt : /MANIFEST ; + toolset.flags msvc.link LINKFLAGS linker/off : /MANIFEST ; + toolset.flags msvc.link LINKFLAGS linker/on : "/MANIFEST:EMBED" ; + toolset.flags msvc.link LINKFLAGS ; toolset.flags msvc.link LINKPATH ; diff --git a/src/tools/pkg-config.jam b/src/tools/pkg-config.jam index 9d7fe2c34a..8ddb66d83b 100644 --- a/src/tools/pkg-config.jam +++ b/src/tools/pkg-config.jam @@ -158,7 +158,7 @@ rule init ( config ? : command * : options * ) { config = [ default-config ] ; if ( $(config) in [ $(.configs).all ] ) - && ! ( $(command) && $(options) ) + && ! ( $(command) || $(options) ) { return ; } diff --git a/src/tools/python.jam b/src/tools/python.jam index bac00b33e7..f8f63f40ff 100644 --- a/src/tools/python.jam +++ b/src/tools/python.jam @@ -110,7 +110,7 @@ rule init ( version ? : cmd-or-prefix ? : includes * : libraries ? } else { - if ! ( $(1) && $(2) && $(3) && $(4) && $(5) && $(6) ) + if ! ( $(1) || $(2) || $(3) || $(4) || $(5) || $(6) ) { return ; } diff --git a/src/tools/saxonhe.jam b/src/tools/saxonhe.jam index fc4203cab6..a8d40f33b5 100644 --- a/src/tools/saxonhe.jam +++ b/src/tools/saxonhe.jam @@ -17,7 +17,7 @@ rule init ( saxonhe_jar ? : java_exe ? ) } else { - if ! ( $(1) && $(2) ) + if ! ( $(1) || $(2) ) { return ; } diff --git a/test/path_specials.py b/test/path_specials.py index 80252083c0..e47ee42de4 100644 --- a/test/path_specials.py +++ b/test/path_specials.py @@ -24,8 +24,7 @@ def test_dir(dir_name): if os.name == 'nt' and len(tmpdir) > 256: tmp = {} # cl.exe and link.exe still does not support long paths - # clang-cl does support long path, but it uses link.exe by default - if t.toolset.startswith('msvc') or t.toolset.startswith('clang-win'): + if t.toolset.startswith('msvc'): do_compile_test = False # on windows gcc doesn't support long path, ld doesn't support neither unicode nor long path if os.environ.get('MSYSTEM') in ['UCRT64', 'MINGW64', 'MINGW32'] and t.toolset in ['gcc', 'clang']: diff --git a/test/toolset-mock/src/linkx.py b/test/toolset-mock/src/linkx.py index 2c7cd518fb..b28a7138ae 100644 --- a/test/toolset-mock/src/linkx.py +++ b/test/toolset-mock/src/linkx.py @@ -7,27 +7,27 @@ from MockProgram import * if allow_properties("variant=debug", "link=shared", "threading=multi", "runtime-link=shared", "windows-api=desktop"): - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\lib.obj'), '/DEBUG', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\l1.dll')), '/DLL', arg('/IMPLIB:', output_file(r'bin\msvc-14.3\debug\threading-multi\l1.implib'))) - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\main.obj'), input_file(r'bin\msvc-14.3\debug\threading-multi\l1.implib'), '/DEBUG', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\test.exe'))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\lib.obj'), '/DEBUG', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\l1.dll')), '/DLL', arg('/IMPLIB:', output_file(r'bin\msvc-14.3\debug\threading-multi\l1.implib')))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\main.obj'), input_file(r'bin\msvc-14.3\debug\threading-multi\l1.implib'), '/DEBUG', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\test.exe')))) if allow_properties("variant=release", "link=shared", "threading=multi", "runtime-link=shared", "windows-api=desktop"): - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\release\threading-multi\lib.obj'), '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\release\threading-multi\l1.dll')), '/DLL', arg('/IMPLIB:', output_file(r'bin\msvc-14.3\release\threading-multi\l1.implib'))) - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\release\threading-multi\main.obj'), input_file(r'bin\msvc-14.3\release\threading-multi\l1.implib'), '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\release\threading-multi\test.exe'))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\release\threading-multi\lib.obj'), '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\release\threading-multi\l1.dll')), '/DLL', arg('/IMPLIB:', output_file(r'bin\msvc-14.3\release\threading-multi\l1.implib')))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\release\threading-multi\main.obj'), input_file(r'bin\msvc-14.3\release\threading-multi\l1.implib'), '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\release\threading-multi\test.exe')))) if allow_properties("variant=debug", "link=static", "threading=multi", "runtime-link=shared", "windows-api=desktop"): - command('link', '/lib', '/NOLOGO', arg('/out:', output_file(r'bin\msvc-14.3\debug\link-static\threading-multi\l1.lib')), input_file(r'bin\msvc-14.3\debug\link-static\threading-multi\lib.obj')) - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\link-static\threading-multi\main.obj'), input_file(r'bin\msvc-14.3\debug\link-static\threading-multi\l1.lib'), '/DEBUG', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\link-static\threading-multi\test.exe'))) + command('link', unordered('/lib', '/NOLOGO', arg('/out:', output_file(r'bin\msvc-14.3\debug\link-static\threading-multi\l1.lib')), input_file(r'bin\msvc-14.3\debug\link-static\threading-multi\lib.obj'))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\link-static\threading-multi\main.obj'), input_file(r'bin\msvc-14.3\debug\link-static\threading-multi\l1.lib'), '/DEBUG', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\link-static\threading-multi\test.exe')))) if allow_properties("variant=debug", "link=static", "threading=single", "runtime-link=static", "windows-api=desktop"): - command('link', '/lib', '/NOLOGO', arg('/out:', output_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\l1.lib')), input_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\lib.obj')) - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\main.obj'), input_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\l1.lib'), '/DEBUG', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\test.exe'))) + command('link', unordered('/lib', '/NOLOGO', arg('/out:', output_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\l1.lib')), input_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\lib.obj'))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\main.obj'), input_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\l1.lib'), '/DEBUG', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\link-static\runtime-link-static\test.exe')))) if allow_properties("variant=debug", "link=shared", "threading=multi", "runtime-link=shared", "windows-api=store"): - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\lib.obj'), '/DEBUG', '/APPCONTAINER', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\l1.dll')), '/DLL', arg('/IMPLIB:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\l1.implib'))) - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\main.obj'), input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\l1.implib'), '/DEBUG', '/APPCONTAINER', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\test.exe'))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\lib.obj'), '/DEBUG', '/APPCONTAINER', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\l1.dll')), '/DLL', arg('/IMPLIB:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\l1.implib')))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\main.obj'), input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\l1.implib'), '/DEBUG', '/APPCONTAINER', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-store\test.exe')))) if allow_properties("variant=debug", "link=shared", "threading=multi", "runtime-link=shared", "windows-api=phone"): - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\lib.obj'), '/DEBUG', '/APPCONTAINER', '/NODEFAULTLIB:kernel32.lib', '/NODEFAULTLIB:ole32.lib', 'WindowsPhoneCore.lib', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\l1.dll')), '/DLL', arg('/IMPLIB:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\l1.implib'))) - command('link', '/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\main.obj'), input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\l1.implib'), '/DEBUG', '/APPCONTAINER', '/NODEFAULTLIB:kernel32.lib', '/NODEFAULTLIB:ole32.lib', 'WindowsPhoneCore.lib', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\test.exe'))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\lib.obj'), '/DEBUG', '/APPCONTAINER', '/NODEFAULTLIB:kernel32.lib', '/NODEFAULTLIB:ole32.lib', 'WindowsPhoneCore.lib', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\l1.dll')), '/DLL', arg('/IMPLIB:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\l1.implib')))) + command('link', unordered('/NOLOGO', '/INCREMENTAL:NO', input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\main.obj'), input_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\l1.implib'), '/DEBUG', '/APPCONTAINER', '/NODEFAULTLIB:kernel32.lib', '/NODEFAULTLIB:ole32.lib', 'WindowsPhoneCore.lib', '/MACHINE:X64', '/MANIFEST:EMBED', '/subsystem:console', arg('/out:', output_file(r'bin\msvc-14.3\debug\threading-multi\windows-api-phone\test.exe')))) main()