summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-20 09:51:53 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-20 09:51:53 +0100
commite3b1fa5ffa6b1680d0df0f895fcfbe430d6cc4c7 (patch)
tree36fa1738ea6199b741939c05b2f0cfe440407fdf
parentc418d56982805ad64a433ec02b9d787f56e23734 (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.hpp26
-rw-r--r--Drivers/32asm.cc11
-rw-r--r--Drivers/64asm.cc17
-rw-r--r--Drivers/bpp.cc6
-rw-r--r--Drivers/ld.cc36
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;