Skip to content
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

Buildexe libs #182

Merged
merged 29 commits into from
Jan 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
a1abee1
Added BuildccHome class
coder137 Jan 8, 2022
f580c7d
Added build_env_home.h/.cpp
coder137 Jan 8, 2022
c7a1795
Updated build_env_setup.h/.cpp
coder137 Jan 8, 2022
9d022d7
Added BuildExeArgs class
coder137 Jan 8, 2022
6039ef0
Updated buildexe with BuildExeArgs class
coder137 Jan 8, 2022
be2ffb2
Added build files to arg_lib_path
coder137 Jan 8, 2022
7e80b86
Updated build_env_setup
coder137 Jan 9, 2022
d68b5eb
Update buildexe.cpp
coder137 Jan 9, 2022
9307f57
Updated args_setup
coder137 Jan 9, 2022
61c26cb
Update buildexe.cpp
coder137 Jan 9, 2022
59550ae
Added UserTargetWithLibsSetup private API for script mode
coder137 Jan 9, 2022
f850842
Update args_setup.cpp
coder137 Jan 9, 2022
a7c1e9e
Update build_env_setup.cpp
coder137 Jan 9, 2022
6d05bc4
Updated args setup with LibInfo
coder137 Jan 10, 2022
d5ab123
Update build_env_setup.cpp
coder137 Jan 10, 2022
3d418b6
Added a buildexe specific libs example
coder137 Jan 10, 2022
c03696b
Update CMakeLists.txt
coder137 Jan 10, 2022
bfe1c9c
Added buildexe package manager document
coder137 Jan 10, 2022
4ecaf01
Update buildexe_setup.rst
coder137 Jan 10, 2022
0e07154
Update buildexe_package_manager.rst
coder137 Jan 10, 2022
02f6558
Update buildexe_package_manager.rst
coder137 Jan 10, 2022
bb7f6cd
Update buildexe_package_manager.rst
coder137 Jan 10, 2022
e3d0a98
Update buildexe_package_manager.rst
coder137 Jan 10, 2022
223d937
Update buildexe_package_manager.rst
coder137 Jan 10, 2022
3daa575
Update buildexe_package_manager.rst
coder137 Jan 10, 2022
08bf3ef
Update buildexe_package_manager.rst
coder137 Jan 10, 2022
fc945d8
Updated linux and win with BuildExe Layout Setup
coder137 Jan 10, 2022
613713b
Update win_cmake_build.yml
coder137 Jan 10, 2022
c27bee5
Update linux_gcc_cmake_build.yml
coder137 Jan 10, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/linux_gcc_cmake_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,24 @@ jobs:
run: |
cmake --build . --target run_buildcc_lib_bootstrap_linux_gcc --config Release

- name: BuildExe Layout setup
working-directory: ${{github.workspace}}/..
run: |
mkdir buildcc_home
export BUILDCC_HOME="${{github.workspace}}/../buildcc_home"
echo $BUILDCC_HOME
cd buildcc_home
mkdir buildcc
mkdir libs
mkdir extensions
cd ..
ls

- name: BuildExe IM example tiny-process-library
working-directory: ${{github.workspace}}/${{env.BUILD_FOLDER_DEV_ALL}}
run: |
export BUILDCC_HOME="${{github.workspace}}/../buildcc_home"
echo $BUILDCC_HOME
cmake --build . --target run_buildexe_im_tpl_linux_gcc --config Release

- name: CPack Release
Expand Down Expand Up @@ -200,9 +215,24 @@ jobs:
run: |
cmake --build . --target run_buildcc_lib_bootstrap_linux_gcc --config Release

- name: BuildExe Layout setup
working-directory: ${{github.workspace}}/..
run: |
mkdir buildcc_home
export BUILDCC_HOME="${{github.workspace}}/../buildcc_home"
echo $BUILDCC_HOME
cd buildcc_home
mkdir buildcc
mkdir libs
mkdir extensions
cd ..
ls

- name: BuildExe IM example tiny-process-library
working-directory: ${{github.workspace}}/${{env.BUILD_FOLDER_DEV_SINGLE}}
run: |
export BUILDCC_HOME="${{github.workspace}}/../buildcc_home"
echo $BUILDCC_HOME
cmake --build . --target run_buildexe_im_tpl_linux_gcc --config Release

# - name: TODO, BuildExe SM simple hyrid example
Expand Down
14 changes: 14 additions & 0 deletions .github/workflows/win_cmake_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,23 @@ jobs:
run: |
cmake --build . --config Release --target run_buildcc_lib_bootstrap_win_msvc --parallel 2

- name: BuildExe Layout setup
working-directory: ${{github.workspace}}/..
run: |
mkdir buildcc_home
$env:BUILDCC_HOME = "${{github.workspace}}/../buildcc_home"
$env:BUILDCC_HOME
cd buildcc_home
mkdir buildcc
mkdir libs
mkdir extensions
cd ..
dir

