diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-20 09:51:53 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-20 09:51:53 +0100 |
| commit | e3b1fa5ffa6b1680d0df0f895fcfbe430d6cc4c7 (patch) | |
| tree | 36fa1738ea6199b741939c05b2f0cfe440407fdf | |
| parent | c418d56982805ad64a433ec02b9d787f56e23734 (diff) | |
Revision 95: Breaking changes, update flags to be standard.
Also added bpp/32asm as a MPCC module.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
| -rw-r--r-- | CompilerKit/AsmKit/AsmKit.hpp | 26 | ||||
| -rw-r--r-- | Drivers/32asm.cc | 11 | ||||
| -rw-r--r-- | Drivers/64asm.cc | 17 | ||||
| -rw-r--r-- | Drivers/bpp.cc | 6 | ||||
| -rw-r--r-- | Drivers/ld.cc | 36 |
5 files changed, 66 insertions, 30 deletions
diff --git a/CompilerKit/AsmKit/AsmKit.hpp b/CompilerKit/AsmKit/AsmKit.hpp index 9160035..eeb1de0 100644 --- a/CompilerKit/AsmKit/AsmKit.hpp +++ b/CompilerKit/AsmKit/AsmKit.hpp @@ -67,6 +67,8 @@ namespace CompilerKit explicit PlatformAssembler() = default; ~PlatformAssembler() = default; + CXXKIT_COPY_DEFAULT(PlatformAssembler); + virtual std::string CheckLine(std::string &line, const std::string &file) = 0; virtual bool WriteLine(std::string &line, const std::string &file) = 0; virtual bool WriteNumber(const std::size_t &pos, std::string &from_what) = 0; @@ -81,6 +83,8 @@ namespace CompilerKit explicit PlatformAssembler64x0() = default; ~PlatformAssembler64x0() = default; + CXXKIT_COPY_DEFAULT(PlatformAssembler64x0); + virtual std::string CheckLine(std::string &line, const std::string &file) override; virtual bool WriteLine(std::string &line, const std::string &file) override; virtual bool WriteNumber(const std::size_t& pos, std::string& from_what) override; @@ -89,6 +93,24 @@ namespace CompilerKit #endif // __ASM_NEED_64x0__ +#ifdef __ASM_NEED_32x0__ + + class PlatformAssembler32x0 final : public PlatformAssembler + { + public: + explicit PlatformAssembler32x0() = default; + ~PlatformAssembler32x0() = default; + + CXXKIT_COPY_DEFAULT(PlatformAssembler32x0); + + virtual std::string CheckLine(std::string &line, const std::string &file) override; + virtual bool WriteLine(std::string &line, const std::string &file) override; + virtual bool WriteNumber(const std::size_t& pos, std::string& from_what) override; + + }; + +#endif // __ASM_NEED_32x0__ + union NumberCast final { explicit NumberCast(UInt64 raw) : raw(raw) {} @@ -103,4 +125,6 @@ namespace CompilerKit # define MPCC_MODULE(name) int name(int argc, char** argv) #else # define MPCC_MODULE(name) int main(int argc, char** argv) -#endif /* ifdef __MODULE_NEED__ */
\ No newline at end of file +#endif /* ifdef __MODULE_NEED__ */ + + diff --git a/Drivers/32asm.cc b/Drivers/32asm.cc index 08c9b03..c654477 100644 --- a/Drivers/32asm.cc +++ b/Drivers/32asm.cc @@ -39,4 +39,15 @@ #define kWhite "\e[0;97m" #define kYellow "\e[0;33m" +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief Our assembler entrypoint, the program/module starts here. + +///////////////////////////////////////////////////////////////////////////////////////// + +MPCC_MODULE(MPUXAssembler32000) +{ + + return 0; +}
\ No newline at end of file diff --git a/Drivers/64asm.cc b/Drivers/64asm.cc index 6e8e2f0..85a516e 100644 --- a/Drivers/64asm.cc +++ b/Drivers/64asm.cc @@ -100,17 +100,17 @@ namespace detail ///////////////////////////////////////////////////////////////////////////////////////// -// @brief Main entrypoint. +// @brief Our assembler entrypoint, the program/module starts here. ///////////////////////////////////////////////////////////////////////////////////////// -MPCC_MODULE(Assembler64x0) +MPCC_MODULE(MPUXAssembler64000) { for (size_t i = 1; i < argc; ++i) { if (argv[i][0] == '-') { - if (strcmp(argv[i], "-v") == 0) + if (strcmp(argv[i], "--version") == 0) { kStdOut << "64asm: 64x0 Assembler.\n64asm: v1.10\n64asm: Copyright (c) 2024 Mahrouss Logic.\n"; return 0; @@ -118,9 +118,9 @@ MPCC_MODULE(Assembler64x0) else if (strcmp(argv[i], "-h") == 0) { kStdOut << "64asm: 64x0 Assembler.\n64asm: Copyright (c) 2024 Mahrouss Logic.\n"; - kStdOut << "-v: Print program version.\n"; - kStdOut << "-verbose: Print verbose output.\n"; - kStdOut << "-m640xx: Compile for a subset of the X64000.\n"; + kStdOut << "--version: Print program version.\n"; + kStdOut << "--verbose: Print verbose output.\n"; + kStdOut << "--64xxx: Compile for a subset of the X64000.\n"; return 0; } @@ -129,7 +129,7 @@ MPCC_MODULE(Assembler64x0) kOutputAsBinary = true; continue; } - else if (strcmp(argv[i], "-verbose") == 0) + else if (strcmp(argv[i], "--verbose") == 0) { kVerbose = true; continue; @@ -358,7 +358,6 @@ static bool asm_read_attributes(std::string &line) if (name.find(".text") != std::string::npos) { // data is treated as code. - kCurrentRecord.fKind = CompilerKit::kPefCode; } else if (name.find(".data") != std::string::npos) @@ -416,8 +415,6 @@ static bool asm_read_attributes(std::string &line) j = '$'; } - if (name.find(',') != std::string::npos) - name.erase(name.find(',')); if (name.find(".text") != std::string::npos) { diff --git a/Drivers/bpp.cc b/Drivers/bpp.cc index 0c8d45a..45a32c2 100644 --- a/Drivers/bpp.cc +++ b/Drivers/bpp.cc @@ -980,7 +980,7 @@ kIncludeFile: ///////////////////////////////////////////////////////////////////////////////////////// -int main(int argc, char** argv) +MPCC_MODULE(MPUXPreprocessor) { try { @@ -1016,8 +1016,7 @@ int main(int argc, char** argv) if (argv[index][0] == '-') { - if (strcmp(argv[index], "-v") == 0 || - strcmp(argv[index], "--version") == 0) + if (strcmp(argv[index], "--version") == 0) { printf("%s\n", "bpp v1.11, (c) Mahrouss Logic"); return 0; @@ -1030,6 +1029,7 @@ int main(int argc, char** argv) printf("%s\n", "--working-dir: set directory to working path."); printf("%s\n", "--include-dir: add directory to include path."); printf("%s\n", "--define: define macro."); + printf("%s\n", "--version: print the version."); return 0; } diff --git a/Drivers/ld.cc b/Drivers/ld.cc index 5bfb7a5..966f1d5 100644 --- a/Drivers/ld.cc +++ b/Drivers/ld.cc @@ -16,6 +16,7 @@ #include <CompilerKit/StdKit/ErrorID.hpp> +//! Assembler Kit #include <CompilerKit/AsmKit/AsmKit.hpp> //! Portable Executable Format @@ -31,7 +32,7 @@ //! @brief standard PEF entry. #define kPefStart "__start" -#define kToolVersion "ld v2.1, (c) Mahrouss Logic 2024" +#define kToolVersion "ld v2.2, (c) Mahrouss Logic 2024" #define StringCompare(DST, SRC) strcmp(DST, SRC) @@ -68,51 +69,54 @@ MPCC_MODULE(MPUXLinker) { bool is_executable = true; + /** + * @brief parse flags and such. + * + */ for (size_t i = 1; i < argc; ++i) { if (StringCompare(argv[i], "-h") == 0) { kStdOut << kToolVersion << "\n"; - kStdOut << "-v: Print program version.\n"; - kStdOut << "-verbose: Print program backtrace (verbose mode).\n"; - kStdOut << "-shared: Output as a shared library.\n"; - kStdOut << "-fat-binary: Output as FAT PEF.\n"; - kStdOut << "-m32x0: Output as 32x0 PEF.\n"; - kStdOut << "-m64x0: Output as 64x0 PEF.\n"; - kStdOut << "-o: Select output filename.\n"; + kStdOut << "--version: Print program version.\n"; + kStdOut << "--verbose: Print program backtrace (verbose mode).\n"; + kStdOut << "--shared: Output as a shared library.\n"; + kStdOut << "--fat-bin: Output as FAT PEF.\n"; + kStdOut << "--32k: Output as 32x0 PEF.\n"; + kStdOut << "--64k: Output as 64x0 PEF.\n"; + kStdOut << "--output-file: Select output filename.\n"; // bye return 0; } - else if (StringCompare(argv[i], "-v") == 0 || - StringCompare(argv[i], "--version") == 0) + else if (StringCompare(argv[i], "--version") == 0) { kStdOut << kToolVersion << std::endl; // bye :D return 0; } - else if (StringCompare(argv[i], "-fat-binary") == 0) + else if (StringCompare(argv[i], "--fat-bin") == 0) { kFatBinaryEnable = true; continue; } - else if (StringCompare(argv[i], "-m64x0") == 0) + else if (StringCompare(argv[i], "--64k") == 0) { kArch = CompilerKit::kPefArch64000; continue; } - else if (StringCompare(argv[i], "-m32x0") == 0) + else if (StringCompare(argv[i], "--32k") == 0) { kArch = CompilerKit::kPefArch32000; continue; } - else if (StringCompare(argv[i], "-verbose") == 0) + else if (StringCompare(argv[i], "--verbose") == 0) { kVerbose = true; continue; } - else if (StringCompare(argv[i], "-shared") == 0) + else if (StringCompare(argv[i], "--shared") == 0) { if (kOutput.find(kPefExt) != std::string::npos) kOutput.erase(kOutput.find(kPefExt), strlen(kPefExt)); @@ -123,7 +127,7 @@ MPCC_MODULE(MPUXLinker) continue; } - else if (StringCompare(argv[i], "-o") == 0) + else if (StringCompare(argv[i], "--output-file") == 0) { kOutput = argv[i + 1]; ++i; |
