Skip to content

Commit ec4699b

Browse files
committed
matrix core
1 parent 7d56cac commit ec4699b

68 files changed

Lines changed: 4748 additions & 3682 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ Thumbs.db
8787
# Logs & profiling (add as needed)
8888
*.log
8989
perf.data*
90+
profile/
9091

9192
# Backup files
9293
*.bak

CMakeLists.txt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,4 @@ if(ENABLE_PORTCE_DEMO AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/portce)
170170
if(EMSCRIPTEN OR (NOT CMAKE_CROSSCOMPILING AND SDL2_FOUND))
171171
add_subdirectory(demo/portce)
172172
endif()
173-
endif()
174-
175-
if(ENABLE_PORTCE_DEMO AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/portce)
176-
if(NOT CMAKE_CROSSCOMPILING AND SDL2_FOUND)
177-
add_subdirectory(apps/matrix/portce)
178-
endif()
179-
endif()
173+
endif()

apps/matrix/CMakeLists.txt

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
cmake_minimum_required(VERSION 3.20)
2+
3+
project(matrix_app_core C CXX)
4+
5+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
6+
7+
option(MATRIX_BUILD_CE "Build for TI-84 Plus CE via CEdevToolchain.cmake" OFF)
8+
option(MATRIX_ENABLE_TESTS "Build native tests" ON)
9+
option(MATRIX_STRICT_WARNINGS "Enable -Werror and extra warnings" ON)
10+
11+
set(MATRIX_CORE_DIR "${CMAKE_CURRENT_LIST_DIR}/core")
12+
13+
set(MATRIX_CORE_HEADERS
14+
${MATRIX_CORE_DIR}/include/matrix_core/arena.hpp
15+
${MATRIX_CORE_DIR}/include/matrix_core/config.hpp
16+
${MATRIX_CORE_DIR}/include/matrix_core/error.hpp
17+
${MATRIX_CORE_DIR}/include/matrix_core/explanation.hpp
18+
${MATRIX_CORE_DIR}/include/matrix_core/latex.hpp
19+
${MATRIX_CORE_DIR}/include/matrix_core/matrix.hpp
20+
${MATRIX_CORE_DIR}/include/matrix_core/matrix_core.hpp
21+
${MATRIX_CORE_DIR}/include/matrix_core/ops.hpp
22+
${MATRIX_CORE_DIR}/include/matrix_core/rational.hpp
23+
${MATRIX_CORE_DIR}/include/matrix_core/row_ops.hpp
24+
${MATRIX_CORE_DIR}/include/matrix_core/row_reduction.hpp
25+
${MATRIX_CORE_DIR}/include/matrix_core/slab.hpp
26+
${MATRIX_CORE_DIR}/include/matrix_core/writer.hpp
27+
)
28+
29+
set(MATRIX_CORE_SOURCES
30+
${MATRIX_CORE_DIR}/src/det_detail.cpp
31+
${MATRIX_CORE_DIR}/src/explanation.cpp
32+
${MATRIX_CORE_DIR}/src/latex_view.cpp
33+
${MATRIX_CORE_DIR}/src/matrix_view.cpp
34+
${MATRIX_CORE_DIR}/src/ops_basic_view.cpp
35+
${MATRIX_CORE_DIR}/src/ops_cramer.cpp
36+
${MATRIX_CORE_DIR}/src/ops_det_ondemand.cpp
37+
${MATRIX_CORE_DIR}/src/ops_det_replace_column_ondemand.cpp
38+
${MATRIX_CORE_DIR}/src/ops_inverse_ondemand.cpp
39+
${MATRIX_CORE_DIR}/src/ops_minor_cofactor_ondemand.cpp
40+
${MATRIX_CORE_DIR}/src/ops_rref_ondemand.cpp
41+
${MATRIX_CORE_DIR}/src/rational.cpp
42+
${MATRIX_CORE_DIR}/src/row_ops.cpp
43+
)
44+
45+
if(MATRIX_BUILD_CE)
46+
# Self-contained CE builds (no dependency on root CMake)
47+
include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/CEdevToolchain.cmake)
48+
49+
cedev_add_program(
50+
TARGET matrix_core_smoke
51+
NAME "MCORE"
52+
DESCRIPTION "Matrix core smoke test (build-only)"
53+
54+
SOURCES
55+
${MATRIX_CORE_SOURCES}
56+
${CMAKE_CURRENT_LIST_DIR}/core/ce/smoke_main.cpp
57+
58+
INCLUDE_DIRECTORIES
59+
${MATRIX_CORE_DIR}/include
60+
61+
CXX_MODE
62+
63+
LIBLOAD
64+
keypadc
65+
)
66+
67+
message(STATUS "Matrix core CE smoke build enabled")
68+
return()
69+
endif()
70+
71+
# ---------------------------------------------------------------------------
72+
# Native library + tests
73+
# ---------------------------------------------------------------------------
74+
function(matrix_core_apply target_name)
75+
target_include_directories(${target_name} PRIVATE ${MATRIX_CORE_DIR}/include)
76+
target_compile_features(${target_name} PRIVATE cxx_std_20)
77+
78+
target_compile_options(${target_name} PRIVATE
79+
-fno-exceptions
80+
-fno-rtti
81+
-Wframe-larger-than=127
82+
-Wno-error=frame-larger-than
83+
)
84+
85+
if(MATRIX_STRICT_WARNINGS)
86+
target_compile_options(${target_name} PRIVATE
87+
-Wall -Wextra -Wpedantic -Werror
88+
-Wconversion -Wsign-conversion
89+
-Wshadow -Wdouble-promotion
90+
-Wformat=2 -Wformat-security
91+
-Wcast-qual -Wpointer-arith
92+
-Wswitch-enum -Wundef
93+
-Wnull-dereference -Wfloat-equal
94+
-Wredundant-decls -Wunreachable-code
95+
-Wimplicit-fallthrough
96+
)
97+
endif()
98+
endfunction()
99+
100+
add_executable(matrix_profile_cramer
101+
${MATRIX_CORE_SOURCES}
102+
${MATRIX_CORE_HEADERS}
103+
${MATRIX_CORE_DIR}/profile/profile_cramer.cpp
104+
)
105+
matrix_core_apply(matrix_profile_cramer)
106+
target_compile_options(matrix_profile_cramer PRIVATE -fstack-usage)
107+
108+
if(MATRIX_ENABLE_TESTS)
109+
enable_testing()
110+
111+
add_executable(test_rational
112+
${MATRIX_CORE_SOURCES}
113+
${MATRIX_CORE_HEADERS}
114+
${MATRIX_CORE_DIR}/tests/test_rational.cpp
115+
)
116+
matrix_core_apply(test_rational)
117+
118+
add_executable(test_matrix_ops
119+
${MATRIX_CORE_SOURCES}
120+
${MATRIX_CORE_HEADERS}
121+
${MATRIX_CORE_DIR}/tests/test_matrix_ops.cpp
122+
)
123+
matrix_core_apply(test_matrix_ops)
124+
125+
add_executable(test_rref
126+
${MATRIX_CORE_SOURCES}
127+
${MATRIX_CORE_HEADERS}
128+
${MATRIX_CORE_DIR}/tests/test_rref.cpp
129+
)
130+
matrix_core_apply(test_rref)
131+
132+
add_executable(test_det
133+
${MATRIX_CORE_SOURCES}
134+
${MATRIX_CORE_HEADERS}
135+
${MATRIX_CORE_DIR}/tests/test_det.cpp
136+
)
137+
matrix_core_apply(test_det)
138+
139+
add_executable(test_minor_cofactor
140+
${MATRIX_CORE_SOURCES}
141+
${MATRIX_CORE_HEADERS}
142+
${MATRIX_CORE_DIR}/tests/test_minor_cofactor.cpp
143+
)
144+
matrix_core_apply(test_minor_cofactor)
145+
146+
add_executable(test_cramer
147+
${MATRIX_CORE_SOURCES}
148+
${MATRIX_CORE_HEADERS}
149+
${MATRIX_CORE_DIR}/tests/test_cramer.cpp
150+
)
151+
matrix_core_apply(test_cramer)
152+
153+
add_executable(test_inverse
154+
${MATRIX_CORE_SOURCES}
155+
${MATRIX_CORE_HEADERS}
156+
${MATRIX_CORE_DIR}/tests/test_inverse.cpp
157+
)
158+
matrix_core_apply(test_inverse)
159+
160+
add_test(NAME rational COMMAND test_rational)
161+
add_test(NAME matrix_ops COMMAND test_matrix_ops)
162+
add_test(NAME rref COMMAND test_rref)
163+
add_test(NAME det COMMAND test_det)
164+
add_test(NAME minor_cofactor COMMAND test_minor_cofactor)
165+
add_test(NAME cramer COMMAND test_cramer)
166+
add_test(NAME inverse COMMAND test_inverse)
167+
endif()

