summaryrefslogtreecommitdiff
path: root/src/libctor.h
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2022-12-27 12:58:11 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2022-12-27 12:58:11 +0100
commitde26eed5157a1b5efc2a72668b4f4a22638f2774 (patch)
tree0a9c23232d4f5aa5f26b54ef8facd4d527d5e63a /src/libctor.h
parent52775a29b431b346bf201877159b6abcfb982990 (diff)
Rename libctor.h to ctor.h
Diffstat (limited to 'src/libctor.h')
-rw-r--r--src/libctor.h154
1 files changed, 0 insertions, 154 deletions
diff --git a/src/libctor.h b/src/libctor.h
deleted file mode 100644
index 96e1115..0000000
--- a/src/libctor.h
+++ /dev/null
@@ -1,154 +0,0 @@
-// -*- c++ -*-
-// Distributed under the BSD 2-Clause License.
-// See accompanying file LICENSE for details.
-#pragma once
-
-#include <source_location>
-#include <string>
-#include <vector>
-#include <map>
-#include <variant>
-#include <cstddef>
-#include <functional>
-
-enum class TargetType
-{
- Auto, // Default - deduce from target name and sources extensions
-
- Executable,
- StaticLibrary,
- DynamicLibrary,
- Object,
- UnitTest,
- UnitTestLib,
- Function,
-};
-
-enum class Language
-{
- Auto, // Default - deduce language from source extensions
-
- C,
- Cpp,
- Asm,
-};
-
-enum class OutputSystem
-{
- Host, // Output for the target system
- Build, // Internal tool during cross-compilation
-};
-
-struct Source
-{
- Source(const char* file) : file(file) {}
- Source(const std::string& file) : file(file) {}
- Source(const char* file, Language lang) : file(file), language(lang) {}
- Source(const std::string& file, Language lang) : file(file), language(lang) {}
-
- Source(const char* file, const char* output) : file(file), output(output) {}
- Source(const std::string& file, const std::string& output) : file(file), output(output) {}
- Source(const char* file, Language lang, const char* output) : file(file), language(lang), output(output) {}
- Source(const std::string& file, Language lang, const std::string& output) : file(file), language(lang), output(output) {}
-
- std::string file;
- Language language{Language::Auto};
- std::string output{};
-};
-
-struct Flags
-{
- std::vector<std::string> cxxflags; // flags for c++ compiler
- std::vector<std::string> cflags; // flags for c compiler
- std::vector<std::string> ldflags; // flags for linker
- std::vector<std::string> asmflags; // flags for asm translator
-};
-
-struct Settings
-{
- std::string builddir{"build"};
- std::size_t parallel_processes{1};
- int verbose{0}; // -1: completely silent, 0: normal, 1: verbose, ...
-};
-
-struct BuildConfiguration;
-using GeneratorCb = std::function<int(const std::string& input,
- const std::string& output,
- const BuildConfiguration& config,
- const Settings& settings)>;
-
-struct BuildConfiguration
-{
- std::string name; // Name - used for referring in other configurations.
- TargetType type{TargetType::Auto};
- OutputSystem system{OutputSystem::Host};
- std::string target; // Output target file for this configuration
- std::vector<Source> sources; // source list
- std::vector<std::string> depends; // internal target dependencies
- Flags flags;
- std::vector<std::string> externals; // externals used by this configuration
- GeneratorCb function;
-};
-
-using BuildConfigurations = std::vector<BuildConfiguration>;
-
-int reg(BuildConfigurations (*cb)(const Settings&),
- const std::source_location location = std::source_location::current());
-
-// This type will use flags verbatim
-struct ExternalManual
-{
- Flags flags;
-};
-
-
-struct ExternalConfiguration
-{
- std::string name; // Name for configuration
- OutputSystem system{OutputSystem::Host};
- std::variant<ExternalManual> external;
-};
-
-using ExternalConfigurations = std::vector<ExternalConfiguration>;
-
-int reg(ExternalConfigurations (*cb)(const Settings&),
- const std::source_location location = std::source_location::current());
-
-// Convenience macro - ugly but keeps things simple(r)
-#define CONCAT(a, b) CONCAT_INNER(a, b)
-#define CONCAT_INNER(a, b) a ## b
-#define UNIQUE_NAME(base) CONCAT(base, __LINE__)
-#define REG(cb) namespace { int UNIQUE_NAME(unique) = reg(cb); }
-
-// Predefined configuration keys
-namespace cfg
-{
-constexpr auto builddir = "builddir";
-
-constexpr auto host_cc = "host-cc";
-constexpr auto host_cxx = "host-cpp";
-constexpr auto host_ar = "host-ar";
-constexpr auto host_ld = "host-ld";
-
-constexpr auto build_cc = "build-cc";
-constexpr auto build_cxx = "build-cpp";
-constexpr auto build_ar = "build-ar";
-constexpr auto build_ld = "build-ld";
-
-constexpr auto ctor_includedir = "ctor-includedir";
-constexpr auto ctor_libdir = "ctor-libdir";
-}
-
-struct Configuration
-{
- std::vector<std::string> args; // vector of arguments used when last calling configure
- std::map<std::string, std::string> env; // env used when last calling configure
-
- std::map<std::string, std::string> tools; // tools
- std::map<std::string, Flags> externals;
-};
-
-const Configuration& configuration();
-bool hasConfiguration(const std::string& key);
-const std::string& getConfiguration(const std::string& key,
- const std::string& defaultValue = {});