init
This commit is contained in:
commit
45c2bf9426
14
.gdb_history
Normal file
14
.gdb_history
Normal file
|
@ -0,0 +1,14 @@
|
|||
q
|
||||
r
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
bt
|
||||
q
|
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
build/
|
||||
.cache
|
||||
vendor/
|
9
.vscode/settings.json
vendored
Normal file
9
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"Lua.diagnostics.globals": [
|
||||
"grbc_file",
|
||||
"grbc_executable",
|
||||
"grbc_want_version",
|
||||
"grbc_build",
|
||||
"grbc_load_platform"
|
||||
]
|
||||
}
|
11
CMakeLists.txt
Normal file
11
CMakeLists.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
cmake_minimum_required(VERSION 3.28)
|
||||
|
||||
project(grbc)
|
||||
|
||||
add_subdirectory("vendor/sol2")
|
||||
|
||||
include_directories("include")
|
||||
include_directories("vendor/sol2/include")
|
||||
|
||||
add_executable(grbc src/main.cc src/utils.cc src/file.cc src/target_exe.cc src/platform.cc src/ninja.cc src/generator.cc)
|
||||
target_link_libraries(grbc sol2 lua)
|
33
HConfig
Normal file
33
HConfig
Normal file
|
@ -0,0 +1,33 @@
|
|||
grbc_want_version("1.0")
|
||||
grbc_load_platform("platform.hcfg")
|
||||
|
||||
local grbc_exe = grbc_executable(ExecutableConfig.new({
|
||||
name = "grbc",
|
||||
language_type = LanguageType.Cpp,
|
||||
files = {
|
||||
grbc_file("src/main.cc"),
|
||||
grbc_file("src/file.cc"),
|
||||
grbc_file("src/ninja.cc"),
|
||||
grbc_file("src/platform.cc"),
|
||||
grbc_file("src/target_exe.cc"),
|
||||
grbc_file("src/utils.cc"),
|
||||
grbc_file("src/generator.cc")
|
||||
},
|
||||
|
||||
requirements = {
|
||||
Package.new({
|
||||
name = "lua",
|
||||
compiler_flags = "",
|
||||
linker_flags = "-llua -lm -ldl"
|
||||
})
|
||||
},
|
||||
compile_flags = {},
|
||||
linker_flags = {},
|
||||
include_dirs = {
|
||||
grbc_file("include"),
|
||||
grbc_file("vendor/sol2/include")
|
||||
}
|
||||
}))
|
||||
|
||||
-- Output the final build script
|
||||
grbc_build("ninja")
|
5
README.md
Normal file
5
README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# GRBC
|
||||
GRaphite Build Configurator
|
||||
|
||||
## About
|
||||
GRBC is a predictable build system.
|
77
build.ninja
Normal file
77
build.ninja
Normal file
|
@ -0,0 +1,77 @@
|
|||
### GRBC BUILT-IN NINJA GENERATOR ###
|
||||
|
||||
## Default variables ##
|
||||
|
||||
builddir = build
|
||||
|
||||
## build_rule_compile_cc ##
|
||||
|
||||
cc_path = /usr/lib64/ccache/gcc
|
||||
rule cc
|
||||
command = $cc_path -MMD -MT $out -MF $out.d $p_cflags -c $in -o $out
|
||||
description = Compiling C object $in
|
||||
depfile = $out.d
|
||||
deps = gcc
|
||||
|
||||
## build_rule_compile_cxx ##
|
||||
|
||||
cxx_path = /usr/lib64/ccache/g++
|
||||
rule cxx
|
||||
command = $cxx_path -MMD -MT $out -MF $out.d $p_cflags -c $in -o $out
|
||||
description = Compiling C++ object $in
|
||||
depfile = $out.d
|
||||
deps = gcc
|
||||
|
||||
## build_rule_link_cc ##
|
||||
|
||||
rule link_cc
|
||||
command = $cc_path $p_cflags -o $out $in $p_linker_flags
|
||||
description = Linking C executables $out
|
||||
|
||||
## build_rule_link_cxx ##
|
||||
|
||||
rule link_cxx
|
||||
command = $cxx_path $p_cflags -o $out $in $p_linker_flags
|
||||
description = Linking C++ executables $out
|
||||
|
||||
## Compile: src/main.cc ##
|
||||
|
||||
build $builddir/src/main.o: cxx src/main.cc
|
||||
p_cflags = -Iinclude -Ivendor/sol2/include
|
||||
|
||||
## Compile: src/file.cc ##
|
||||
|
||||
build $builddir/src/file.o: cxx src/file.cc
|
||||
p_cflags = -Iinclude -Ivendor/sol2/include
|
||||
|
||||
## Compile: src/ninja.cc ##
|
||||
|
||||
build $builddir/src/ninja.o: cxx src/ninja.cc
|
||||
p_cflags = -Iinclude -Ivendor/sol2/include
|
||||
|
||||
## Compile: src/platform.cc ##
|
||||
|
||||
build $builddir/src/platform.o: cxx src/platform.cc
|
||||
p_cflags = -Iinclude -Ivendor/sol2/include
|
||||
|
||||
## Compile: src/target_exe.cc ##
|
||||
|
||||
build $builddir/src/target_exe.o: cxx src/target_exe.cc
|
||||
p_cflags = -Iinclude -Ivendor/sol2/include
|
||||
|
||||
## Compile: src/utils.cc ##
|
||||
|
||||
build $builddir/src/utils.o: cxx src/utils.cc
|
||||
p_cflags = -Iinclude -Ivendor/sol2/include
|
||||
|
||||
## Compile: src/generator.cc ##
|
||||
|
||||
build $builddir/src/generator.o: cxx src/generator.cc
|
||||
p_cflags = -Iinclude -Ivendor/sol2/include
|
||||
|
||||
## Link: grbc ##
|
||||
|
||||
build grbc: link_cxx $builddir/src/main.o $builddir/src/file.o $builddir/src/ninja.o $builddir/src/platform.o $builddir/src/target_exe.o $builddir/src/utils.o $builddir/src/generator.o
|
||||
p_linker_flags = -llua -lm -ldl
|
||||
p_cflags =
|
||||
|
506
compile_commands.json
Normal file
506
compile_commands.json
Normal file
|
@ -0,0 +1,506 @@
|
|||
[
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "CMakeFiles/grbc.dir",
|
||||
"output": "cmake_object_order_depends_target_grbc"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/lib64/ccache/g++ -I/home/interfiber/dev/grbc/include -isystem /home/interfiber/dev/grbc/vendor/sol2/include -g -MD -MT CMakeFiles/grbc.dir/src/main.cc.o -MF CMakeFiles/grbc.dir/src/main.cc.o.d -o CMakeFiles/grbc.dir/src/main.cc.o -c /home/interfiber/dev/grbc/src/main.cc",
|
||||
"file": "/home/interfiber/dev/grbc/src/main.cc",
|
||||
"output": "CMakeFiles/grbc.dir/src/main.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/lib64/ccache/g++ -I/home/interfiber/dev/grbc/include -isystem /home/interfiber/dev/grbc/vendor/sol2/include -g -MD -MT CMakeFiles/grbc.dir/src/utils.cc.o -MF CMakeFiles/grbc.dir/src/utils.cc.o.d -o CMakeFiles/grbc.dir/src/utils.cc.o -c /home/interfiber/dev/grbc/src/utils.cc",
|
||||
"file": "/home/interfiber/dev/grbc/src/utils.cc",
|
||||
"output": "CMakeFiles/grbc.dir/src/utils.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/lib64/ccache/g++ -I/home/interfiber/dev/grbc/include -isystem /home/interfiber/dev/grbc/vendor/sol2/include -g -MD -MT CMakeFiles/grbc.dir/src/file.cc.o -MF CMakeFiles/grbc.dir/src/file.cc.o.d -o CMakeFiles/grbc.dir/src/file.cc.o -c /home/interfiber/dev/grbc/src/file.cc",
|
||||
"file": "/home/interfiber/dev/grbc/src/file.cc",
|
||||
"output": "CMakeFiles/grbc.dir/src/file.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/lib64/ccache/g++ -I/home/interfiber/dev/grbc/include -isystem /home/interfiber/dev/grbc/vendor/sol2/include -g -MD -MT CMakeFiles/grbc.dir/src/target_exe.cc.o -MF CMakeFiles/grbc.dir/src/target_exe.cc.o.d -o CMakeFiles/grbc.dir/src/target_exe.cc.o -c /home/interfiber/dev/grbc/src/target_exe.cc",
|
||||
"file": "/home/interfiber/dev/grbc/src/target_exe.cc",
|
||||
"output": "CMakeFiles/grbc.dir/src/target_exe.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/lib64/ccache/g++ -I/home/interfiber/dev/grbc/include -isystem /home/interfiber/dev/grbc/vendor/sol2/include -g -MD -MT CMakeFiles/grbc.dir/src/platform.cc.o -MF CMakeFiles/grbc.dir/src/platform.cc.o.d -o CMakeFiles/grbc.dir/src/platform.cc.o -c /home/interfiber/dev/grbc/src/platform.cc",
|
||||
"file": "/home/interfiber/dev/grbc/src/platform.cc",
|
||||
"output": "CMakeFiles/grbc.dir/src/platform.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/lib64/ccache/g++ -I/home/interfiber/dev/grbc/include -isystem /home/interfiber/dev/grbc/vendor/sol2/include -g -MD -MT CMakeFiles/grbc.dir/src/ninja.cc.o -MF CMakeFiles/grbc.dir/src/ninja.cc.o.d -o CMakeFiles/grbc.dir/src/ninja.cc.o -c /home/interfiber/dev/grbc/src/ninja.cc",
|
||||
"file": "/home/interfiber/dev/grbc/src/ninja.cc",
|
||||
"output": "CMakeFiles/grbc.dir/src/ninja.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/lib64/ccache/g++ -I/home/interfiber/dev/grbc/include -isystem /home/interfiber/dev/grbc/vendor/sol2/include -g -MD -MT CMakeFiles/grbc.dir/src/generator.cc.o -MF CMakeFiles/grbc.dir/src/generator.cc.o.d -o CMakeFiles/grbc.dir/src/generator.cc.o -c /home/interfiber/dev/grbc/src/generator.cc",
|
||||
"file": "/home/interfiber/dev/grbc/src/generator.cc",
|
||||
"output": "CMakeFiles/grbc.dir/src/generator.cc.o"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": ": && /usr/lib64/ccache/g++ -g CMakeFiles/grbc.dir/src/main.cc.o CMakeFiles/grbc.dir/src/utils.cc.o CMakeFiles/grbc.dir/src/file.cc.o CMakeFiles/grbc.dir/src/target_exe.cc.o CMakeFiles/grbc.dir/src/platform.cc.o CMakeFiles/grbc.dir/src/ninja.cc.o CMakeFiles/grbc.dir/src/generator.cc.o -o grbc -llua && :",
|
||||
"file": "CMakeFiles/grbc.dir/src/main.cc.o",
|
||||
"output": "grbc"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "CMakeFiles/edit_cache.util",
|
||||
"output": "edit_cache"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "CMakeFiles/rebuild_cache.util",
|
||||
"output": "rebuild_cache"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "cd /home/interfiber/dev/grbc/build && /usr/bin/cmake -P cmake_install.cmake",
|
||||
"file": "all",
|
||||
"output": "CMakeFiles/install.util"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "CMakeFiles/install.util",
|
||||
"output": "install"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "cd /home/interfiber/dev/grbc/build && /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake",
|
||||
"file": "all",
|
||||
"output": "CMakeFiles/install/local.util"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "CMakeFiles/install/local.util",
|
||||
"output": "install/local"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "cd /home/interfiber/dev/grbc/build && /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake",
|
||||
"file": "all",
|
||||
"output": "CMakeFiles/install/strip.util"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "CMakeFiles/install/strip.util",
|
||||
"output": "install/strip"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/Experimental",
|
||||
"output": "vendor/sol2/Experimental"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/Nightly",
|
||||
"output": "vendor/sol2/Nightly"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/Continuous",
|
||||
"output": "vendor/sol2/Continuous"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlyMemoryCheck",
|
||||
"output": "vendor/sol2/NightlyMemoryCheck"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlyStart",
|
||||
"output": "vendor/sol2/NightlyStart"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlyUpdate",
|
||||
"output": "vendor/sol2/NightlyUpdate"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlyConfigure",
|
||||
"output": "vendor/sol2/NightlyConfigure"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlyBuild",
|
||||
"output": "vendor/sol2/NightlyBuild"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlyTest",
|
||||
"output": "vendor/sol2/NightlyTest"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlyCoverage",
|
||||
"output": "vendor/sol2/NightlyCoverage"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlyMemCheck",
|
||||
"output": "vendor/sol2/NightlyMemCheck"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/NightlySubmit",
|
||||
"output": "vendor/sol2/NightlySubmit"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ExperimentalStart",
|
||||
"output": "vendor/sol2/ExperimentalStart"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ExperimentalUpdate",
|
||||
"output": "vendor/sol2/ExperimentalUpdate"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ExperimentalConfigure",
|
||||
"output": "vendor/sol2/ExperimentalConfigure"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ExperimentalBuild",
|
||||
"output": "vendor/sol2/ExperimentalBuild"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ExperimentalTest",
|
||||
"output": "vendor/sol2/ExperimentalTest"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ExperimentalCoverage",
|
||||
"output": "vendor/sol2/ExperimentalCoverage"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ExperimentalMemCheck",
|
||||
"output": "vendor/sol2/ExperimentalMemCheck"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ExperimentalSubmit",
|
||||
"output": "vendor/sol2/ExperimentalSubmit"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ContinuousStart",
|
||||
"output": "vendor/sol2/ContinuousStart"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ContinuousUpdate",
|
||||
"output": "vendor/sol2/ContinuousUpdate"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ContinuousConfigure",
|
||||
"output": "vendor/sol2/ContinuousConfigure"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ContinuousBuild",
|
||||
"output": "vendor/sol2/ContinuousBuild"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ContinuousTest",
|
||||
"output": "vendor/sol2/ContinuousTest"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ContinuousCoverage",
|
||||
"output": "vendor/sol2/ContinuousCoverage"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ContinuousMemCheck",
|
||||
"output": "vendor/sol2/ContinuousMemCheck"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/ContinuousSubmit",
|
||||
"output": "vendor/sol2/ContinuousSubmit"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/edit_cache.util",
|
||||
"output": "vendor/sol2/edit_cache"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/rebuild_cache.util",
|
||||
"output": "vendor/sol2/rebuild_cache"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "cd /home/interfiber/dev/grbc/build/vendor/sol2 && /usr/bin/cmake -P cmake_install.cmake",
|
||||
"file": "vendor/sol2/all",
|
||||
"output": "vendor/sol2/CMakeFiles/install.util"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/install.util",
|
||||
"output": "vendor/sol2/install"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "cd /home/interfiber/dev/grbc/build/vendor/sol2 && /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake",
|
||||
"file": "vendor/sol2/all",
|
||||
"output": "vendor/sol2/CMakeFiles/install/local.util"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/install/local.util",
|
||||
"output": "vendor/sol2/install/local"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "cd /home/interfiber/dev/grbc/build/vendor/sol2 && /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake",
|
||||
"file": "vendor/sol2/all",
|
||||
"output": "vendor/sol2/CMakeFiles/install/strip.util"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/CMakeFiles/install/strip.util",
|
||||
"output": "vendor/sol2/install/strip"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/Continuous",
|
||||
"output": "Continuous"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ContinuousBuild",
|
||||
"output": "ContinuousBuild"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ContinuousConfigure",
|
||||
"output": "ContinuousConfigure"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ContinuousCoverage",
|
||||
"output": "ContinuousCoverage"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ContinuousMemCheck",
|
||||
"output": "ContinuousMemCheck"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ContinuousStart",
|
||||
"output": "ContinuousStart"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ContinuousSubmit",
|
||||
"output": "ContinuousSubmit"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ContinuousTest",
|
||||
"output": "ContinuousTest"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ContinuousUpdate",
|
||||
"output": "ContinuousUpdate"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/Experimental",
|
||||
"output": "Experimental"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ExperimentalBuild",
|
||||
"output": "ExperimentalBuild"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ExperimentalConfigure",
|
||||
"output": "ExperimentalConfigure"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ExperimentalCoverage",
|
||||
"output": "ExperimentalCoverage"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ExperimentalMemCheck",
|
||||
"output": "ExperimentalMemCheck"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ExperimentalStart",
|
||||
"output": "ExperimentalStart"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ExperimentalSubmit",
|
||||
"output": "ExperimentalSubmit"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ExperimentalTest",
|
||||
"output": "ExperimentalTest"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/ExperimentalUpdate",
|
||||
"output": "ExperimentalUpdate"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/Nightly",
|
||||
"output": "Nightly"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlyBuild",
|
||||
"output": "NightlyBuild"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlyConfigure",
|
||||
"output": "NightlyConfigure"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlyCoverage",
|
||||
"output": "NightlyCoverage"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlyMemCheck",
|
||||
"output": "NightlyMemCheck"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlyMemoryCheck",
|
||||
"output": "NightlyMemoryCheck"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlyStart",
|
||||
"output": "NightlyStart"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlySubmit",
|
||||
"output": "NightlySubmit"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlyTest",
|
||||
"output": "NightlyTest"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "vendor/sol2/NightlyUpdate",
|
||||
"output": "NightlyUpdate"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "",
|
||||
"file": "grbc",
|
||||
"output": "all"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/bin/cmake -P /home/interfiber/dev/grbc/build/CMakeFiles/VerifyGlobs.cmake",
|
||||
"file": "/home/interfiber/dev/grbc/build/CMakeFiles/VerifyGlobs.cmake_force",
|
||||
"output": "/home/interfiber/dev/grbc/build/CMakeFiles/cmake.verify_globs"
|
||||
},
|
||||
{
|
||||
"directory": "/home/interfiber/dev/grbc/build",
|
||||
"command": "/usr/bin/cmake --regenerate-during-build -S/home/interfiber/dev/grbc -B/home/interfiber/dev/grbc/build",
|
||||
"file": "/home/interfiber/dev/grbc/build/CMakeFiles/cmake.verify_globs",
|
||||
"output": "build.ninja"
|
||||
}
|
||||
]
|
46
include/grbc/generator.h
Normal file
46
include/grbc/generator.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
#pragma once
|
||||
#include "grbc/spec.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
struct GeneratorResult {
|
||||
std::string file_name;
|
||||
std::string content;
|
||||
};
|
||||
|
||||
struct GeneratorCompileCommand {
|
||||
LanguageType language_type;
|
||||
|
||||
std::string source_file;
|
||||
std::string object_file;
|
||||
|
||||
std::string compiler_flags;
|
||||
};
|
||||
|
||||
struct GeneratorLinkExecutableCommand {
|
||||
std::vector<std::string> object_files;
|
||||
|
||||
std::string output_exe;
|
||||
|
||||
std::string linker_flags;
|
||||
};
|
||||
|
||||
struct GeneratorTarget {
|
||||
std::vector<GeneratorCompileCommand> compile_commands;
|
||||
std::vector<GeneratorLinkExecutableCommand> link_executable_commands;
|
||||
};
|
||||
|
||||
typedef GeneratorResult (*Generator_Run)();
|
||||
|
||||
struct Generator {
|
||||
/// Name of the generator, used in grbc_build(...)
|
||||
std::string name;
|
||||
|
||||
/// Function pointer for this generator
|
||||
Generator_Run func;
|
||||
};
|
||||
|
||||
/**
|
||||
* Ninja generator main function
|
||||
*/
|
||||
GeneratorResult ninja_generator();
|
21
include/grbc/helpers.h
Normal file
21
include/grbc/helpers.h
Normal file
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#define log_msg(message) printf("> %s\n", message);
|
||||
|
||||
inline std::vector<std::string> split_string(std::string s,
|
||||
std::string delimiter) {
|
||||
size_t pos_start = 0, pos_end, delim_len = delimiter.length();
|
||||
std::string token;
|
||||
std::vector<std::string> res;
|
||||
|
||||
while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) {
|
||||
token = s.substr(pos_start, pos_end - pos_start);
|
||||
pos_start = pos_end + delim_len;
|
||||
res.push_back(token);
|
||||
}
|
||||
|
||||
res.push_back(s.substr(pos_start));
|
||||
return res;
|
||||
}
|
40
include/grbc/ninja.h
Normal file
40
include/grbc/ninja.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
#pragma once
|
||||
#include "grbc/generator.h"
|
||||
#include <string>
|
||||
|
||||
/**
|
||||
* Generate the build rule for compiling c++ files
|
||||
*/
|
||||
std::string ninja_build_rule_compile_cxx();
|
||||
|
||||
/**
|
||||
* Generate the build rule for compiling c files
|
||||
*/
|
||||
std::string ninja_build_rule_compile_cc();
|
||||
|
||||
/**
|
||||
* Generate the build rule for linking c++ object files
|
||||
*/
|
||||
std::string ninja_build_rule_link_cxx();
|
||||
|
||||
/**
|
||||
* Generate the build rule for linking c object files
|
||||
*/
|
||||
std::string ninja_build_rule_link_cc();
|
||||
|
||||
/**
|
||||
* Generate a line which builds the given file
|
||||
*/
|
||||
std::string
|
||||
ninja_build_rule_compile_file(const GeneratorCompileCommand &compile_cmd);
|
||||
|
||||
/**
|
||||
* Default variables such as builddir
|
||||
*/
|
||||
std::string ninja_build_default_variables();
|
||||
|
||||
/**
|
||||
* Generate a line which links the given file
|
||||
*/
|
||||
std::string ninja_build_rule_link_exe_target(
|
||||
const GeneratorLinkExecutableCommand &link_cmd);
|
150
include/grbc/spec.h
Normal file
150
include/grbc/spec.h
Normal file
|
@ -0,0 +1,150 @@
|
|||
#pragma once
|
||||
#include <sol/table.hpp>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#define GRBC_VERSION "1.0"
|
||||
|
||||
enum LanguageType { LanguageType_CPP, LanguageType_C };
|
||||
|
||||
struct TargetInfo {
|
||||
/// Name of the target
|
||||
std::string name;
|
||||
};
|
||||
|
||||
struct Package {
|
||||
Package(const sol::table &table) {
|
||||
name = table.get<std::string>("name");
|
||||
compiler_flags = table.get<std::string>("compiler_flags");
|
||||
linker_flags = table.get<std::string>("linker_flags");
|
||||
}
|
||||
|
||||
std::string name;
|
||||
|
||||
std::string compiler_flags;
|
||||
|
||||
std::string linker_flags;
|
||||
};
|
||||
|
||||
struct PackageConfig {
|
||||
std::string name;
|
||||
|
||||
std::vector<Package> libraries;
|
||||
|
||||
std::vector<std::string> include_dirs;
|
||||
|
||||
std::vector<std::string> compile_flags;
|
||||
|
||||
std::vector<std::string> linker_flags;
|
||||
};
|
||||
|
||||
enum PlatformType { PlatformType_Win32, PlatformType_Linux };
|
||||
|
||||
struct GlobalConfig {
|
||||
/// Version of the grbc executable
|
||||
std::string engine_version = GRBC_VERSION;
|
||||
|
||||
/// Architecture string
|
||||
std::string architecture;
|
||||
|
||||
/// Build directory
|
||||
std::string build_dir = "build";
|
||||
|
||||
/// System that we are targetting
|
||||
PlatformType target;
|
||||
|
||||
/// Path to the target.hcfg
|
||||
std::string target_config;
|
||||
};
|
||||
|
||||
struct ExecutableConfig {
|
||||
ExecutableConfig(const sol::table &table) {
|
||||
name = table.get<std::string>("name");
|
||||
files = table.get<std::vector<std::string>>("files");
|
||||
requirements = table.get<std::vector<Package>>("requirements");
|
||||
|
||||
compile_flags = table.get<std::vector<std::string>>("compile_flags");
|
||||
linker_flags = table.get<std::vector<std::string>>("linker_flags");
|
||||
include_dirs = table.get<std::vector<std::string>>("include_dirs");
|
||||
|
||||
language_type = table.get<LanguageType>("language_type");
|
||||
}
|
||||
|
||||
/// Name of the executable
|
||||
std::string name;
|
||||
|
||||
/// Type of language
|
||||
LanguageType language_type;
|
||||
|
||||
/// List of files to compile
|
||||
std::vector<std::string> files;
|
||||
|
||||
/// Requirments of the executable
|
||||
std::vector<Package> requirements;
|
||||
|
||||
/// Compiler flags
|
||||
std::vector<std::string> compile_flags;
|
||||
|
||||
/// Linker flags
|
||||
std::vector<std::string> linker_flags;
|
||||
|
||||
/// Include directories
|
||||
std::vector<std::string> include_dirs;
|
||||
};
|
||||
|
||||
struct Platform {
|
||||
/// Name of the platform
|
||||
std::string name;
|
||||
|
||||
/// C++ compiler
|
||||
std::string cxx_compiler;
|
||||
|
||||
/// C compiler
|
||||
std::string cc_compiler;
|
||||
|
||||
/// Is this platform 64-bit?
|
||||
bool is_64bit = true;
|
||||
|
||||
/// Type of the platform
|
||||
PlatformType platform_type;
|
||||
};
|
||||
|
||||
/// Functions
|
||||
|
||||
void grbc_want_version(const std::string &version);
|
||||
|
||||
void grbc_exception(const std::string &exception_string);
|
||||
|
||||
GlobalConfig grbc_get_config();
|
||||
|
||||
std::string grbc_file(const std::string &file_path);
|
||||
|
||||
TargetInfo grbc_executable(const ExecutableConfig &executable_config);
|
||||
|
||||
void grbc_load_platform(const std::string &file_path);
|
||||
|
||||
void grbc_set_platform(const Platform &platform);
|
||||
|
||||
std::string grbc_find_compiler(const std::string &compiler_name);
|
||||
|
||||
void grbc_build(const std::string &generator_id);
|
||||
|
||||
std::string grbc_object_file(const std::string &file_path);
|
||||
|
||||
std::string grbc_replace_string(const std::string &string, char substring,
|
||||
char replacement);
|
||||
|
||||
std::string
|
||||
grbc_include_dirs_to_cflags(const std::vector<std::string> &include_dirs);
|
||||
|
||||
void grbc_log(const std::string &message);
|
||||
|
||||
bool grbc_is_win32();
|
||||
|
||||
bool grbc_is_linux();
|
||||
|
||||
PlatformType grbc_get_platform();
|
||||
|
||||
bool grbc_is_64bit();
|
||||
|
||||
bool grbc_is_32bit();
|
21
include/grbc/state.h
Normal file
21
include/grbc/state.h
Normal file
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
#include "grbc/generator.h"
|
||||
#include "grbc/spec.h"
|
||||
#include <sol/sol.hpp>
|
||||
|
||||
struct GState {
|
||||
Platform current_platform;
|
||||
sol::state lua;
|
||||
|
||||
std::vector<GeneratorTarget> targets;
|
||||
|
||||
std::vector<Generator> generators;
|
||||
|
||||
std::string ninja_output;
|
||||
|
||||
static GState& get() {
|
||||
static GState state{};
|
||||
|
||||
return state;
|
||||
}
|
||||
};
|
12
platform.hcfg
Normal file
12
platform.hcfg
Normal file
|
@ -0,0 +1,12 @@
|
|||
-- Linux platform
|
||||
|
||||
local platform = Platform.new()
|
||||
|
||||
platform.name = "Linux64"
|
||||
platform.cxx_compiler = grbc_find_compiler("g++")
|
||||
platform.cc_compiler = grbc_find_compiler("gcc")
|
||||
platform.is_64bit = true -- If set to false the compiler will need to produce 32bit code
|
||||
|
||||
platform.platform_type = PlatformType.Linux
|
||||
|
||||
return platform
|
165
spec/datatypes.md
Normal file
165
spec/datatypes.md
Normal file
|
@ -0,0 +1,165 @@
|
|||
# GRBC datatypes
|
||||
|
||||
## PackageConfig
|
||||
```c++
|
||||
struct PackageConfig {
|
||||
/// Name of the package
|
||||
string name;
|
||||
|
||||
/// List of libraries to include
|
||||
Array<TargetInfo> libraries;
|
||||
|
||||
/// List of include directories
|
||||
Array<path> include_dirs;
|
||||
|
||||
/// Extra compiler flags
|
||||
Array<string> compile_flags;
|
||||
|
||||
/// Extra linker flags
|
||||
Array<string> linker_flags;
|
||||
};
|
||||
```
|
||||
|
||||
## Package
|
||||
```c++
|
||||
struct Package {
|
||||
/// Name of the package
|
||||
string name;
|
||||
|
||||
/// Compiler flags used in this package
|
||||
string compile_flags;
|
||||
|
||||
/// Linker flags used in this package
|
||||
string linker_flags;
|
||||
};
|
||||
```
|
||||
|
||||
## LibraryConfig
|
||||
```c++
|
||||
struct LibraryConfig {
|
||||
/// Name of the library
|
||||
string name;
|
||||
|
||||
/// List of files to compile
|
||||
Array<path> files;
|
||||
|
||||
/// Type of library
|
||||
LibraryType lib_type;
|
||||
|
||||
/// Requirments of the library
|
||||
Array<Package> requirements;
|
||||
|
||||
/// Compiler flags
|
||||
Array<string> compile_flags;
|
||||
|
||||
/// Linker flags
|
||||
Array<string> linker_flags;
|
||||
|
||||
/// Include directories
|
||||
Array<string> include_dirs;
|
||||
};
|
||||
```
|
||||
|
||||
## LibraryType
|
||||
```c++
|
||||
enum LibraryType {
|
||||
LibraryType_Shared,
|
||||
LibraryType_Static
|
||||
};
|
||||
```
|
||||
|
||||
## ExecutableConfig
|
||||
```c++
|
||||
struct ExecutableConfig {
|
||||
/// Name of the executable
|
||||
string name;
|
||||
|
||||
/// Type of language
|
||||
LanguageType language_type;
|
||||
|
||||
/// List of files to compile
|
||||
Array<path> files;
|
||||
|
||||
/// Requirments of the executable
|
||||
Array<Package> requirements;
|
||||
|
||||
/// Compiler flags
|
||||
Array<string> compile_flags;
|
||||
|
||||
/// Linker flags
|
||||
Array<string> linker_flags;
|
||||
|
||||
/// Include directories
|
||||
Array<string> include_dirs;
|
||||
};
|
||||
```
|
||||
|
||||
## TargetInfo
|
||||
```c++
|
||||
struct TargetInfo {
|
||||
/// Name of the target
|
||||
string name;
|
||||
|
||||
/// List of compile commands for this target. should produce an executable, or library.
|
||||
Array<string> compile_commands;
|
||||
};
|
||||
```
|
||||
|
||||
## PlatformType
|
||||
```c++
|
||||
enum PlatformType {
|
||||
PlatformType_Win32,
|
||||
PlatformType_Linux
|
||||
};
|
||||
```
|
||||
|
||||
## GlobalConfig
|
||||
```c++
|
||||
struct GlobalConfig {
|
||||
/// Version of the grbc executable
|
||||
string engine_version;
|
||||
|
||||
/// Architecture string
|
||||
string architecture;
|
||||
|
||||
/// Platform to target (pulled from the target config)
|
||||
PlatformTarget target;
|
||||
|
||||
/// Path to the target.hcfg
|
||||
path target_config;
|
||||
};
|
||||
```
|
||||
|
||||
## OptionalFileType
|
||||
```
|
||||
enum OptionalFileType {
|
||||
OFileType_IsWin32,
|
||||
OFileType_IsUnix,
|
||||
OFileType_IsLinux
|
||||
};
|
||||
```
|
||||
|
||||
## Platform
|
||||
```c++
|
||||
struct Platform {
|
||||
/// Name of the platform
|
||||
string name;
|
||||
|
||||
/// C++ compiler
|
||||
string cxx_compiler;
|
||||
|
||||
/// C compiler
|
||||
string cc_compiler;
|
||||
|
||||
/// Type of the platform
|
||||
PlatformType platform_type;
|
||||
};
|
||||
```
|
||||
|
||||
## LanguageType
|
||||
```c++
|
||||
enum LanguageType {
|
||||
LanguageType_CPP,
|
||||
LanguageType_C
|
||||
};
|
||||
```
|
16
spec/ext.md
Normal file
16
spec/ext.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
# GRBC extensions
|
||||
Extensions can be loaded at runtime using grbc_ext(...), functions are then dumped into the runtime
|
||||
|
||||
## How extensions work
|
||||
Extensions are built into the grbc executable, or can be compiled as a shared library and put into ```/usr/local/share/grbc/extensions```, ```C:\GRBC\Extensions\```, or ```~/.local/share/grbc/extensions```
|
||||
|
||||
## Extension list
|
||||
* GRBC_EXT_pkg_config [NOSUPPORT]
|
||||
* GRBC_EXT_multi_file [NOSUPPORT]
|
||||
* GRBC_EXT_cmake [NOSUPPORT]
|
||||
|
||||
## GRBC_EXT_pkg_config
|
||||
Pkg config support. UNIX only
|
||||
|
||||
## GRBC_EXT_multi_file
|
||||
Multi file GRBC scripts, supported on all systems.
|
23
spec/ext/GRBC_EXT_multi_file.md
Normal file
23
spec/ext/GRBC_EXT_multi_file.md
Normal file
|
@ -0,0 +1,23 @@
|
|||
# GRBC_EXT_multi_file
|
||||
Multiple file support
|
||||
|
||||
## Support
|
||||
GRBC_EXT_multi_file is supported on all systems
|
||||
|
||||
## Example
|
||||
```lua
|
||||
-- No need to check since its always present!
|
||||
grbc_ext("GRBC_EXT_multi_file")
|
||||
|
||||
|
||||
-- Load a project from a folder which contains an HConfig file
|
||||
grbc_multi_file_import("FusionVk")
|
||||
|
||||
-- Load a project from a file besides HConfig
|
||||
grbc_multi_file_import("OtherProject.hcfg")
|
||||
```
|
||||
|
||||
## Functions
|
||||
|
||||
### grbc_multi_file_import(file_path: String) -> Void
|
||||
Import a project from the given folder
|
71
spec/functions.md
Normal file
71
spec/functions.md
Normal file
|
@ -0,0 +1,71 @@
|
|||
# GRBC functions
|
||||
See [datatypes.md](./datatypes.md) for data types/structures
|
||||
|
||||
## [X] grbc_get_config() -> GlobalConfig
|
||||
Get the config
|
||||
|
||||
## [X] grbc_want_version(version: String) -> Void
|
||||
Assure grbc is running on ```version```
|
||||
|
||||
## [X] grbc_log(message: String) -> Void
|
||||
Log ```message``` to the console
|
||||
|
||||
## grbc_is_win32() -> Boolean
|
||||
Check if we are targeting win32
|
||||
|
||||
## grbc_is_linux() -> Boolean
|
||||
Check if we are targeting a Linux system
|
||||
|
||||
## grbc_get_platform() -> PlatformType
|
||||
Return the current platform
|
||||
|
||||
## grbc_is_64bit() -> Boolean
|
||||
Check if we are targeting a 64bit system
|
||||
|
||||
## grbc_is_32bit() -> Boolean
|
||||
Check if we are targeting a 32bit system
|
||||
|
||||
## [X] grbc_executable(executable_config: ExecutableConfig) -> TargetInfo
|
||||
Create a new executable and add it to the build list
|
||||
|
||||
## grbc_library(library_config: LibraryConfig) -> TargetInfo
|
||||
Create a new library and add it to the build list
|
||||
|
||||
## [X] grbc_create_package(package_config: PackageConfig) -> Package
|
||||
Create a new package
|
||||
|
||||
## [X] grbc_file(file_path: String) -> Path
|
||||
Used when listing source files, should perform pre-checks on the file and return its path
|
||||
|
||||
## grbc_file_optional(file_type: OptionalFileType, file_path: String) -> Path
|
||||
If file_type is true then file_path is returned, otherwise a blank string
|
||||
|
||||
## grbc_has_ext(extension_name: String) -> Boolean
|
||||
Check if the given extension is supported
|
||||
|
||||
## grbc_ext(extension_name: String) -> Void
|
||||
Load the given extension into the script
|
||||
|
||||
## [X] grbc_exception(exception_string: String) -> Void
|
||||
Throw an exception
|
||||
|
||||
## [X] grbc_set_platform(current_platform: Platform) -> Void
|
||||
Set the current platform
|
||||
|
||||
## [X] grbc_load_platform(file_path: String) -> Void
|
||||
Load a platform config file from file_path
|
||||
|
||||
## [X] grbc_find_compiler(compiler_name: String) -> String
|
||||
Find the given executable in the users PATH, and return the full path
|
||||
|
||||
## [X] grbc_build(generator_id: String) -> Void
|
||||
Output the final build script, using the given generator. "ninja" is the one provided by default
|
||||
|
||||
## [X] grbc_object_file(file_path: String) -> String
|
||||
Convert the given file path to an object file path
|
||||
|
||||
## [X] grbc_replace_string(string: String, substring: Char, replacement: Char) -> String
|
||||
Replace substring in string with replacement
|
||||
|
||||
## [X] grbc_include_dirs_to_cflags(include_dirs: Array<String>) -> String
|
||||
Generate compiler flags to include the given directories
|
10
src/file.cc
Normal file
10
src/file.cc
Normal file
|
@ -0,0 +1,10 @@
|
|||
#include "grbc/spec.h"
|
||||
#include <filesystem>
|
||||
|
||||
std::string grbc_file(const std::string &file_path) {
|
||||
if (!std::filesystem::exists(file_path)) {
|
||||
grbc_exception("grbc_file gave path '" + file_path + "', which does not exist!");
|
||||
}
|
||||
|
||||
return file_path;
|
||||
}
|
22
src/generator.cc
Normal file
22
src/generator.cc
Normal file
|
@ -0,0 +1,22 @@
|
|||
#include "grbc/generator.h"
|
||||
#include "grbc/helpers.h"
|
||||
#include "grbc/spec.h"
|
||||
#include "grbc/state.h"
|
||||
#include <fstream>
|
||||
|
||||
void grbc_build(const std::string &generator_id) {
|
||||
log_msg(("finding generator with name: " + generator_id).c_str());
|
||||
|
||||
for (auto &gen : GState::get().generators) {
|
||||
if (gen.name == generator_id) {
|
||||
GeneratorResult result = gen.func();
|
||||
|
||||
std::ofstream ofs(result.file_name);
|
||||
ofs << result.content;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
grbc_exception("Could not find valid generator!");
|
||||
}
|
93
src/main.cc
Normal file
93
src/main.cc
Normal file
|
@ -0,0 +1,93 @@
|
|||
#include "grbc/state.h"
|
||||
#define SOL_ALL_SAFETIES_ON 1
|
||||
|
||||
#include "grbc/helpers.h"
|
||||
#include "grbc/spec.h"
|
||||
#include <sol/sol.hpp>
|
||||
|
||||
int main() {
|
||||
log_msg("opening lua libraries...");
|
||||
|
||||
auto &lua = GState::get().lua;
|
||||
|
||||
lua.open_libraries(sol::lib::base, sol::lib::coroutine, sol::lib::string,
|
||||
sol::lib::io, sol::lib::package, sol::lib::math);
|
||||
|
||||
log_msg("setting up runtime...");
|
||||
|
||||
// TargetInfo
|
||||
lua.new_usertype<TargetInfo>("TargetInfo", "name", &TargetInfo::name);
|
||||
|
||||
// PackageConfig
|
||||
lua.new_usertype<PackageConfig>(
|
||||
"PackageConfig", "name", &PackageConfig::name, "libraries",
|
||||
&PackageConfig::libraries, "include_dirs", &PackageConfig::include_dirs,
|
||||
"compile_flags", &PackageConfig::compile_flags, "linker_flags",
|
||||
&PackageConfig::linker_flags);
|
||||
|
||||
// GlobalConfig
|
||||
lua.new_usertype<GlobalConfig>(
|
||||
"GlobalConfig", "engine_version", &GlobalConfig::engine_version,
|
||||
"architecture", &GlobalConfig::architecture, "target",
|
||||
&GlobalConfig::target, "target_config", &GlobalConfig::target_config);
|
||||
|
||||
// Platform
|
||||
lua.new_usertype<Platform>("Platform", "name", &Platform::name,
|
||||
"cxx_compiler", &Platform::cxx_compiler,
|
||||
"cc_compiler", &Platform::cc_compiler,
|
||||
"platform_type", &Platform::platform_type, "is_64bit", &Platform::is_64bit);
|
||||
|
||||
// PlatformType
|
||||
lua.new_enum<PlatformType>("PlatformType", {{"Win32", PlatformType_Win32},
|
||||
{"Linux", PlatformType_Linux}});
|
||||
|
||||
// LanguageType
|
||||
lua.new_enum<LanguageType>("LanguageType", {
|
||||
{ "Cpp", LanguageType_CPP },
|
||||
{ "C", LanguageType_C }
|
||||
});
|
||||
|
||||
// ExecutableConfig
|
||||
lua.new_usertype<ExecutableConfig>(
|
||||
"ExecutableConfig", sol::constructors<ExecutableConfig(sol::table)>(),
|
||||
"name", &ExecutableConfig::name, "files", &ExecutableConfig::files,
|
||||
"requirments", &ExecutableConfig::requirements, "compile_flags",
|
||||
&ExecutableConfig::compile_flags, "linker_flags",
|
||||
&ExecutableConfig::linker_flags, "include_dirs",
|
||||
&ExecutableConfig::include_dirs, "language_type", &ExecutableConfig::language_type);
|
||||
|
||||
// Package
|
||||
lua.new_usertype<Package>("Package", sol::constructors<Package(sol::table)>(), "name", &Package::name, "compiler_flags",
|
||||
&Package::compiler_flags, "linker_flags",
|
||||
&Package::linker_flags);
|
||||
|
||||
lua.set("grbc_want_version", grbc_want_version);
|
||||
lua.set("grbc_exception", grbc_exception);
|
||||
lua.set("grbc_get_config", grbc_get_config);
|
||||
lua.set("grbc_file", grbc_file);
|
||||
lua.set("grbc_executable", grbc_executable);
|
||||
lua.set("grbc_load_platform", grbc_load_platform);
|
||||
lua.set("grbc_set_platform", grbc_set_platform);
|
||||
lua.set("grbc_find_compiler", grbc_find_compiler);
|
||||
lua.set("grbc_build", grbc_build);
|
||||
lua.set("grbc_replace_string", grbc_replace_string);
|
||||
lua.set("grbc_object_file", grbc_object_file);
|
||||
lua.set("grbc_include_dirs_to_clflags", grbc_include_dirs_to_cflags);
|
||||
lua.set("grbc_log", grbc_log);
|
||||
lua.set("grbc_is_32bit", grbc_is_32bit);
|
||||
lua.set("grbc_is_64bit", grbc_is_64bit);
|
||||
lua.set("grbc_is_linux", grbc_is_linux);
|
||||
lua.set("grbc_is_win32", grbc_is_win32);
|
||||
lua.set("grbc_get_platform", grbc_get_platform);
|
||||
|
||||
// Load generators
|
||||
|
||||
GState::get().generators.push_back({
|
||||
.name = "ninja",
|
||||
.func = ninja_generator
|
||||
});
|
||||
|
||||
log_msg("loading HConfig...");
|
||||
|
||||
lua.script_file("HConfig");
|
||||
}
|
128
src/ninja.cc
Normal file
128
src/ninja.cc
Normal file
|
@ -0,0 +1,128 @@
|
|||
#include "grbc/ninja.h"
|
||||
#include "grbc/generator.h"
|
||||
#include "grbc/helpers.h"
|
||||
#include "grbc/spec.h"
|
||||
#include "grbc/state.h"
|
||||
|
||||
std::string ninja_build_rule_compile_cxx() {
|
||||
std::string compiler_path = GState::get().current_platform.cxx_compiler;
|
||||
|
||||
std::string result =
|
||||
"## build_rule_compile_cxx ##\n\ncxx_path = " + compiler_path + "\n";
|
||||
result += "rule cxx\n";
|
||||
result += " command = $cxx_path -MMD -MT $out -MF $out.d $p_cflags -c $in "
|
||||
"-o $out\n";
|
||||
result += " description = Compiling C++ object $in\n";
|
||||
result += " depfile = $out.d\n";
|
||||
result += " deps = gcc\n";
|
||||
result += "\n";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string ninja_build_rule_compile_cc() {
|
||||
std::string compiler_path = GState::get().current_platform.cc_compiler;
|
||||
|
||||
std::string result =
|
||||
"## build_rule_compile_cc ##\n\ncc_path = " + compiler_path + "\n";
|
||||
result += "rule cc\n";
|
||||
result += " command = $cc_path -MMD -MT $out -MF $out.d $p_cflags -c $in "
|
||||
"-o $out\n";
|
||||
result += " description = Compiling C object $in\n";
|
||||
result += " depfile = $out.d\n";
|
||||
result += " deps = gcc\n";
|
||||
result += "\n";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string ninja_build_rule_link_cxx() {
|
||||
std::string result = "## build_rule_link_cxx ##\n\n";
|
||||
result += "rule link_cxx\n";
|
||||
result += " command = $cxx_path $p_cflags -o $out $in $p_linker_flags\n";
|
||||
result += " description = Linking C++ executables $out\n\n";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string ninja_build_rule_link_cc() {
|
||||
std::string result = "## build_rule_link_cc ##\n\n";
|
||||
result += "rule link_cc\n";
|
||||
result += " command = $cc_path $p_cflags -o $out $in $p_linker_flags\n";
|
||||
result += " description = Linking C executables $out\n\n";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string
|
||||
ninja_build_rule_compile_file(const GeneratorCompileCommand &compile_cmd) {
|
||||
std::string result = "## Compile: " + compile_cmd.source_file + " ##\n\n";
|
||||
|
||||
std::string compiler_rule = "cxx";
|
||||
|
||||
if (compile_cmd.language_type == LanguageType_C)
|
||||
compiler_rule = "cc";
|
||||
|
||||
result += "build $builddir/" + compile_cmd.object_file + ": " +
|
||||
compiler_rule + " " + compile_cmd.source_file + "\n";
|
||||
result += " p_cflags = " + compile_cmd.compiler_flags + "\n\n";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string ninja_build_default_variables() {
|
||||
std::string result = "## Default variables ##\n\n";
|
||||
result += "builddir = " + grbc_get_config().build_dir + "\n";
|
||||
|
||||
result += "\n"; // keep as the last line
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string ninja_build_rule_link_exe_target(
|
||||
const GeneratorLinkExecutableCommand &link_cmd) {
|
||||
std::string result = "## Link: " + link_cmd.output_exe + " ##\n\n";
|
||||
|
||||
std::string file_list;
|
||||
|
||||
for (auto &file : link_cmd.object_files) {
|
||||
file_list += "$builddir/" + file + " ";
|
||||
}
|
||||
|
||||
file_list.pop_back();
|
||||
|
||||
result += "build " + link_cmd.output_exe + ": link_cxx " + file_list + "\n";
|
||||
result += " p_linker_flags = " + link_cmd.linker_flags + "\n";
|
||||
result += " p_cflags = \n\n";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Ninja generator entry
|
||||
|
||||
GeneratorResult ninja_generator() {
|
||||
GeneratorResult result{};
|
||||
|
||||
log_msg("running ninja final generation...");
|
||||
|
||||
result.file_name = "build.ninja";
|
||||
|
||||
result.content += "### GRBC BUILT-IN NINJA GENERATOR ###\n\n";
|
||||
result.content += ninja_build_default_variables();
|
||||
result.content += ninja_build_rule_compile_cc();
|
||||
result.content += ninja_build_rule_compile_cxx();
|
||||
result.content += ninja_build_rule_link_cc();
|
||||
result.content += ninja_build_rule_link_cxx();
|
||||
|
||||
for (auto &target : GState::get().targets) {
|
||||
for (auto &compile_cmd : target.compile_commands) {
|
||||
result.content += ninja_build_rule_compile_file(compile_cmd);
|
||||
}
|
||||
|
||||
for (auto &link_cmd : target.link_executable_commands) {
|
||||
result.content += ninja_build_rule_link_exe_target(link_cmd);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
89
src/platform.cc
Normal file
89
src/platform.cc
Normal file
|
@ -0,0 +1,89 @@
|
|||
#include "grbc/helpers.h"
|
||||
#include "grbc/spec.h"
|
||||
#include "grbc/state.h"
|
||||
#include <cstdlib>
|
||||
#include <filesystem>
|
||||
|
||||
void grbc_set_platform(const Platform &platform) {
|
||||
GState::get().current_platform = platform;
|
||||
|
||||
if (!std::filesystem::exists(platform.cxx_compiler)) {
|
||||
grbc_exception("C++ compiler path does not exist at '" +
|
||||
platform.cxx_compiler + "'");
|
||||
}
|
||||
|
||||
if (!std::filesystem::exists(platform.cc_compiler)) {
|
||||
grbc_exception("C compiler path does not exist at '" +
|
||||
platform.cc_compiler + "'");
|
||||
}
|
||||
|
||||
log_msg("--- Platform config: ---");
|
||||
|
||||
log_msg(("C++ compiler = " + platform.cxx_compiler).c_str());
|
||||
log_msg(("C compiler = " + platform.cc_compiler).c_str());
|
||||
}
|
||||
|
||||
void grbc_load_platform(const std::string &file_path) {
|
||||
Platform platform = GState::get().lua.script_file(file_path);
|
||||
|
||||
grbc_set_platform(platform);
|
||||
}
|
||||
|
||||
std::string grbc_find_compiler(const std::string &compiler_name) {
|
||||
#if defined(WIN32)
|
||||
std::string path_var = std::getenv("Path");
|
||||
|
||||
std::vector<std::string> paths = split_string(path_var, ";");
|
||||
|
||||
for (auto ¤t_path : paths) {
|
||||
if (std::filesystem::exists(
|
||||
std::filesystem::path(current_path) /
|
||||
std::filesystem::path(compiler_name + ".exe"))) {
|
||||
return std::filesystem::path(current_path) /
|
||||
std::filesystem::path(compiler_name + ".exe");
|
||||
}
|
||||
}
|
||||
|
||||
grbc_exception("Failed to locate compiler with name '" + compiler_name + "'");
|
||||
|
||||
#elif defined(__linux__)
|
||||
std::string path_var = std::getenv("PATH");
|
||||
|
||||
std::vector<std::string> paths = split_string(path_var, ":");
|
||||
|
||||
for (auto ¤t_path : paths) {
|
||||
if (std::filesystem::exists(std::filesystem::path(current_path) /
|
||||
std::filesystem::path(compiler_name))) {
|
||||
return std::filesystem::path(current_path) /
|
||||
std::filesystem::path(compiler_name);
|
||||
}
|
||||
}
|
||||
|
||||
grbc_exception("Failed to locate compiler with name '" + compiler_name + "'");
|
||||
|
||||
#else
|
||||
#error Invalid platform for grbc_find_compiler
|
||||
#endif
|
||||
|
||||
return "NoPlatform";
|
||||
}
|
||||
|
||||
bool grbc_is_win32() {
|
||||
return grbc_get_platform() == PlatformType_Win32;
|
||||
}
|
||||
|
||||
bool grbc_is_linux() {
|
||||
return grbc_get_platform() == PlatformType_Linux;
|
||||
}
|
||||
|
||||
PlatformType grbc_get_platform() {
|
||||
return GState::get().current_platform.platform_type;
|
||||
}
|
||||
|
||||
bool grbc_is_64bit() {
|
||||
return GState::get().current_platform.is_64bit;
|
||||
}
|
||||
|
||||
bool grbc_is_32bit() {
|
||||
return !grbc_is_64bit();
|
||||
}
|
57
src/target_exe.cc
Normal file
57
src/target_exe.cc
Normal file
|
@ -0,0 +1,57 @@
|
|||
#include "grbc/generator.h"
|
||||
#include "grbc/spec.h"
|
||||
#include "grbc/state.h"
|
||||
|
||||
TargetInfo grbc_executable(const ExecutableConfig &executable_config) {
|
||||
TargetInfo target_config{};
|
||||
|
||||
std::string exe_name = executable_config.name;
|
||||
std::string compiler_args;
|
||||
std::string linker_args;
|
||||
|
||||
for (auto &package : executable_config.requirements) {
|
||||
compiler_args += package.compiler_flags + " ";
|
||||
linker_args += package.linker_flags + " ";
|
||||
}
|
||||
|
||||
for (auto &linker_arg : executable_config.linker_flags) {
|
||||
linker_args += linker_arg + " ";
|
||||
}
|
||||
|
||||
for (auto &compiler_arg : executable_config.compile_flags) {
|
||||
compiler_args += compiler_arg + " ";
|
||||
}
|
||||
|
||||
// Include directories
|
||||
|
||||
compiler_args += grbc_include_dirs_to_cflags(executable_config.include_dirs);
|
||||
|
||||
GeneratorTarget target{};
|
||||
|
||||
std::vector<std::string> object_files;
|
||||
|
||||
for (auto &src_file : executable_config.files) {
|
||||
GeneratorCompileCommand compile_cmd{};
|
||||
compile_cmd.source_file = src_file;
|
||||
compile_cmd.object_file = grbc_object_file(src_file);
|
||||
compile_cmd.compiler_flags = compiler_args;
|
||||
compile_cmd.language_type = executable_config.language_type;
|
||||
|
||||
object_files.push_back(compile_cmd.object_file);
|
||||
|
||||
target.compile_commands.push_back(compile_cmd);
|
||||
}
|
||||
|
||||
// Final executable link
|
||||
|
||||
GeneratorLinkExecutableCommand executable_link_cmd{};
|
||||
executable_link_cmd.linker_flags = linker_args;
|
||||
executable_link_cmd.object_files = object_files;
|
||||
executable_link_cmd.output_exe = exe_name;
|
||||
|
||||
target.link_executable_commands.push_back(executable_link_cmd);
|
||||
|
||||
GState::get().targets.push_back(target);
|
||||
|
||||
return target_config;
|
||||
}
|
70
src/utils.cc
Normal file
70
src/utils.cc
Normal file
|
@ -0,0 +1,70 @@
|
|||
#include "grbc/helpers.h"
|
||||
#include "grbc/spec.h"
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <filesystem>
|
||||
|
||||
void grbc_exception(const std::string &exception_string) {
|
||||
printf("--- GRBC EXCEPTION: ---\n");
|
||||
printf("Message: %s\n", exception_string.c_str());
|
||||
printf("Timestamp: %ld", time(nullptr));
|
||||
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
void grbc_want_version(const std::string &version) {
|
||||
if (grbc_get_config().engine_version != version) {
|
||||
grbc_exception("Expected engine_version " + version + ", got " +
|
||||
grbc_get_config().engine_version);
|
||||
}
|
||||
}
|
||||
|
||||
std::string grbc_object_file(const std::string &file_path) {
|
||||
std::filesystem::path path(file_path);
|
||||
path.replace_extension(".o");
|
||||
|
||||
std::string path_str = path.generic_string();
|
||||
|
||||
// Strip out stuff
|
||||
std::string no_spaces = grbc_replace_string(path_str, ' ', '_');
|
||||
|
||||
return no_spaces;
|
||||
}
|
||||
|
||||
std::string grbc_replace_string(const std::string &string, char substring,
|
||||
char replacement) {
|
||||
|
||||
std::string res;
|
||||
|
||||
for (char cChar : string) {
|
||||
if (cChar == substring) {
|
||||
res += replacement;
|
||||
} else {
|
||||
res += cChar;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
GlobalConfig grbc_get_config() {
|
||||
static GlobalConfig cfg{};
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
||||
std::string grbc_include_dirs_to_cflags(const std::vector<std::string> &include_dirs) {
|
||||
std::string result;
|
||||
|
||||
for (auto &include_dir : include_dirs) {
|
||||
result += "-I" + include_dir + " ";
|
||||
}
|
||||
|
||||
result.pop_back(); // Remove trailing space
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void grbc_log(const std::string &message) {
|
||||
log_msg(message.c_str());
|
||||
}
|
Loading…
Reference in a new issue