- GCC ARM64 Support, i.e. natively compiled with gcc on arm64

This commit is contained in:
2025-09-15 02:35:34 +00:00
parent f2a45aa913
commit 80925965d4
10 changed files with 53 additions and 46 deletions

View File

@@ -16,7 +16,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# ====================================================================================================================== # ======================================================================================================================
cmake_minimum_required(VERSION 3.30) cmake_minimum_required(VERSION 3.28)
project(fennec) project(fennec)
set(FENNEC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(FENNEC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
@@ -114,6 +114,7 @@ add_library(fennec STATIC
include/fennec/containers/object_pool.h include/fennec/containers/object_pool.h
include/fennec/containers/optional.h include/fennec/containers/optional.h
include/fennec/containers/pair.h include/fennec/containers/pair.h
include/fennec/containers/priority_queue.h
include/fennec/containers/rdtree.h include/fennec/containers/rdtree.h
include/fennec/containers/sequence.h include/fennec/containers/sequence.h
include/fennec/containers/set.h include/fennec/containers/set.h
@@ -226,6 +227,9 @@ add_library(fennec STATIC
include/fennec/langproc/filesystem/file.h source/langproc/filesystem/file.cpp include/fennec/langproc/filesystem/file.h source/langproc/filesystem/file.cpp
include/fennec/langproc/filesystem/path.h source/langproc/filesystem/path.cpp include/fennec/langproc/filesystem/path.h source/langproc/filesystem/path.cpp
# Compile
include/fennec/langproc/compile/tokenizer.h
# PLATFORM ============================================================================================================= # PLATFORM =============================================================================================================
@@ -233,13 +237,13 @@ add_library(fennec STATIC
include/fennec/platform/interface/platform.h source/platform/interface/platform.cpp include/fennec/platform/interface/platform.h source/platform/interface/platform.cpp
include/fennec/platform/interface/window.h include/fennec/platform/interface/window.h
# RENDERER =============================================================================================================
include/fennec/renderers/interface/gfxresourcepool.h
# EXTRA SOURCES ======================================================================================================== # EXTRA SOURCES ========================================================================================================
${FENNEC_EXTRA_SOURCES} ${FENNEC_EXTRA_SOURCES}
include/fennec/renderers/interface/gfxresourcepool.h
include/fennec/langproc/format/tokenizer.h
include/fennec/containers/priority_queue.h
) )
add_dependencies(fennec metaprogramming fennec-dependencies) add_dependencies(fennec metaprogramming fennec-dependencies)

View File

@@ -18,7 +18,9 @@
# this script finds the compiler being used # this script finds the compiler being used
message(STATUS "Compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
set(FENNEC_COMPILER "GCC") set(FENNEC_COMPILER "GCC")
include("${FENNEC_SOURCE_DIR}/cmake/gcc.cmake") include("${FENNEC_SOURCE_DIR}/cmake/gcc.cmake")
endif() endif()

View File

@@ -18,8 +18,8 @@
# this script sets flags and variables for gnu and gnu-like compilers # this script sets flags and variables for gnu and gnu-like compilers
add_compile_options("-mxsave" "-Wall" "-Wextra" "-pedantic" "-Werror") add_compile_options("-Wall" "-Wextra" "-pedantic" "-Werror")
fennec_add_link_options("-nostdlib" "-fno-exceptions" "-fno-rtti" "-fdiagnostics-all-candidates") fennec_add_link_options("-nostdlib" "-fno-exceptions" "-fno-rtti" "-fdiagnostics-all-candidates")
fennec_add_definitions(_GLIBCXX_INCLUDE_NEXT_C_HEADERS=1 FENNEC_COMPILER_GCC=1 FENNEC_NO_INLINE=[[gnu::noinline]]) fennec_add_definitions(_GLIBCXX_INCLUDE_NEXT_C_HEADERS=1 FENNEC_COMPILER_GCC=1 FENNEC_NO_INLINE=[[gnu::noinline]])

View File

@@ -51,25 +51,25 @@
#undef ULLONG_MIN #undef ULLONG_MIN
#undef ULLONG_MAX #undef ULLONG_MAX
#define CHAR_IS_SIGNED true #define CHAR_IS_SIGNED false
#define CHAR_ROUNDS 0x0 #define CHAR_ROUNDS 0x0
#define CHAR_RADIX_DIG 0x7 #define CHAR_RADIX_DIG 0x8
#define CHAR_DIG 0x2 #define CHAR_DIG 0x2
#define CHAR_DECIMAL_DIG 0x0 #define CHAR_DECIMAL_DIG 0x0
#define CHAR_RADIX 0x2 #define CHAR_RADIX 0x2
#define CHAR_TRAPS 0xtrue #define CHAR_TRAPS 0xtrue
#define CHAR_MIN 0x80 #define CHAR_MIN 0x0
#define CHAR_MAX 0x7f #define CHAR_MAX 0xff
#define WCHAR_IS_SIGNED true #define WCHAR_IS_SIGNED false
#define WCHAR_ROUNDS 0x0 #define WCHAR_ROUNDS 0x0
#define WCHAR_RADIX_DIG 0x1f #define WCHAR_RADIX_DIG 0x20
#define WCHAR_DIG 0x9 #define WCHAR_DIG 0x9
#define WCHAR_DECIMAL_DIG 0x0 #define WCHAR_DECIMAL_DIG 0x0
#define WCHAR_RADIX 0x2 #define WCHAR_RADIX 0x2
#define WCHAR_TRAPS 0xtrue #define WCHAR_TRAPS 0xtrue
#define WCHAR_MIN 0x80000000 #define WCHAR_MIN 0x0
#define WCHAR_MAX 0x7fffffff #define WCHAR_MAX 0xffffffff
#define SCHAR_ROUNDS 0x0 #define SCHAR_ROUNDS 0x0
#define SCHAR_RADIX_DIG 0x7 #define SCHAR_RADIX_DIG 0x7

View File

@@ -106,6 +106,7 @@
/// </table> /// </table>
/// ///
#include <fennec/lang/intrinsics.h>
#include <fennec/lang/type_transforms.h> #include <fennec/lang/type_transforms.h>
#include <fennec/lang/detail/_type_traits.h> #include <fennec/lang/detail/_type_traits.h>
@@ -181,7 +182,7 @@ template<typename T> constexpr bool_t is_null_pointer_v = is_null_pointer<T>::va
// fennec::is_array ==================================================================================================== // fennec::is_array ====================================================================================================
#if FENNEC_HAS_BUILTIN_IS_ARRAY #ifdef FENNEC_BUILTIN_IS_ARRAY
/// ///
/// \brief check if \p T is of an array type /// \brief check if \p T is of an array type

View File

@@ -80,17 +80,17 @@ struct tokenizer {
using token = pair<string, uint8_t>; using token = pair<string, uint8_t>;
private: private:
list<token> operator()(const string& line) { // list<token> operator()(const string& line) {
list<token> res; // list<token> res;
//
for (size_t i = 0; i < ) // for (size_t i = 0; i < )
//
return res; // return res;
} // }
private: private:
}; };
} }
#endif // FENNEC_LANGPROC_FORMAT_TOKENIZER_H #endif // FENNEC_LANGPROC_FORMAT_TOKENIZER_H

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.30) cmake_minimum_required(VERSION 3.28)
project(fennec-metaprogramming) project(fennec-metaprogramming)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
@@ -18,4 +18,4 @@ add_custom_command(
add_custom_target( add_custom_target(
metaprogramming metaprogramming
DEPENDS .metaprogramming DEPENDS .metaprogramming
) )

View File

@@ -1040,7 +1040,7 @@ bool file::putc(char c) {
} }
int res; int res;
if ((res = fputc(c, _handle)) != c && res != EOF) { if ((char)(res = fputc(c, _handle)) != c && res != EOF) {
_error = strerror(errno); _error = strerror(errno);
return true; return true;
} }
@@ -1058,7 +1058,7 @@ bool file::putwc(wchar_t c) {
} }
int res; int res;
if ((res = fputc(c, _handle)) != c && res != EOF) { if ((wchar_t)(res = fputwc(c, _handle)) != c && res != EOF) {
_error = strerror(errno); _error = strerror(errno);
return true; return true;
} }

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.30) cmake_minimum_required(VERSION 3.28)
project(fennec-test) project(fennec-test)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
@@ -19,4 +19,4 @@ target_link_libraries(fennec-test PRIVATE
-Wl,--whole-archive -Wl,--whole-archive
fennec fennec
-Wl,--no-whole-archive -Wl,--no-whole-archive
) )

