From b3a59d265929a213f02a451bb63cea75d668a4d9 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Thu, 2 Apr 2020 01:31:47 +0100 Subject: [PATCH 1/5] Fix compiler version check on macOS (#560) Fixes #440. --- src/tools/darwin.jam | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/tools/darwin.jam b/src/tools/darwin.jam index 8d477410b..97e7ecb85 100644 --- a/src/tools/darwin.jam +++ b/src/tools/darwin.jam @@ -137,13 +137,14 @@ rule init ( version ? : command * : options * : requirement * ) # - Set the toolset generic common options. common.handle-options darwin : $(condition) : $(command) : $(options) ; + real-version = [ regex.split $(real-version) \\. ] ; # - GCC 4.0 and higher in Darwin does not have -fcoalesce-templates. - if $(real-version) < "4.0.0" + if [ version.version-less $(real-version) : 4 0 ] { flags darwin.compile.c++ OPTIONS $(condition) : -fcoalesce-templates ; } # - GCC 4.2 and higher in Darwin does not have -Wno-long-double. - if $(real-version) < "4.2.0" + if [ version.version-less $(real-version) : 4 2 ] { flags darwin.compile OPTIONS $(condition) : -Wno-long-double ; } From f384d2f5a8677fc1acbf68dca24d14f2c8b9344a Mon Sep 17 00:00:00 2001 From: Nikita Kniazev Date: Thu, 2 Apr 2020 19:56:47 +0300 Subject: [PATCH 2/5] force-include feature (#558) Specifies an include path that has to be included in a way like if `#include "file"` appeared as the first line of the primary source file. --- doc/src/reference.adoc | 1 + src/tools/clang-linux.jam | 12 +++--- src/tools/clang-vxworks.jam | 4 +- src/tools/features/force-include-feature.jam | 21 ++++++++++ src/tools/gcc.jam | 9 +++-- src/tools/msvc.jam | 3 +- test/feature_force_include.py | 41 ++++++++++++++++++++ 7 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 src/tools/features/force-include-feature.jam create mode 100644 test/feature_force_include.py diff --git a/doc/src/reference.adoc b/doc/src/reference.adoc index 05184817c..682f0cf45 100644 --- a/doc/src/reference.adoc +++ b/doc/src/reference.adoc @@ -234,6 +234,7 @@ include::../../src/tools/features/find-lib-feature.jam[tag=doc] include::../../src/tools/features/flags-feature.jam[tag=doc] include::../../src/tools/features/dll-feature.jam[tag=hardcode-doc] include::../../src/tools/features/dependency-feature.jam[tag=impl-doc] +include::../../src/tools/features/force-include-feature.jam[tag=doc] include::../../src/tools/features/include-feature.jam[tag=doc] include::../../src/tools/features/optimization-feature.jam[tag=inline-doc] include::../../src/tools/features/instruction-set-feature.jam[tag=doc] diff --git a/src/tools/clang-linux.jam b/src/tools/clang-linux.jam index 13b34552c..fd753e136 100644 --- a/src/tools/clang-linux.jam +++ b/src/tools/clang-linux.jam @@ -146,12 +146,12 @@ rule compile.c++ ( targets * : sources * : properties * ) { } actions compile.c++.without-pch { - "$(CONFIG_COMMAND)" -c -x c++ $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" -c -x c++ $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" -o "$(<)" "$(>)" } actions compile.c++.with-pch bind PCH_FILE { - "$(CONFIG_COMMAND)" -c -x c++ $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -Xclang -include-pch -Xclang "$(PCH_FILE)" -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" -c -x c++ $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -Xclang -include-pch -Xclang "$(PCH_FILE)" -include"$(FORCE_INCLUDES)" -o "$(<)" "$(>)" } rule compile.c ( targets * : sources * : properties * ) @@ -169,12 +169,12 @@ rule compile.c ( targets * : sources * : properties * ) actions compile.c.without-pch { - "$(CONFIG_COMMAND)" -c -x c $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" -c -x c $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" -c -o "$(<)" "$(>)" } actions compile.c.with-pch bind PCH_FILE { - "$(CONFIG_COMMAND)" -c -x c $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -Xclang -include-pch -Xclang "$(PCH_FILE)" -c -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" -c -x c $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -Xclang -include-pch -Xclang "$(PCH_FILE)" -include"$(FORCE_INCLUDES)" -c -o "$(<)" "$(>)" } ############################################################################### @@ -186,7 +186,7 @@ rule compile.c++.pch ( targets * : sources * : properties * ) { } actions compile.c++.pch { - $(RM) -f "$(<)" && "$(CONFIG_COMMAND)" -c -x c++-header $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -Xclang -emit-pch -o "$(<)" "$(>)" + $(RM) -f "$(<)" && "$(CONFIG_COMMAND)" -c -x c++-header $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" -Xclang -emit-pch -o "$(<)" "$(>)" } rule compile.c.pch ( targets * : sources * : properties * ) { @@ -194,7 +194,7 @@ rule compile.c.pch ( targets * : sources * : properties * ) { actions compile.c.pch { - $(RM) -f "$(<)" && "$(CONFIG_COMMAND)" -c -x c-header $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -Xclang -emit-pch -o "$(<)" "$(>)" + $(RM) -f "$(<)" && "$(CONFIG_COMMAND)" -c -x c-header $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" -Xclang -emit-pch -o "$(<)" "$(>)" } ############################################################################### diff --git a/src/tools/clang-vxworks.jam b/src/tools/clang-vxworks.jam index 053f4fb55..d5dfc33a0 100644 --- a/src/tools/clang-vxworks.jam +++ b/src/tools/clang-vxworks.jam @@ -85,12 +85,12 @@ toolset.flags clang-vxworks.compile OPTIONS ; actions compile.c { - "$(CONFIG_COMMAND)" -x c $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" -x c $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" -c -o "$(<)" "$(>)" } actions compile.c++ { - "$(CONFIG_COMMAND)" -x c++ $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" -x c++ $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" -c -o "$(<)" "$(>)" } diff --git a/src/tools/features/force-include-feature.jam b/src/tools/features/force-include-feature.jam new file mode 100644 index 000000000..29cfdcc18 --- /dev/null +++ b/src/tools/features/force-include-feature.jam @@ -0,0 +1,21 @@ +# Copyright 2020 Nikita Kniazev +# 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) + +import feature ; + +#| tag::doc[] + +[[bbv2.builtin.features.force-include]]`force-include`:: +Specifies an include path that has to be included in a way like if +`#include "file"` appeared as the first line of every target's source file. + +The include order is not guaranteed if used multiple times on a single target. + +|# # end::doc[] + +feature.feature "force-include" + : + : free + ; diff --git a/src/tools/gcc.jam b/src/tools/gcc.jam index 8910a55f2..4ed15bf40 100644 --- a/src/tools/gcc.jam +++ b/src/tools/gcc.jam @@ -574,22 +574,22 @@ rule compile.fortran ( targets * : sources * : properties * ) actions compile.c++ bind PCH_FILE { - "$(CONFIG_COMMAND)" $(LANG) -ftemplate-depth-$(TEMPLATE_DEPTH) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -c -o "$(<:W)" "$(>:W)" + "$(CONFIG_COMMAND)" $(LANG) -ftemplate-depth-$(TEMPLATE_DEPTH) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" -c -o "$(<:W)" "$(>:W)" } actions compile.c bind PCH_FILE { - "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -c -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" -c -o "$(<)" "$(>)" } actions compile.c++.preprocess bind PCH_FILE { - "$(CONFIG_COMMAND)" $(LANG) -ftemplate-depth-$(TEMPLATE_DEPTH) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" "$(>:W)" -E >"$(<:W)" + "$(CONFIG_COMMAND)" $(LANG) -ftemplate-depth-$(TEMPLATE_DEPTH) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" "$(>:W)" -E >"$(<:W)" } actions compile.c.preprocess bind PCH_FILE { - "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" "$(>)" -E >$(<) + "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -include"$(FORCE_INCLUDES)" "$(>)" -E >$(<) } actions compile.fortran @@ -770,6 +770,7 @@ toolset.flags gcc.compile.c++ USER_OPTIONS ; toolset.flags gcc.compile.asm USER_OPTIONS ; toolset.flags gcc.compile DEFINES ; toolset.flags gcc.compile INCLUDES ; +toolset.flags gcc.compile FORCE_INCLUDES ; toolset.flags gcc.compile.c++ TEMPLATE_DEPTH ; toolset.flags gcc.compile.fortran USER_OPTIONS ; diff --git a/src/tools/msvc.jam b/src/tools/msvc.jam index 4b0fed892..c0e7b1b58 100644 --- a/src/tools/msvc.jam +++ b/src/tools/msvc.jam @@ -1690,7 +1690,7 @@ rule get-rspline ( target : lang-opt ) { CC_RSPLINE on $(target) = [ on $(target) return $(lang-opt) -U$(UNDEFS) $(CFLAGS) $(C++FLAGS) $(OPTIONS) -c $(.nl)-D$(DEFINES) - $(.nl)\"-I$(INCLUDES:W)\" ] ; + $(.nl)\"-I$(INCLUDES:W)\" $(.nl)\"-FI$(FORCE_INCLUDES:W)\" ] ; } class msvc-linking-generator : linking-generator @@ -1873,6 +1873,7 @@ local rule register-toolset-really ( ) toolset.flags msvc.compile DEFINES ; toolset.flags msvc.compile UNDEFS ; toolset.flags msvc.compile INCLUDES ; + toolset.flags msvc.compile FORCE_INCLUDES ; # Declare flags for the assembler. toolset.flags msvc.compile.asm USER_ASMFLAGS ; diff --git a/test/feature_force_include.py b/test/feature_force_include.py new file mode 100644 index 000000000..719f3269b --- /dev/null +++ b/test/feature_force_include.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +# Copyright 2020 Nikita Kniazev +# 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) + +# Tests the force-include feature + +import BoostBuild + +t = BoostBuild.Tester(use_test_config=False) + +t.write("Jamroot.jam", """ +obj test-cpp : test.cpp : one.h two.h ; +obj test-c : test.c : one.h two.h ; +""") + +for name in ("test.cpp", "test.c"): + t.write(name, """ +#ifndef ONE +#error Cannot compile without ONE +#endif +#ifndef TWO +#error Cannot compile without TWO +#endif +""") + +t.write("one.h", """ +#define ONE +""") + +t.write("two.h", """ +#define TWO +""") + +t.run_build_system() +t.expect_addition("bin/$toolset/debug*/test-cpp.obj") +t.expect_addition("bin/$toolset/debug*/test-c.obj") + +t.cleanup() From 8198576481fdffa16227598302a92a3ae58492e1 Mon Sep 17 00:00:00 2001 From: Nikita Kniazev Date: Fri, 3 Apr 2020 15:30:15 +0300 Subject: [PATCH 3/5] Remove pch target naming restriction on GCC (#561) Do not require pch target to have the same name as the header base name. The restriction was added in 76d041d7c10938adbefd6fa045231ccfa79b3fc1 without a rationale and only for GCC while reworking PCH support for GCC and MSVC. --- src/tools/gcc.jam | 12 ------------ test/pch.py | 4 ++-- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/tools/gcc.jam b/src/tools/gcc.jam index 4ed15bf40..61753d492 100644 --- a/src/tools/gcc.jam +++ b/src/tools/gcc.jam @@ -638,18 +638,6 @@ class gcc-pch-generator : pch-generator } } - # Error handling: base header file name should be the same as the base - # precompiled header name. - local header-name = [ $(header).name ] ; - local header-basename = $(header-name:B) ; - if $(header-basename) != $(name) - { - local location = [ $(project).project-module ] ; - import errors : user-error : errors.user-error ; - errors.user-error "in" "$(location):" pch target name '$(name)' should - be the same as the base name of header file '$(header-name)' ; - } - local pch-file = [ generator.run $(project) $(name) : $(property-set) : $(header) ] ; diff --git a/test/pch.py b/test/pch.py index 58cf894a9..0f7d24fac 100644 --- a/test/pch.py +++ b/test/pch.py @@ -13,8 +13,8 @@ t = BoostBuild.Tester() t.write("jamroot.jam", """ import pch ; -cpp-pch pch : pch.hpp : msvc:pch.cpp . ; -exe hello : hello.cpp pch : . ; +cpp-pch pch-afx : pch.hpp : msvc:pch.cpp . ; +exe hello : hello.cpp pch-afx : . ; """) t.write("pch.hpp.bad", """ From 943a28a8bad1d2ebf7ab67ec77f1c0ecd245cf44 Mon Sep 17 00:00:00 2001 From: Nikita Kniazev Date: Sat, 4 Apr 2020 04:27:41 +0300 Subject: [PATCH 4/5] Fix pch path conflict on GCC (#563) * Follow-up to removed restriction of pch naming on GCC * Fix pch path conflict on GCC gcc-pch-generator rewrites target name to a value derived from a header name and this cases path conflict if multiple pch are created from the same header. hello.cpp is duplicated in the test for the same reason but for `exe` target -- `exe hello-afx : hello.cpp ;` uses `hello.o` for object file name. --- doc/src/tasks.adoc | 2 -- src/tools/gcc.jam | 6 ++++++ test/pch.py | 17 ++++++++++++----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/doc/src/tasks.adoc b/doc/src/tasks.adoc index c5f7ab62e..247cb8b42 100644 --- a/doc/src/tasks.adoc +++ b/doc/src/tasks.adoc @@ -588,8 +588,6 @@ source file needs to include some header, explicitly include it in the source file, even if the same header is included from the precompiled header. This makes sure that your project will build even if precompiled headers are not supported. -* On the gcc compiler, the name of the header being precompiled must be -equal to the name of the `cpp-pch` target. This is a gcc requirement. * Prior to version 4.2, the gcc compiler did not allow anonymous namespaces in precompiled headers, which limits their utility. See the http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29085[bug report] for diff --git a/src/tools/gcc.jam b/src/tools/gcc.jam index 61753d492..5ceb038fc 100644 --- a/src/tools/gcc.jam +++ b/src/tools/gcc.jam @@ -638,6 +638,12 @@ class gcc-pch-generator : pch-generator } } + local path-prefix = [ path.join $(name) + [ feature.get-values location-prefix + : $(property-set).raw ] ] ; + property-set = [ $(property-set).add-raw + $(path-prefix) ] ; + local pch-file = [ generator.run $(project) $(name) : $(property-set) : $(header) ] ; diff --git a/test/pch.py b/test/pch.py index 0f7d24fac..6925cb3f4 100644 --- a/test/pch.py +++ b/test/pch.py @@ -13,8 +13,11 @@ t = BoostBuild.Tester() t.write("jamroot.jam", """ import pch ; -cpp-pch pch-afx : pch.hpp : msvc:pch.cpp . ; -exe hello : hello.cpp pch-afx : . ; +project : requirements on ; +cpp-pch pch : pch.hpp : msvc:pch.cpp . ; +cpp-pch pch-afx : pch.hpp : HELLO msvc:pch.cpp . ; +exe hello : hello.cpp pch : . ; +exe hello-afx : hello-afx.cpp pch-afx : HELLO . ; """) t.write("pch.hpp.bad", """ @@ -25,6 +28,7 @@ THIS WILL NOT COMPILE # less than timestamp of pch.hpp.bad. sleep(1) t.write("pch.hpp", """ +#undef HELLO class TestClass { public: @@ -35,12 +39,14 @@ public: t.write("pch.cpp", """#include """) -t.write("hello.cpp", """#include +for name in ("hello.cpp", "hello-afx.cpp"): + t.write(name, """#include int main() { TestClass c(1, 2); } """) t.run_build_system() t.expect_addition("bin/$toolset/debug*/hello.exe") +t.expect_addition("bin/$toolset/debug*/hello-afx.exe") # Now make the header unusable, without changing timestamp. If everything is OK, @@ -49,10 +55,11 @@ t.expect_addition("bin/$toolset/debug*/hello.exe") t.copy_preserving_timestamp("pch.hpp.bad", "pch.hpp") -t.rm("bin/$toolset/debug/hello.obj") -t.rm("bin/$toolset/debug/*/hello.obj") +t.rm("bin/$toolset/debug*/hello.obj") +t.rm("bin/$toolset/debug*/hello-afx.obj") t.run_build_system() t.expect_addition("bin/$toolset/debug*/hello.obj") +t.expect_addition("bin/$toolset/debug*/hello-afx.obj") t.cleanup() From 4530314f170cda8b963b7fff732cde4cbf4e75c4 Mon Sep 17 00:00:00 2001 From: Edward Diener Date: Tue, 7 Apr 2020 08:35:38 -0400 Subject: [PATCH 5/5] Improved Embarcadero generated command lines by using response files. Corrected system library paths. (#564) * Use a response file for direct linker dependencies. * Improved the command lines generated for compilation and linking by using response file. Corrected the system library files directories which should be used for bcc32x and bcc64. Co-authored-by: Edward Diener --- src/tools/embarcadero.jam | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/tools/embarcadero.jam b/src/tools/embarcadero.jam index 8982704ad..003dc5b1d 100644 --- a/src/tools/embarcadero.jam +++ b/src/tools/embarcadero.jam @@ -394,8 +394,8 @@ rule init ( version ? : command * : options * ) if $(compiler) = bcc32x { - lib_dir_release = $(root)/lib/win32c/release $(root)/lib/win32/release $(root)/lib/win32/release/psdk ; - lib_dir_debug = $(root)/lib/win32c/debug $(root)/lib/win32/debug $(root)/lib/win32/debug/psdk ; + lib_dir_release = $(root)/lib/win32c/release $(root)/lib/win32c/release/psdk ; + lib_dir_debug = $(root)/lib/win32c/debug ; archiver = tlib ; arflags = /P512 ; implib = implib ; @@ -403,13 +403,13 @@ rule init ( version ? : command * : options * ) else if $(compiler) = bcc64 { lib_dir_release = $(root)/lib/win64/release $(root)/lib/win64/release/psdk ; - lib_dir_debug = $(root)/lib/win64/debug $(root)/lib/win64/debug/psdk ; + lib_dir_debug = $(root)/lib/win64/debug ; archiver = tlib64 ; arflags = /P2048 ; implib = mkexp ; } - flags embarcadero.compile OPTIONS $(condition) : $(system_include_option)$(system_include_directories) ; + flags embarcadero.compile .EMB_SYSINC $(condition) : $(system_include_option)$(system_include_directories) ; flags embarcadero.link LINKPATH $(condition)/release : $(lib_dir_release) ; flags embarcadero.link LINKPATH $(condition)/debug : $(lib_dir_debug) $(lib_dir_release) ; flags embarcadero.archive .AR $(condition) : $(root)/bin/$(archiver) ; @@ -558,12 +558,19 @@ flags embarcadero.compile OPTIONS 32 : -m32 ; flags embarcadero.compile OPTIONS 64 : -m64 ; flags embarcadero.link OPTIONS 32 : -m32 ; flags embarcadero.link OPTIONS 64 : -m64 ; +flags embarcadero.link .EMBLRSP release : _emb_lpr ; +flags embarcadero.link .EMBLRSP debug : _emb_lpd ; +flags embarcadero.compile .EMBCRSP release : _emb_sir ; +flags embarcadero.compile .EMBCRSP debug : _emb_sid ; + +nl = " +" ; rule compile.c++ ( targets * : sources * : properties * ) { } actions compile.c++ { - "$(CONFIG_COMMAND)" -c -x c++ $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" -c -x c++ @"@($(<[1]:DBW)$(.EMBCRSP)$(<[1]:S).rsp:E=$(nl)"$(.EMB_SYSINC)")" $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -o "$(<)" "$(>)" } rule compile.c ( targets * : sources * : properties * ) @@ -572,7 +579,7 @@ rule compile.c ( targets * : sources * : properties * ) actions compile.c { - "$(CONFIG_COMMAND)" -c -x c $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -o "$(<)" "$(>)" + "$(CONFIG_COMMAND)" -c -x c @"@($(<[1]:DBW)$(.EMBCRSP)$(<[1]:S).rsp:E=$(nl)"$(.EMB_SYSINC)")" $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -o "$(<)" "$(>)" } rule archive ( targets * : sources * : properties * ) @@ -593,11 +600,11 @@ rule link.dll ( targets * : sources * : properties * ) { } actions link bind LIBRARIES { - "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(OPTIONS) $(USER_OPTIONS) + "$(CONFIG_COMMAND)" @"@($(<[1]:DBW)$(.EMBLRSP)$(<[1]:S).rsp:E=$(nl)-L"$(LINKPATH)")" -o "$(<)" @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(OPTIONS) $(USER_OPTIONS) } actions link.dll bind LIBRARIES { - "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -o "$(<[1])" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(OPTIONS) $(USER_OPTIONS) && "$(.IMPLIB_COMMAND)" "$(<[2])" "$(<[1])" + "$(CONFIG_COMMAND)" @"@($(<[1]:DBW)$(.EMBLRSP)$(<[1]:S).rsp:E=$(nl)-L"$(LINKPATH)")" -o "$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)")" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(OPTIONS) $(USER_OPTIONS) && "$(.IMPLIB_COMMAND)" "$(<[2])" "$(<[1])" } rule asm ( targets * : sources * : properties * )