apps/matrix/CMakePresets.json

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
{
2+
"version": 8,
3+
"configurePresets": [
4+
{
5+
"name": "native",
6+
"displayName": "Native (Debug)",
7+
"generator": "Ninja",
8+
"binaryDir": "${sourceDir}/../../build/matrix/native",
9+
"cacheVariables": {
10+
"CMAKE_C_COMPILER": "/usr/bin/clang",
11+
"CMAKE_CXX_COMPILER": "/usr/bin/clang++",
12+
"CMAKE_BUILD_TYPE": "Debug",
13+
"MATRIX_BUILD_CE": "OFF",
14+
"MATRIX_ENABLE_TESTS": "ON",
15+
"MATRIX_STRICT_WARNINGS": "ON"
16+
}
17+
},
18+
{
19+
"name": "native-asan",
20+
"displayName": "Native (ASAN/LSAN)",
21+
"generator": "Ninja",
22+
"binaryDir": "${sourceDir}/../../build/matrix/native-asan",
23+
"cacheVariables": {
24+
"CMAKE_C_COMPILER": "/usr/bin/clang",
25+
"CMAKE_CXX_COMPILER": "/usr/bin/clang++",
26+
"CMAKE_BUILD_TYPE": "Debug",
27+
"MATRIX_BUILD_CE": "OFF",
28+
"MATRIX_ENABLE_TESTS": "ON",
29+
"MATRIX_STRICT_WARNINGS": "OFF",
30+
"CMAKE_C_FLAGS": "-fsanitize=address -fno-omit-frame-pointer",
31+
"CMAKE_CXX_FLAGS": "-fsanitize=address -fno-omit-frame-pointer",
32+
"CMAKE_EXE_LINKER_FLAGS": "-fsanitize=address"
33+
}
34+
},
35+
{
36+
"name": "native-ubsan",
37+
"displayName": "Native (UBSAN)",
38+
"generator": "Ninja",
39+
"binaryDir": "${sourceDir}/../../build/matrix/native-ubsan",
40+
"cacheVariables": {
41+
"CMAKE_C_COMPILER": "/usr/bin/clang",
42+
"CMAKE_CXX_COMPILER": "/usr/bin/clang++",
43+
"CMAKE_BUILD_TYPE": "Debug",
44+
"MATRIX_BUILD_CE": "OFF",
45+
"MATRIX_ENABLE_TESTS": "ON",
46+
"MATRIX_STRICT_WARNINGS": "OFF",
47+
"CMAKE_C_FLAGS": "-fsanitize=undefined -fno-omit-frame-pointer",
48+
"CMAKE_CXX_FLAGS": "-fsanitize=undefined -fno-omit-frame-pointer",
49+
"CMAKE_EXE_LINKER_FLAGS": "-fsanitize=undefined"
50+
}
51+
},
52+
{
53+
"name": "native-lsan",
54+
"displayName": "Native (LSAN)",
55+
"generator": "Ninja",
56+
"binaryDir": "${sourceDir}/../../build/matrix/native-lsan",
57+
"cacheVariables": {
58+
"CMAKE_C_COMPILER": "/usr/bin/clang",
59+
"CMAKE_CXX_COMPILER": "/usr/bin/clang++",
60+
"CMAKE_BUILD_TYPE": "Debug",
61+
"MATRIX_BUILD_CE": "OFF",
62+
"MATRIX_ENABLE_TESTS": "ON",
63+
"MATRIX_STRICT_WARNINGS": "OFF",
64+
"CMAKE_C_FLAGS": "-fsanitize=leak -fno-omit-frame-pointer",
65+
"CMAKE_CXX_FLAGS": "-fsanitize=leak -fno-omit-frame-pointer",
66+
"CMAKE_EXE_LINKER_FLAGS": "-fsanitize=leak"
67+
}
68+
},
69+
{
70+
"name": "native-coverage",
71+
"displayName": "Native (Coverage)",
72+
"generator": "Ninja",
73+
"binaryDir": "${sourceDir}/../../build/matrix/native-coverage",
74+
"cacheVariables": {
75+
"CMAKE_C_COMPILER": "/usr/bin/clang",
76+
"CMAKE_CXX_COMPILER": "/usr/bin/clang++",
77+
"CMAKE_BUILD_TYPE": "Debug",
78+
"MATRIX_BUILD_CE": "OFF",
79+
"MATRIX_ENABLE_TESTS": "ON",
80+
"MATRIX_STRICT_WARNINGS": "OFF",
81+
"CMAKE_C_FLAGS": "-fprofile-instr-generate -fcoverage-mapping",
82+
"CMAKE_CXX_FLAGS": "-fprofile-instr-generate -fcoverage-mapping",
83+
"CMAKE_EXE_LINKER_FLAGS": "-fprofile-instr-generate"
84+
}
85+
},
86+
{
87+
"name": "ce",
88+
"displayName": "TI-84 Plus CE (smoke build)",
89+
"generator": "Ninja",
90+
"binaryDir": "${sourceDir}/../../build/matrix/ce",
91+
"cacheVariables": {
92+
"MATRIX_BUILD_CE": "ON"
93+
}
94+
}
95+
],
96+
"buildPresets": [
97+
{
98+
"name": "native",
99+
"configurePreset": "native"
100+
},
101+
{
102+
"name": "native-asan",
103+
"configurePreset": "native-asan"
104+
},
105+
{
106+
"name": "native-ubsan",
107+
"configurePreset": "native-ubsan"
108+
},
109+
{
110+
"name": "native-lsan",
111+
"configurePreset": "native-lsan"
112+
},
113+
{
114+
"name": "native-coverage",
115+
"configurePreset": "native-coverage"
116+
},
117+
{
118+
"name": "ce",
119+
"configurePreset": "ce"
120+
}
121+
],
122+
"testPresets": [
123+
{
124+
"name": "native",
125+
"configurePreset": "native",
126+
"output": {
127+
"outputOnFailure": true
128+
}
129+
}
130+
]
131+
}
132+

0 commit comments

Comments
 (0)