View File

@@ -30,7 +30,7 @@
#ifndef FENNEC_TEST_LANGPROC_FORMAT_H #ifndef FENNEC_TEST_LANGPROC_FORMAT_H
#define FENNEC_TEST_LANGPROC_FORMAT_H #define FENNEC_TEST_LANGPROC_FORMAT_H
#include <fennec/langproc/format/tokenizer.h> #include <fennec/langproc/compile/tokenizer.h>
namespace fennec namespace fennec
{ {
@@ -40,24 +40,24 @@ namespace test
inline void fennec_test_langproc_format() { inline void fennec_test_langproc_format() {
tokenizer math = { // tokenizer math = {
.delimiter { " " }, // .delimiter { " " },
.operators {"+-/*="}, // .operators {"+-/*="},
.braces { "()" }, // .braces { "()" },
.escapes { "" }, // .escapes { "" },
.terminator { "" }, // .terminator { "" },
}; // };
//
const auto res = math.parse("1 + 2 = 3"); // const auto res = math.parse("1 + 2 = 3");
fennec_test_run(res.size(), size_t(5)); // fennec_test_run(res.size(), size_t(5));
//
for (const auto& token : res) { // for (const auto& token : res) {
std::cout << token.second << ", "; // std::cout << token.second << ", ";
} // }
} }
} }
} }
#endif // FENNEC_TEST_LANGPROC_FORMAT_H #endif // FENNEC_TEST_LANGPROC_FORMAT_H