- name: BuildExe IM example tiny-process-library
working-directory: ${{github.workspace}}/${{env.BUILD_FOLDER_MSVC_DEV_ALL}}
run: |
$env:BUILDCC_HOME = "${{github.workspace}}/../buildcc_home"
cmake --build . --config Release --target run_buildexe_im_tpl_win_msvc

# - name: TODO, BuildExe SM simple hyrid example
Expand Down
27 changes: 27 additions & 0 deletions buildexe/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
add_executable(buildexe
buildexe.cpp

src/build_env_home.cpp
include/buildexe/build_env_home.h

src/args_setup.cpp
include/buildexe/args_setup.h

Expand Down Expand Up @@ -84,3 +87,27 @@ add_custom_target(run_buildexe_sm_simple_linux_gcc
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../example/hybrid/simple
VERBATIM USES_TERMINAL
)

# [Script Mode] BuildExe libs example WIN GCC
add_custom_target(run_buildexe_libs_hybrid_win_gcc
COMMAND buildexe --help-all
COMMAND buildexe --config compile.toml --config ${CMAKE_CURRENT_SOURCE_DIR}/../bootstrap/config/toolchain_win_gcc.toml
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../example/buildexe/libs
VERBATIM USES_TERMINAL
)

# [Script Mode] BuildExe libs example WIN MSVC
add_custom_target(run_buildexe_libs_hybrid_win_msvc
COMMAND buildexe --help-all
COMMAND buildexe --config compile.toml --config ${CMAKE_CURRENT_SOURCE_DIR}/../bootstrap/config/toolchain_win_msvc.toml
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../example/buildexe/libs
VERBATIM USES_TERMINAL
)

# [Script Mode] BuildExe libs example LINUX GCC
add_custom_target(run_buildexe_libs_hybrid_linux_gcc
COMMAND buildexe --help-all
COMMAND buildexe --config compile.toml --config ${CMAKE_CURRENT_SOURCE_DIR}/../bootstrap/config/toolchain_linux_gcc.toml
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../example/buildexe/libs
VERBATIM USES_TERMINAL
)
58 changes: 20 additions & 38 deletions buildexe/buildexe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "buildcc.h"

#include "buildexe/args_setup.h"
#include "buildexe/build_env_home.h"
#include "buildexe/build_env_setup.h"
#include "buildexe/toolchain_setup.h"

Expand All @@ -34,25 +35,15 @@ constexpr const char *const kTag = "BuildExe";

static void clean_cb();

// TODO, Update BuildExeArgs with internal functions
int main(int argc, char **argv) {
Args args;
//
BuildccHome::Init();

ArgToolchain host_toolchain_arg;
args.AddToolchain("host", "Host Toolchain", host_toolchain_arg);

BuildExeMode out_mode;
setup_arg_buildexe_mode(args, out_mode);

ArgTargetInfo out_targetinfo;
setup_arg_target_info(args, out_targetinfo);

ArgTargetInputs out_targetinputs;
setup_arg_target_inputs(args, out_targetinputs);

ArgScriptInfo out_scriptinfo;
setup_arg_script_mode(args, out_scriptinfo);

args.Parse(argc, argv);
//
BuildExeArgs buildexe_args;
buildexe_args.Setup();
buildexe_args.Parse(argc, argv);

// TODO, Add Verification subcommand here for OS, Compiler etc!
// os win, linux considerations
Expand All @@ -63,33 +54,24 @@ int main(int argc, char **argv) {
// TODO, Add libraries (git cloned)
// TODO, Add extension (git cloned)

Register reg(args);
Register reg(buildexe_args.GetArgs());
reg.Clean(clean_cb);

// Build
BaseToolchain toolchain = host_toolchain_arg.ConstructToolchain();
// Host Toolchain
BaseToolchain toolchain =
buildexe_args.GetHostToolchainArg().ConstructToolchain();
find_toolchain_verify(toolchain);
if (out_mode == BuildExeMode::Script) {
if (buildexe_args.GetBuildMode() == BuildExeMode::Script) {
host_toolchain_verify(toolchain);
}

// Build environment
BuildEnvSetup build_setup(reg, toolchain, out_targetinfo, out_targetinputs);
if (out_mode == BuildExeMode::Script) {
// buildcc and user target
build_setup.ConstructUserTargetWithBuildcc();
} else {
// user target
build_setup.ConstructUserTarget();
}
reg.RunBuild();

// Run
if (out_mode == BuildExeMode::Script) {
env::log_info(kTag,
fmt::format("************** Running '{}' **************",
out_targetinfo.name));
build_setup.RunUserTarget(out_scriptinfo);
// Build Target
BuildEnvSetup build_setup(reg, toolchain, buildexe_args);
build_setup.ConstructTarget();

// Run Target if script mode
if (buildexe_args.GetBuildMode() == BuildExeMode::Script) {
build_setup.RunUserTarget(buildexe_args.GetScriptInfo());
}

// - Clang Compile Commands
Expand Down
48 changes: 44 additions & 4 deletions buildexe/include/buildexe/args_setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,50 @@ struct ArgScriptInfo {
std::vector<std::string> configs;
};

void setup_arg_buildexe_mode(Args &args, BuildExeMode &out);
void setup_arg_target_info(Args &args, ArgTargetInfo &out);
void setup_arg_target_inputs(Args &args, ArgTargetInputs &out);
void setup_arg_script_mode(Args &args, ArgScriptInfo &out);
struct LibInfo {
std::string lib_name;
std::string absolute_lib_path;
};

class BuildExeArgs {
public:
void Setup();
void Parse(int argc, char **argv) { args_.Parse(argc, argv); }

// Getters
const Args &GetArgs() const { return args_; }
const ArgToolchain &GetHostToolchainArg() const {
return host_toolchain_arg_;
}
const ArgTargetInfo &GetTargetInfo() const { return out_targetinfo_; }
const ArgTargetInputs &GetTargetInputs() const { return out_targetinputs_; }
const ArgScriptInfo &GetScriptInfo() const { return out_scriptinfo_; }
BuildExeMode GetBuildMode() const { return out_mode_; }

const std::vector<LibInfo> &GetLibsInfo() const { return libs_info_; }
const std::vector<fs::path> &GetLibBuildFiles() const {
return lib_build_files_;
}

private:
void SetupBuildMode();
void SetupTargetInfo();
void SetupTargetInputs();
void SetupScriptMode();
void SetupLibs();

private:
Args args_;
ArgToolchain host_toolchain_arg_;
ArgTargetInfo out_targetinfo_;
ArgTargetInputs out_targetinputs_;
ArgScriptInfo out_scriptinfo_;

BuildExeMode out_mode_;

std::vector<LibInfo> libs_info_;
std::vector<fs::path> lib_build_files_;
};

} // namespace buildcc

Expand Down
60 changes: 60 additions & 0 deletions buildexe/include/buildexe/build_env_home.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright 2021-2022 Niket Naidu. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#ifndef BUILDEXE_BUILD_ENV_HOME_H_
#define BUILDEXE_BUILD_ENV_HOME_H_

#include "buildcc.h"

namespace buildcc {

class BuildccHome {
public:
static void Init();

static const fs::path &GetBuildccHomeDir() {
ExpectInitialized();
return buildcc_home_;
}
static const fs::path &GetBuildccBaseDir() {
ExpectInitialized();
return buildcc_base_;
}
static const fs::path &GetBuildccLibsDir() {
ExpectInitialized();
return buildcc_libs_;
}
static const fs::path &GetBuildccExtensionsDir() {
ExpectInitialized();
return buildcc_extensions_;
}

static bool IsInitialized() { return initialized_; }
static void ExpectInitialized() {
env::assert_fatal(IsInitialized(), "BuildccHome is not initialized");
}

private:
static fs::path buildcc_home_;
static fs::path buildcc_base_;
static fs::path buildcc_libs_;
static fs::path buildcc_extensions_;
static bool initialized_;
};

} // namespace buildcc

#endif
20 changes: 10 additions & 10 deletions buildexe/include/buildexe/build_env_setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "buildcc.h"

#include "bootstrap/build_buildcc.h"

#include "buildexe/args_setup.h"

namespace buildcc {
Expand All @@ -31,15 +32,12 @@ class BuildEnvSetup {

public:
BuildEnvSetup(Register &reg, const BaseToolchain &toolchain,
const ArgTargetInfo &arg_target_info,
const ArgTargetInputs &arg_target_inputs)
: reg_(reg), toolchain_(toolchain), arg_target_info_(arg_target_info),
arg_target_inputs_(arg_target_inputs) {
const BuildExeArgs &buildexe_args)
: reg_(reg), toolchain_(toolchain), buildexe_args_(buildexe_args) {
state_.build = true;
}

void ConstructUserTarget();
void ConstructUserTargetWithBuildcc();
void ConstructTarget();

void RunUserTarget(const ArgScriptInfo &arg_script_info);

Expand All @@ -52,19 +50,21 @@ class BuildEnvSetup {
}

private:
void ConstructUserTarget();
void ConstructUserTargetWithBuildcc();

void BuildccTargetSetup();
void UserTargetSetup();
void UserTargetCb();
void UserTargetBuild();

void UserTargetWithBuildccSetup();
void UserTargetWithLibsSetup();
void UserTargetBuild();
void DepUserTargetOnBuildcc();

private:
Register &reg_;
const BaseToolchain &toolchain_;
const ArgTargetInfo &arg_target_info_;
const ArgTargetInputs &arg_target_inputs_;
const BuildExeArgs &buildexe_args_;

ArgToolchainState state_;
PersistentStorage storage_;
Expand Down
Loading