Skip to content

Commit 84c8e7b

Browse files
authored
Buildexe libs (#182)
1 parent 129a4b7 commit 84c8e7b

17 files changed

+969
-131
lines changed

.github/workflows/linux_gcc_cmake_build.yml

+30
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,24 @@ jobs:
6363
run: |
6464
cmake --build . --target run_buildcc_lib_bootstrap_linux_gcc --config Release
6565
66+
- name: BuildExe Layout setup
67+
working-directory: ${{github.workspace}}/..
68+
run: |
69+
mkdir buildcc_home
70+
export BUILDCC_HOME="${{github.workspace}}/../buildcc_home"
71+
echo $BUILDCC_HOME
72+
cd buildcc_home
73+
mkdir buildcc
74+
mkdir libs
75+
mkdir extensions
76+
cd ..
77+
ls
78+
6679
- name: BuildExe IM example tiny-process-library
6780
working-directory: ${{github.workspace}}/${{env.BUILD_FOLDER_DEV_ALL}}
6881
run: |
82+
export BUILDCC_HOME="${{github.workspace}}/../buildcc_home"
83+
echo $BUILDCC_HOME
6984
cmake --build . --target run_buildexe_im_tpl_linux_gcc --config Release
7085
7186
- name: CPack Release
@@ -200,9 +215,24 @@ jobs:
200215
run: |
201216
cmake --build . --target run_buildcc_lib_bootstrap_linux_gcc --config Release
202217
218+
- name: BuildExe Layout setup
219+
working-directory: ${{github.workspace}}/..
220+
run: |
221+
mkdir buildcc_home
222+
export BUILDCC_HOME="${{github.workspace}}/../buildcc_home"
223+
echo $BUILDCC_HOME
224+
cd buildcc_home
225+
mkdir buildcc
226+
mkdir libs
227+
mkdir extensions
228+
cd ..
229+
ls
230+
203231
- name: BuildExe IM example tiny-process-library
204232
working-directory: ${{github.workspace}}/${{env.BUILD_FOLDER_DEV_SINGLE}}
205233
run: |
234+
export BUILDCC_HOME="${{github.workspace}}/../buildcc_home"
235+
echo $BUILDCC_HOME
206236
cmake --build . --target run_buildexe_im_tpl_linux_gcc --config Release
207237
208238
# - name: TODO, BuildExe SM simple hyrid example

.github/workflows/win_cmake_build.yml

+14
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,23 @@ jobs:
5555
run: |
5656
cmake --build . --config Release --target run_buildcc_lib_bootstrap_win_msvc --parallel 2
5757
58+
- name: BuildExe Layout setup
59+
working-directory: ${{github.workspace}}/..
60+
run: |
61+
mkdir buildcc_home
62+
$env:BUILDCC_HOME = "${{github.workspace}}/../buildcc_home"
63+
$env:BUILDCC_HOME
64+
cd buildcc_home
65+
mkdir buildcc
66+
mkdir libs
67+
mkdir extensions
68+
cd ..
69+
dir
70+
5871
- name: BuildExe IM example tiny-process-library
5972
working-directory: ${{github.workspace}}/${{env.BUILD_FOLDER_MSVC_DEV_ALL}}
6073
run: |
74+
$env:BUILDCC_HOME = "${{github.workspace}}/../buildcc_home"
6175
cmake --build . --config Release --target run_buildexe_im_tpl_win_msvc
6276
6377
# - name: TODO, BuildExe SM simple hyrid example

buildexe/CMakeLists.txt

+27
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
add_executable(buildexe
22
buildexe.cpp
33

4+
src/build_env_home.cpp
5+
include/buildexe/build_env_home.h
6+
47
src/args_setup.cpp
58
include/buildexe/args_setup.h
69

@@ -84,3 +87,27 @@ add_custom_target(run_buildexe_sm_simple_linux_gcc
8487
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../example/hybrid/simple
8588
VERBATIM USES_TERMINAL
8689
)
90+
91+
# [Script Mode] BuildExe libs example WIN GCC
92+
add_custom_target(run_buildexe_libs_hybrid_win_gcc
93+
COMMAND buildexe --help-all
94+
COMMAND buildexe --config compile.toml --config ${CMAKE_CURRENT_SOURCE_DIR}/../bootstrap/config/toolchain_win_gcc.toml
95+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../example/buildexe/libs
96+
VERBATIM USES_TERMINAL
97+
)
98+
99+
# [Script Mode] BuildExe libs example WIN MSVC
100+
add_custom_target(run_buildexe_libs_hybrid_win_msvc
101+
COMMAND buildexe --help-all
102+
COMMAND buildexe --config compile.toml --config ${CMAKE_CURRENT_SOURCE_DIR}/../bootstrap/config/toolchain_win_msvc.toml
103+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../example/buildexe/libs
104+
VERBATIM USES_TERMINAL
105+
)
106+
107+
# [Script Mode] BuildExe libs example LINUX GCC
108+
add_custom_target(run_buildexe_libs_hybrid_linux_gcc
109+
COMMAND buildexe --help-all
110+
COMMAND buildexe --config compile.toml --config ${CMAKE_CURRENT_SOURCE_DIR}/../bootstrap/config/toolchain_linux_gcc.toml
111+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../example/buildexe/libs
112+
VERBATIM USES_TERMINAL
113+
)

buildexe/buildexe.cpp

+20-38
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "buildcc.h"
1818

1919
#include "buildexe/args_setup.h"
20+
#include "buildexe/build_env_home.h"
2021
#include "buildexe/build_env_setup.h"
2122
#include "buildexe/toolchain_setup.h"
2223

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

3536
static void clean_cb();
3637

38+
// TODO, Update BuildExeArgs with internal functions
3739
int main(int argc, char **argv) {
38-
Args args;
40+
//
41+
BuildccHome::Init();
3942

40-
ArgToolchain host_toolchain_arg;
41-
args.AddToolchain("host", "Host Toolchain", host_toolchain_arg);
42-
43-
BuildExeMode out_mode;
44-
setup_arg_buildexe_mode(args, out_mode);
45-
46-
ArgTargetInfo out_targetinfo;
47-
setup_arg_target_info(args, out_targetinfo);
48-
49-
ArgTargetInputs out_targetinputs;
50-
setup_arg_target_inputs(args, out_targetinputs);
51-
52-
ArgScriptInfo out_scriptinfo;
53-
setup_arg_script_mode(args, out_scriptinfo);
54-
55-
args.Parse(argc, argv);
43+
//
44+
BuildExeArgs buildexe_args;
45+
buildexe_args.Setup();
46+
buildexe_args.Parse(argc, argv);
5647

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

66-
Register reg(args);
57+
Register reg(buildexe_args.GetArgs());
6758
reg.Clean(clean_cb);
6859

69-
// Build
70-
BaseToolchain toolchain = host_toolchain_arg.ConstructToolchain();
60+
// Host Toolchain
61+
BaseToolchain toolchain =
62+
buildexe_args.GetHostToolchainArg().ConstructToolchain();
7163
find_toolchain_verify(toolchain);
72-
if (out_mode == BuildExeMode::Script) {
64+
if (buildexe_args.GetBuildMode() == BuildExeMode::Script) {
7365
host_toolchain_verify(toolchain);
7466
}
7567

76-
// Build environment
77-
BuildEnvSetup build_setup(reg, toolchain, out_targetinfo, out_targetinputs);
78-
if (out_mode == BuildExeMode::Script) {
79-
// buildcc and user target
80-
build_setup.ConstructUserTargetWithBuildcc();
81-
} else {
82-
// user target
83-
build_setup.ConstructUserTarget();
84-
}
85-
reg.RunBuild();
86-
87-
// Run
88-
if (out_mode == BuildExeMode::Script) {
89-
env::log_info(kTag,
90-
fmt::format("************** Running '{}' **************",
91-
out_targetinfo.name));
92-
build_setup.RunUserTarget(out_scriptinfo);
68+
// Build Target
69+
BuildEnvSetup build_setup(reg, toolchain, buildexe_args);
70+
build_setup.ConstructTarget();
71+
72+
// Run Target if script mode
73+
if (buildexe_args.GetBuildMode() == BuildExeMode::Script) {
74+
build_setup.RunUserTarget(buildexe_args.GetScriptInfo());
9375
}
9476

9577
// - Clang Compile Commands

buildexe/include/buildexe/args_setup.h

+44-4
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,50 @@ struct ArgScriptInfo {
5454
std::vector<std::string> configs;
5555
};
5656

57-
void setup_arg_buildexe_mode(Args &args, BuildExeMode &out);
58-
void setup_arg_target_info(Args &args, ArgTargetInfo &out);
59-
void setup_arg_target_inputs(Args &args, ArgTargetInputs &out);
60-
void setup_arg_script_mode(Args &args, ArgScriptInfo &out);
57+
struct LibInfo {
58+
std::string lib_name;
59+
std::string absolute_lib_path;
60+
};
61+
62+
class BuildExeArgs {
63+
public:
64+
void Setup();
65+
void Parse(int argc, char **argv) { args_.Parse(argc, argv); }
66+
67+
// Getters
68+
const Args &GetArgs() const { return args_; }
69+
const ArgToolchain &GetHostToolchainArg() const {
70+
return host_toolchain_arg_;
71+
}
72+
const ArgTargetInfo &GetTargetInfo() const { return out_targetinfo_; }
73+
const ArgTargetInputs &GetTargetInputs() const { return out_targetinputs_; }
74+
const ArgScriptInfo &GetScriptInfo() const { return out_scriptinfo_; }
75+
BuildExeMode GetBuildMode() const { return out_mode_; }
76+
77+
const std::vector<LibInfo> &GetLibsInfo() const { return libs_info_; }
78+
const std::vector<fs::path> &GetLibBuildFiles() const {
79+
return lib_build_files_;
80+
}
81+
82+
private:
83+
void SetupBuildMode();
84+
void SetupTargetInfo();
85+
void SetupTargetInputs();
86+
void SetupScriptMode();
87+
void SetupLibs();
88+
89+
private:
90+
Args args_;
91+
ArgToolchain host_toolchain_arg_;
92+
ArgTargetInfo out_targetinfo_;
93+
ArgTargetInputs out_targetinputs_;
94+
ArgScriptInfo out_scriptinfo_;
95+
96+
BuildExeMode out_mode_;
97+
98+
std::vector<LibInfo> libs_info_;
99+
std::vector<fs::path> lib_build_files_;
100+
};
61101

62102
} // namespace buildcc
63103

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Copyright 2021-2022 Niket Naidu. All rights reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#ifndef BUILDEXE_BUILD_ENV_HOME_H_
18+
#define BUILDEXE_BUILD_ENV_HOME_H_
19+
20+
#include "buildcc.h"
21+
22+
namespace buildcc {
23+
24+
class BuildccHome {
25+
public:
26+
static void Init();
27+
28+
static const fs::path &GetBuildccHomeDir() {
29+
ExpectInitialized();
30+
return buildcc_home_;
31+
}
32+
static const fs::path &GetBuildccBaseDir() {
33+
ExpectInitialized();
34+
return buildcc_base_;
35+
}
36+
static const fs::path &GetBuildccLibsDir() {
37+
ExpectInitialized();
38+
return buildcc_libs_;
39+
}
40+
static const fs::path &GetBuildccExtensionsDir() {
41+
ExpectInitialized();
42+
return buildcc_extensions_;
43+
}
44+
45+
static bool IsInitialized() { return initialized_; }
46+
static void ExpectInitialized() {
47+
env::assert_fatal(IsInitialized(), "BuildccHome is not initialized");
48+
}
49+
50+
private:
51+
static fs::path buildcc_home_;
52+
static fs::path buildcc_base_;
53+
static fs::path buildcc_libs_;
54+
static fs::path buildcc_extensions_;
55+
static bool initialized_;
56+
};
57+
58+
} // namespace buildcc
59+
60+
#endif

buildexe/include/buildexe/build_env_setup.h

+10-10
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "buildcc.h"
2121

2222
#include "bootstrap/build_buildcc.h"
23+
2324
#include "buildexe/args_setup.h"
2425

2526
namespace buildcc {
@@ -31,15 +32,12 @@ class BuildEnvSetup {
3132

3233
public:
3334
BuildEnvSetup(Register &reg, const BaseToolchain &toolchain,
34-
const ArgTargetInfo &arg_target_info,
35-
const ArgTargetInputs &arg_target_inputs)
36-
: reg_(reg), toolchain_(toolchain), arg_target_info_(arg_target_info),
37-
arg_target_inputs_(arg_target_inputs) {
35+
const BuildExeArgs &buildexe_args)
36+
: reg_(reg), toolchain_(toolchain), buildexe_args_(buildexe_args) {
3837
state_.build = true;
3938
}
4039

41-
void ConstructUserTarget();
42-
void ConstructUserTargetWithBuildcc();
40+
void ConstructTarget();
4341

4442
void RunUserTarget(const ArgScriptInfo &arg_script_info);
4543

@@ -52,19 +50,21 @@ class BuildEnvSetup {
5250
}
5351

5452
private:
53+
void ConstructUserTarget();
54+
void ConstructUserTargetWithBuildcc();
55+
5556
void BuildccTargetSetup();
5657
void UserTargetSetup();
5758
void UserTargetCb();
58-
void UserTargetBuild();
59-
6059
void UserTargetWithBuildccSetup();
60+
void UserTargetWithLibsSetup();
61+
void UserTargetBuild();
6162
void DepUserTargetOnBuildcc();
6263

6364
private:
6465
Register &reg_;
6566
const BaseToolchain &toolchain_;
66-
const ArgTargetInfo &arg_target_info_;
67-
const ArgTargetInputs &arg_target_inputs_;
67+
const BuildExeArgs &buildexe_args_;
6868

6969
ArgToolchainState state_;
7070
PersistentStorage storage_;

0 commit comments

Comments
 (0)