-
-
Notifications
You must be signed in to change notification settings - Fork 543
Added HPX::auto_wrap_main option #6804
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 4 commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
d3d5a7c
Added -HPX_WITH_WRAP_MAIN_AUTO_ACTIVATE CMake option which excludes t…
kollanur d80bd86
-HPX_WRAP_MAIN_AUTO_ACTIVATE is default option now, and also fixed un…
kollanur 20387c6
Merge branch 'STEllAR-GROUP:master' into dev-link
kollanur 4796a31
Removed CMAKE option HPX_WITH_WRAP_MAIN_AUTO_ACTIVATE, and added HPX:…
kollanur bb09f9d
Added copyright information and removed unnecessary MSVC related things
kollanur f42d6e8
Merge branch 'STEllAR-GROUP:master' into dev-link
kollanur 366bb38
Removed hpx_auto_wrap.cpp and included HPX_AUTO_WRAP_MAIN_ACTIVATE fu…
kollanur ba98a29
Removed conditional statement for app_name_libhpx_wrap HPX_APPLICATOI…
kollanur f822d17
Merge branch 'STEllAR-GROUP:master' into dev-link
kollanur File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| #include <hpx/modules/async_distributed.hpp> | ||
|
hkaiser marked this conversation as resolved.
|
||
| #include <hpx/modules/testing.hpp> | ||
| #include <hpx/runtime_local/runtime_local.hpp> | ||
|
|
||
| int main(int, char**) { | ||
| // The wrapper should have initialized HPX runtime before reaching main. | ||
| HPX_TEST(hpx::get_runtime_ptr() != nullptr); | ||
|
|
||
| // Verify that calling thread is an HPX thread by launching another | ||
| // HPX task and waiting for its result. | ||
| auto f = hpx::async([] { return (hpx::get_runtime_ptr() != nullptr);}); | ||
| HPX_TEST(f.get()); | ||
|
|
||
| return hpx::util::report_errors(); | ||
|
|
||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,143 @@ | ||
| // Copyright (c) 2018-2020 Nikunj Gupta | ||
| // | ||
| // SPDX-License-Identifier: BSL-1.0 | ||
| // 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) | ||
|
|
||
| #include <hpx/config.hpp> | ||
| #include <hpx/hpx_init.hpp> | ||
|
|
||
| // The following implementation has been divided for Linux and Mac OSX | ||
| #if defined(HPX_HAVE_DYNAMIC_HPX_MAIN) && \ | ||
| (defined(__linux) || defined(__linux__) || defined(linux) || \ | ||
| defined(__APPLE__)) | ||
|
|
||
| #include <string> | ||
|
|
||
| namespace hpx_start { | ||
| // include_libhpx_wrap is a weak symbol which helps to determine the course | ||
| // of function calls at runtime. It has a default value of `false` which | ||
| // corresponds to the program's entry point being main(). | ||
| // It is overridden in hpx/hpx_main.hpp. Thus, inclusion of the header file | ||
| // will change the program's entry point to HPX's own custom entry point | ||
| // initialize_main. Subsequent calls before entering main() are handled | ||
| // by this code. | ||
| HPX_SYMBOL_EXPORT extern bool include_libhpx_wrap; | ||
| HPX_SYMBOL_EXPORT bool include_libhpx_wrap __attribute__((weak)) = true; | ||
| HPX_SYMBOL_EXPORT extern const char* app_name_libhpx_wrap; | ||
| HPX_SYMBOL_EXPORT const char* app_name_libhpx_wrap __attribute__((weak)) = HPX_APPLICATION_STRING; | ||
|
|
||
| // Provide a definition of is_linked variable defined weak in hpx_main.hpp | ||
| // header. This variable is solely to trigger a different exception when | ||
| // trying to register thread when not linked to libhpx_wrap and using | ||
| // hpx_main.hpp functionality. | ||
| HPX_SYMBOL_EXPORT bool is_linked = true; | ||
| } // namespace hpx_start | ||
|
|
||
|
|
||
| #include <hpx/modules/functional.hpp> | ||
| #include <hpx/hpx_finalize.hpp> | ||
|
|
||
| #include <hpx/runtime_configuration/runtime_mode.hpp> | ||
|
|
||
| #include <vector> | ||
|
|
||
| //////////////////////////////////////////////////////////////////////////////// | ||
| // Function declarations | ||
| // | ||
| namespace hpx_start { | ||
| // Main entry point of HPX runtime system | ||
| extern int hpx_entry(int argc, char* argv[]); | ||
| } // namespace hpx_start | ||
|
|
||
| // Program's entry point depending upon Operating System. | ||
| // For Mac OSX it is the program's entry point. In case of Linux | ||
| // it is called by __wrap_main. | ||
| extern "C" int initialize_main(int argc, char** argv); | ||
|
|
||
| #if defined(__linux) || defined(__linux__) || defined(linux) | ||
| // Actual main() function | ||
| extern "C" int __real_main(int argc, char** argv); | ||
|
|
||
| // Our wrapper for main() function | ||
| extern "C" int __wrap_main(int argc, char** argv); | ||
| #endif | ||
|
|
||
| #if defined(__APPLE__) | ||
| // Declaration for main() for Mac OS implementation | ||
| extern "C" int main(int argc, char** argv); | ||
| #endif | ||
|
|
||
| namespace hpx_start { | ||
| // main entry point of the HPX runtime system | ||
| int hpx_entry(int argc, char* argv[]) | ||
| { | ||
| #if defined(__linux) || defined(__linux__) || defined(linux) | ||
| // Call to the main() function | ||
| int return_value = __real_main(argc, argv); | ||
| #else /* APPLE */ | ||
| // call to the main() function | ||
| int return_value = main(argc, argv); | ||
| #endif | ||
|
|
||
| // Finalizing the HPX runtime | ||
| hpx::finalize(); | ||
| return return_value; | ||
| } | ||
| } // namespace hpx_start | ||
|
|
||
| // This is the main entry point of C runtime system. | ||
| // The HPX runtime system is initialized here, which | ||
| // is similar to initializing HPX from main() and utilising | ||
| // the hpx_main() as the entry point. | ||
| extern "C" int initialize_main(int argc, char** argv) | ||
| { | ||
| #if defined(__APPLE__) | ||
| if (hpx_start::include_libhpx_wrap) | ||
| { | ||
| #endif | ||
| // Configuring HPX system before runtime | ||
| std::vector<std::string> const cfg = { | ||
| "hpx.commandline.allow_unknown!=1", | ||
| "hpx.commandline.aliasing=0", | ||
| }; | ||
| hpx::function<int(int, char**)> start_function = &hpx_start::hpx_entry; | ||
| using hpx::program_options::options_description; | ||
| options_description desc = options_description(std::string("Usage: ") + | ||
| ::hpx_start::app_name_libhpx_wrap + " [options]"); | ||
| // Create the init_params struct | ||
| hpx::init_params iparams; | ||
| iparams.desc_cmdline = desc; | ||
| iparams.cfg = cfg; | ||
|
|
||
| // Initialize the HPX runtime system | ||
| return hpx::init(start_function, argc, argv, iparams); | ||
| #if defined(__APPLE__) | ||
| } | ||
| return main(argc, argv); | ||
| #endif | ||
| } | ||
|
|
||
| #if defined(__linux) || defined(__linux__) || defined(linux) | ||
| //////////////////////////////////////////////////////////////////////////////// | ||
| // Wrapper for main function | ||
| // | ||
|
|
||
| // We are wrapping the main function to initialize our | ||
| // runtime system prior to real main call. | ||
| extern "C" int __wrap_main(int argc, char** argv) | ||
| { | ||
| // We determine the function call stack at runtime | ||
| // from the value of include_libhpx_wrap. If hpx_main | ||
| // is included include_libhpx_wrap is set to 1 | ||
| // due to override variable. | ||
| if (hpx_start::include_libhpx_wrap) | ||
| return initialize_main(argc, argv); | ||
|
|
||
| // call main() since hpx_main.hpp is not included | ||
| return __real_main(argc, argv); | ||
| } | ||
| //////////////////////////////////////////////////////////////////////////////// | ||
| #endif | ||
|
|
||
| #endif | ||
|
hkaiser marked this conversation as resolved.
Outdated
|
||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.