diff --git a/config.sh b/config.sh index b182b712..cb0675d1 100644 --- a/config.sh +++ b/config.sh @@ -7,6 +7,7 @@ export HOST=${HOST:-$(./default-host.sh)} export AR=${HOST}-ar export AS=${HOST}-as export CC=${HOST}-gcc +export CXX=${HOST}-g++ export PREFIX=/usr export EXEC_PREFIX=$PREFIX @@ -20,9 +21,11 @@ export CPPFLAGS='' # Configure the cross-compiler to use the desired system root. export SYSROOT="$(pwd)/sysroot" export CC="$CC --sysroot=$SYSROOT" +export CXX="$CXX --sysroot=$SYSROOT" # Work around that the -elf gcc targets doesn't have a system include directory # because it was configured with --without-headers rather than --with-sysroot. if echo "$HOST" | grep -Eq -- '-elf($|-)'; then export CC="$CC -isystem=$INCLUDEDIR" + export CXX="$CXX -isystem=$INCLUDEDIR" fi diff --git a/kernel/Makefile b/kernel/Makefile index 07b40703..3b876de6 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -62,6 +62,9 @@ $(ARCHDIR)/crtbegin.o $(ARCHDIR)/crtend.o: .c.o: $(CC) -MD -c $< -o $@ -std=gnu11 $(CFLAGS) $(CPPFLAGS) +.cpp.o: + $(CXX) -MD -c $< -o $@ $(CFLAGS) $(CPPFLAGS) + .S.o: $(CC) -MD -c $< -o $@ $(CFLAGS) $(CPPFLAGS) diff --git a/kernel/arch/i386/crti.s b/kernel/arch/i386/crti.s index 972b9735..30dd4ea2 100644 --- a/kernel/arch/i386/crti.s +++ b/kernel/arch/i386/crti.s @@ -13,4 +13,4 @@ _init: _fini: push %ebp movl %esp, %ebp - /* gcc will nicely put the contents of crtbegin.o's .fini section here. */ \ No newline at end of file + /* gcc will nicely put the contents of crtbegin.o's .fini section here. */ diff --git a/kernel/arch/i386/crtn.s b/kernel/arch/i386/crtn.s index 5da1e23c..1da795d6 100644 --- a/kernel/arch/i386/crtn.s +++ b/kernel/arch/i386/crtn.s @@ -7,4 +7,4 @@ .section .fini /* gcc will nicely put the contents of crtend.o's .fini section here. */ popl %ebp - ret \ No newline at end of file + ret diff --git a/kernel/arch/i386/tty.c b/kernel/arch/i386/tty.c index 1b8d5767..37129570 100644 --- a/kernel/arch/i386/tty.c +++ b/kernel/arch/i386/tty.c @@ -29,7 +29,7 @@ void terminal_clear(void) terminal_putentryat(' ', terminal_color, x, y); } -void terminal_initialize(void) +void terminal_initialize() { terminal_row = 0; terminal_col = 0; diff --git a/kernel/include/kernel/tty.h b/kernel/include/kernel/tty.h index 835e33df..a7715e62 100644 --- a/kernel/include/kernel/tty.h +++ b/kernel/include/kernel/tty.h @@ -2,7 +2,15 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + void terminal_initialize(void); void terminal_putchar(char c); void terminal_write(const char* data, size_t size); -void terminal_writestring(const char* data); \ No newline at end of file +void terminal_writestring(const char* data); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/kernel/kernel/kernel.c b/kernel/kernel/kernel.cpp similarity index 91% rename from kernel/kernel/kernel.c rename to kernel/kernel/kernel.cpp index 9b7585d4..3a123161 100644 --- a/kernel/kernel/kernel.c +++ b/kernel/kernel/kernel.cpp @@ -2,6 +2,7 @@ #include +extern "C" void kernel_main() { terminal_initialize();