diff options
Diffstat (limited to 'solenv')
-rw-r--r-- | solenv/clang-format/excludelist | 2 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_MSC_class.mk | 4 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_MSC_defs.mk | 8 | ||||
-rw-r--r-- | solenv/gcc-wrappers/g++.cxx | 16 | ||||
-rw-r--r-- | solenv/gcc-wrappers/gcc.cxx | 16 | ||||
-rw-r--r-- | solenv/gcc-wrappers/wrapper.cxx | 56 | ||||
-rw-r--r-- | solenv/gcc-wrappers/wrapper.hxx | 4 |
7 files changed, 81 insertions, 25 deletions
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist index e78748adc6a8..ee51f6caf2a1 100644 --- a/solenv/clang-format/excludelist +++ b/solenv/clang-format/excludelist @@ -12573,8 +12573,6 @@ smoketest/libtest.cxx smoketest/smoketest.cxx solenv/bin/concat-deps.c solenv/gbuildtojson/gbuildtojson.cxx -solenv/gcc-wrappers/g++.cxx -solenv/gcc-wrappers/gcc.cxx solenv/gcc-wrappers/wrapper.cxx soltools/cpp/_cpp.c soltools/cpp/_eval.c diff --git a/solenv/gbuild/platform/com_MSC_class.mk b/solenv/gbuild/platform/com_MSC_class.mk index 996c5a4b06c5..c27fc0c95446 100644 --- a/solenv/gbuild/platform/com_MSC_class.mk +++ b/solenv/gbuild/platform/com_MSC_class.mk @@ -598,10 +598,10 @@ endef gb_AUTOCONF_WRAPPERS = \ REAL_CC="$(shell cygpath -w $(filter-out -%,$(CC)))" \ REAL_CC_FLAGS="$(filter -%,$(CC))" \ - CC="$(call gb_Executable_get_target_for_build,gcc-wrapper)" \ + CC="$(call gb_Executable_get_target_for_build,gcc-wrapper) $(if $(verbose),--wrapper-print-cmdline)" \ REAL_CXX="$(shell cygpath -w $(filter-out -%,$(CXX)))" \ REAL_CXX_FLAGS="$(filter -%,$(CXX))" \ - CXX="$(call gb_Executable_get_target_for_build,g++-wrapper)" \ + CXX="$(call gb_Executable_get_target_for_build,g++-wrapper) $(if $(verbose),--wrapper-print-cmdline)" \ LD="$(shell cygpath -w $(COMPATH)/bin/link.exe) -nologo" gb_ExternalProject_INCLUDE := \ diff --git a/solenv/gbuild/platform/com_MSC_defs.mk b/solenv/gbuild/platform/com_MSC_defs.mk index 05de2691a03e..5a02731bac7b 100644 --- a/solenv/gbuild/platform/com_MSC_defs.mk +++ b/solenv/gbuild/platform/com_MSC_defs.mk @@ -361,4 +361,12 @@ define gb_Helper_extend_ld_path $(gb_Helper_set_ld_path)';$(shell cygpath $(gb_MAKE_CYGPATH) $(1))' endef +# common macros to build GPG related libraries +# we explicitly have to replace cygwin with mingw32 for the host, but the build must stay cygwin, or cmd.exe processes will be spawned +gb_WIN_GPG_WINDRES_target := $(if $(filter INTEL,$(CPUNAME)),pe-i386,pe-x86-64) +gb_WIN_GPG_platform_switches := --build=$(BUILD_PLATFORM) --host=$(subst cygwin,mingw32,$(HOST_PLATFORM)) +gb_WIN_GPG_cross_setup_exports = export REAL_BUILD_CC="$(CC_FOR_BUILD)" \ + && export CC_FOR_BUILD="$(call gb_Executable_get_target_for_build,gcc-wrapper) $(if $(verbose),--wrapper-print-cmdline) --wrapper-env-prefix=REAL_BUILD_ $(SOLARINC) -L$(subst ;, -L,$(ILIB_FOR_BUILD))" \ + && export RC='windres -O COFF --target=$(gb_WIN_GPG_WINDRES_target) --preprocessor='\''$(call gb_Executable_get_target_for_build,cpp) -+ -DRC_INVOKED -DWINAPI_FAMILY=0 $(SOLARINC)'\' + # vim: set noet sw=4: diff --git a/solenv/gcc-wrappers/g++.cxx b/solenv/gcc-wrappers/g++.cxx index 626b1643590c..2f99d4606ac7 100644 --- a/solenv/gcc-wrappers/g++.cxx +++ b/solenv/gcc-wrappers/g++.cxx @@ -9,19 +9,21 @@ #include "wrapper.hxx" -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) +{ vector<string> rawargs(argv + 1, argv + argc); - string command=getexe("REAL_CXX"); - string flags=getexe("REAL_CXX_FLAGS", true); + string env_prefix; // defaults to REAL_ + bool verbose = false; + string args = processccargs(rawargs, env_prefix, verbose); - string args=flags.empty() ? string() : flags + " "; - args += processccargs(rawargs); + string command = getexe(env_prefix + "CXX"); + string flags = getexe(env_prefix + "CXX_FLAGS", true); + args.insert(0, flags.empty() ? string() : flags + " "); setupccenv(); - return startprocess(command,args); - + return startprocess(command, args, verbose); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/solenv/gcc-wrappers/gcc.cxx b/solenv/gcc-wrappers/gcc.cxx index f34c2dba8c99..8accb8216a11 100644 --- a/solenv/gcc-wrappers/gcc.cxx +++ b/solenv/gcc-wrappers/gcc.cxx @@ -9,19 +9,21 @@ #include "wrapper.hxx" -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) +{ vector<string> rawargs(argv + 1, argv + argc); - string command=getexe("REAL_CC"); - string flags=getexe("REAL_CC_FLAGS", true); + string env_prefix; // defaults to REAL_ + bool verbose = false; + string args = processccargs(rawargs, env_prefix, verbose); - string args=flags.empty() ? string() : flags + " "; - args += processccargs(rawargs); + string command = getexe(env_prefix + "CC"); + string flags = getexe(env_prefix + "CC_FLAGS", true); + args.insert(0, flags.empty() ? string() : flags + " "); setupccenv(); - return startprocess(command,args); - + return startprocess(command, args, verbose); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/solenv/gcc-wrappers/wrapper.cxx b/solenv/gcc-wrappers/wrapper.cxx index b156c89dc220..56936155fa47 100644 --- a/solenv/gcc-wrappers/wrapper.cxx +++ b/solenv/gcc-wrappers/wrapper.cxx @@ -82,7 +82,13 @@ void setupccenv() { } } -string processccargs(vector<string> rawargs) { +string processccargs(vector<string> rawargs, string &env_prefix, bool &verbose) +{ + // default env var prefix + env_prefix = "REAL_"; + verbose = false; + bool env_prefix_next_arg = false; + // suppress the msvc banner string args=" -nologo"; // TODO: should these options be enabled globally? @@ -101,6 +107,13 @@ string processccargs(vector<string> rawargs) { string linkargs(" -link -debug"); for(vector<string>::iterator i = rawargs.begin(); i != rawargs.end(); ++i) { + if (env_prefix_next_arg) + { + env_prefix = *i; + env_prefix_next_arg = false; + continue; + } + args.append(" "); if(*i == "-o") { // TODO: handle more than just exe output @@ -121,10 +134,15 @@ string processccargs(vector<string> rawargs) { linkargs.append(" -dll -out:"); linkargs.append(*i); } + else if (dot == string::npos) + { + args.append("-Fe"); + args.append(*i + ".exe"); + } else { cerr << "unknown -o argument - please adapt gcc-wrapper for \"" - << (*i) << "\""; + << (*i) << "\"" << endl; exit(1); } } @@ -159,14 +177,41 @@ string processccargs(vector<string> rawargs) { } else if(*i == "-Werror") args.append("-WX"); + else if (*i == "--wrapper-print-cmdline") + verbose = true; else - args.append(*i); + { + size_t pos = i->find("="); + if (0 == i->compare(0, pos, "--wrapper-env-prefix")) + { + if (pos == string::npos) + env_prefix_next_arg = true; + else if (pos + 1 == i->length()) + { + // bailout - missing arg + env_prefix_next_arg = true; + break; + } + else + env_prefix = i->substr(pos + 1); + } + else + args.append(*i); + } } + + if (env_prefix_next_arg) + { + cerr << "wrapper-env-prefix needs an argument!" << endl; + exit(1); + } + args.append(linkargs); return args; } -int startprocess(string command, string args) { +int startprocess(string command, string args, bool verbose) +{ STARTUPINFO si; PROCESS_INFORMATION pi; SECURITY_ATTRIBUTES sa; @@ -200,7 +245,8 @@ int startprocess(string command, string args) { auto cmdline = "\"" + command + "\" " + args; - //cerr << "CMD= " << command << " " << args << endl; + if (verbose) + cerr << "CMD= " << command << " " << args << endl; // Commandline may be modified by CreateProcess char* cmdlineBuf=_strdup(cmdline.c_str()); diff --git a/solenv/gcc-wrappers/wrapper.hxx b/solenv/gcc-wrappers/wrapper.hxx index 789bc9280267..208d9b82c449 100644 --- a/solenv/gcc-wrappers/wrapper.hxx +++ b/solenv/gcc-wrappers/wrapper.hxx @@ -20,9 +20,9 @@ string getexe(string exename, bool maybeempty = false); void setupccenv(); -string processccargs(vector<string> rawargs); +string processccargs(vector<string> rawargs, string& env_prefix, bool& verbose); -int startprocess(string command, string args); +int startprocess(string command, string args, bool verbose); #endif // INCLUDED_SOLENV_GCC_WRAPPERS_WRAPPER_HXX |