Skip to content

Commit 0d9a717

Browse files
committed
Added C++ layer for vanilla mlp.
Changes to be committed: modified: CMakeLists.txt modified: cmake/Core.cmake modified: inc/ae2f/Ann/Util.h modified: src/ann/Conv.imp.c modified: src/ann/Mlp.def.cc new file: src/ann/Mlp.imp.c modified: src/ann/Slp.def.cc modified: src/ann/Slp.imp.c deleted: src/ann/Sp.c modified: src/mmap/MMap.def.c modified: src/mmap/MMap.imp.c modified: test.sh modified: test/ann/Conv.c new file: test/ann/MlpTrainXOR-Made-Primal.c modified: test/ann/MlpTrainXOR-Primal.c new file: test/ann/MlpTrainXOR-Primal.cc new file: test/ann/MlpTrainXOR.c
1 parent c746ce0 commit 0d9a717

File tree

17 files changed

+1842
-623
lines changed

17 files changed

+1842
-623
lines changed

CMakeLists.txt

Lines changed: 9 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.20)
22
enable_testing()
33
option(ae2f_CXX "" ON)
4-
option(ae2fCL_needed "" OFF)
4+
option(ae2fVK_needed "" OFF)
55
option(ae2f_TEST "" ON)
66
option(ae2f_MAC_BUILD "" ON)
77
option(ae2f_IS_SHARED "" OFF)
@@ -23,34 +23,32 @@ else()
2323
function(ae2f_itll tar)
2424
target_link_libraries(${tar} INTERFACE ${ARGN})
2525
endfunction()
26-
2726
endif()
2827

29-
if(NOT TARGET ae2f::${PROJECT_NAME})
28+
if(NOT TARGET ae2f::MMap)
3029
ae2f_CoreLibFetchX(ae2f Core main)
31-
ae2f_CoreLibFetchX(ae2f Macro main)
30+
ae2f_CoreLibFetchX(ae2f Preproc main)
3231

3332
file(GLOB mmap-inc ${PROJECT_SOURCE_DIR}/inc/ae2f/MMap/*.h)
3433
configure_file(${PROJECT_SOURCE_DIR}/src/mmap/Util.h.in ${PROJECT_SOURCE_DIR}/inc/ae2f/MMap/Util.h)
3534

36-
ae2f_Macro_init(1, 100, 100)
35+
ae2f_Macro_init(1 100 100)
3736

3837
ae2f_Macro_Lib_V(
3938
ae2f MMap "${ae2f_LIBPREFIX}"
4039
${PROJECT_SOURCE_DIR}/src/mmap "*.imp.c"
4140
${PROJECT_SOURCE_DIR}/src/mmap "*.def.c"
4241
${PROJECT_SOURCE_DIR}/inc/ae2f/MMap ".h"
43-
4442
${PROJECT_SOURCE_DIR}/Config/MMap.cmake.in inc
4543
${mmap-inc}
4644
)
4745

48-
ae2f_itll(${ae2f__MMap__TENT} ${ae2f__Core__FETCHED})
49-
ae2f_itll(${ae2f__MMap__TENT} ${ae2f__Macro__FETCHED})
46+
ae2f_itll(${ae2f__MMap__TENT} ae2f::Core)
47+
ae2f_itll(${ae2f__MMap__TENT} ae2f::Preproc)
5048
endif()
5149

5250
project(Ann VERSION 0.0.0 LANGUAGES C CXX)
53-
if(NOT TARGET ae2f::${PROJECT_NAME})
51+
if(NOT TARGET ae2f::Ann)
5452
file(GLOB Ann-inc ${PROJECT_SOURCE_DIR}/inc/ae2f/Ann/*.h)
5553

5654
ae2f_Macro_Lib_V(
@@ -66,79 +64,6 @@ if(NOT TARGET ae2f::${PROJECT_NAME})
6664
ae2f_CoreTestTent(${ae2f__Ann__TENT} "test/ann")
6765
endif()
6866

69-
if(ae2fCL_needed)
70-
project(CL-Ann VERSION 3.3.4 LANGUAGES C CXX)
71-
if(NOT TARGET ${PROJECT_NAME})
72-
ae2f_CoreLibFetchX(ae2f Ruler main)
73-
ae2f_CoreLibFetchX(ae2f Ann None)
74-
ae2f_CoreLibFetchX(ae2f Ann-H None)
75-
ae2f_CoreLibFetchX(ae2f Ann-H-Private None)
76-
find_package(OpenCL REQUIRED)
77-
78-
ae2f_CoreLibFetchX_NS(ae2f ae2fCL CL-Core Rel-v4.15.21)
79-
80-
ae2f_CoreLibTentConfigCustom(
81-
CL-Ann-H INTERFACE
82-
include ae2fCL
83-
${PROJECT_SOURCE_DIR}/Config/CL-Ann-H.cmake.in
84-
"include/ae2fCL/Ann.h"
85-
86-
"include/ae2fCL/Ann/Sp.h.cxx/Sp.hh"
87-
"include/ae2fCL/Ann/Sp.h.cxx/mSp.hh"
88-
"include/ae2fCL/Ann/Sp.h.cxx/imp.hh"
89-
"include/ae2fCL/Ann/Sp.h"
90-
91-
"include/ae2fCL/Ann/Slp.h.cxx/Slp.hh"
92-
"include/ae2fCL/Ann/Slp.h.cxx/mSlp.hh"
93-
"include/ae2fCL/Ann/Slp.h.cxx/imp.hh"
94-
"include/ae2fCL/Ann/Slp.h"
95-
)
96-
97-
ae2f_RulerMeasure(
98-
cl_mem
99-
${PROJECT_SOURCE_DIR}/src/cl/CLCode/Size/cl_mem.auto.h
100-
-I${OpenCL_INCLUDE_DIR}
101-
CL/cl.h
102-
)
103-
104-
ae2f_RulerMeasure(
105-
ae2f_float_t
106-
${PROJECT_SOURCE_DIR}/src/cl/CLCode/Size/ae2f_float_t.auto.h
107-
-I${PROJECT_SOURCE_DIR}/submod/ae2f/Core/include/ae2f
108-
Float.h
109-
)
110-
111-
ae2f_CoreLibTentConfigCustom(
112-
CL-Ann ${ae2f_LIBPREFIX}
113-
include ae2fCL
114-
${PROJECT_SOURCE_DIR}/Config/CL-Ann.cmake.in
115-
"src/cl/Ann.c"
116-
"src/cl/Sp.c"
117-
"src/cl/Slp.c"
118-
"src/cl/Mlp.c"
119-
"src/cl/CLCode/Size/ae2f_float_t.auto.h"
120-
"src/cl/CLCode/Size/cl_mem.auto.h"
121-
)
122-
target_link_libraries(CL-Ann-H INTERFACE ${ae2f__Ann-H__FETCHED})
123-
target_link_libraries(CL-Ann-H INTERFACE ${ae2f__ae2fCL__CL-Core__FETCHED})
124-
target_link_libraries(CL-Ann PUBLIC CL-Ann-H)
125-
target_link_libraries(CL-Ann PUBLIC ${ae2f__Ann-H-Private__FETCHED})
126-
target_link_libraries(CL-Ann PUBLIC ${ae2f__Ann__FETCHED})
127-
target_link_libraries(CL-Ann PUBLIC OpenCL::OpenCL)
128-
129-
ae2fCL_CoreAppendInclude(
130-
${PROJECT_SOURCE_DIR}/include
131-
${ae2f_ProjRoot}/submod/ae2f/Core/include
132-
${ae2f_ProjRoot}/submod/ae2f/CL-Core/include
133-
)
134-
message(${OpenCL_INCLUDE_DIR}/CL/cl.h)
135-
136-
ae2fCL_CoreAddConfProjTarDep(
137-
CL-Ann
138-
"${PROJECT_SOURCE_DIR}/src/cl/CLCode"
139-
)
140-
141-
ae2fCL_CoreTestTent(CL-Ann "test/cl-src")
142-
143-
endif()
67+
if(ae2fVK_needed)
68+
ae2f_CoreLibFetchX(ae2f VK-Core main)
14469
endif()

cmake/Core.cmake

Lines changed: 99 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ set(ae2f_BinRoot ${CMAKE_CURRENT_BINARY_DIR} CACHE STRING "Current Binary Root")
1111
set(ae2f_submod submod CACHE STRING submod)
1212

1313
if(ae2f_IS_SHARED)
14-
set(ae2f_LIBPREFIX SHARED CACHE STRING "SHARED")
14+
set(ae2f_LIBPREFIX SHARED CACHE STRING "SHARED")
1515
else()
16-
set(ae2f_LIBPREFIX STATIC CACHE STRING "STATIC")
16+
set(ae2f_LIBPREFIX STATIC CACHE STRING "STATIC")
1717
endif()
1818

1919
# @namespace ___DOC_CMAKE
@@ -36,24 +36,24 @@ endif()
3636
#
3737
# @see ___DOC_CMAKE::ae2f_TEST
3838
function(ae2f_CoreTestTent prm_LibName prm_TestSourcesDir)
39-
if(ae2f_TEST)
40-
if(ae2f_CXX)
41-
file(GLOB_RECURSE files "${prm_TestSourcesDir}/*")
42-
else()
43-
file(GLOB_RECURSE files "${prm_TestSourcesDir}/*.c")
44-
endif()
45-
list(LENGTH files list_length)
46-
47-
math(EXPR adjusted_length "${list_length} - 1")
39+
if(ae2f_TEST)
40+
if(ae2f_CXX)
41+
file(GLOB_RECURSE files "${prm_TestSourcesDir}/*")
42+
else()
43+
file(GLOB_RECURSE files "${prm_TestSourcesDir}/*.c")
44+
endif()
45+
list(LENGTH files list_length)
4846

49-
foreach(i RANGE 0 ${adjusted_length})
50-
list(GET files ${i} item)
51-
get_filename_component(__NAME ${item} NAME)
52-
add_executable("${prm_LibName}-Test-${__NAME}" ${item})
53-
target_link_libraries("${prm_LibName}-Test-${__NAME}" ${ARGN} ${prm_LibName})
54-
add_test(NAME "${prm_LibName}-Test-${__NAME}" COMMAND "${prm_LibName}-Test-${__NAME}")
55-
endforeach()
56-
endif()
47+
math(EXPR adjusted_length "${list_length} - 1")
48+
49+
foreach(i RANGE 0 ${adjusted_length})
50+
list(GET files ${i} item)
51+
get_filename_component(__NAME ${item} NAME)
52+
add_executable("${prm_LibName}-Test-${__NAME}" ${item})
53+
target_link_libraries("${prm_LibName}-Test-${__NAME}" ${ARGN} ${prm_LibName})
54+
add_test(NAME "${prm_LibName}-Test-${__NAME}" COMMAND "${prm_LibName}-Test-${__NAME}")
55+
endforeach()
56+
endif()
5757
endfunction()
5858

5959
# @brief
@@ -78,54 +78,54 @@ endfunction()
7878
# @param ...
7979
# The sources for the project.
8080
function(ae2f_CoreLibTentConfigCustom prm_TarName prm_TarPreFix prm_includeDir prm_namespace prm_configpath)
81-
# Namespace Package
82-
include(GNUInstallDirs)
81+
# Namespace Package
82+
include(GNUInstallDirs)
83+
84+
include_directories(${prm_includeDir})
85+
add_library(${prm_namespace}-${prm_TarName} ${prm_TarPreFix} ${ARGN})
86+
add_library(${prm_namespace}::${prm_TarName} ALIAS ${prm_namespace}-${prm_TarName})
87+
88+
if(${ae2f_nakedalais})
89+
add_library(${prm_TarName} ALIAS ${prm_namespace}-${prm_TarName})
90+
endif()
8391

84-
include_directories(${prm_includeDir})
85-
add_library(${prm_namespace}-${prm_TarName} ${prm_TarPreFix} ${ARGN})
86-
add_library(${prm_namespace}::${prm_TarName} ALIAS ${prm_namespace}-${prm_TarName})
92+
target_include_directories(
93+
${prm_namespace}-${prm_TarName} INTERFACE
94+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${prm_includeDir}/>
95+
$<INSTALL_INTERFACE:${prm_includeDir}/${prm_namespace}/>
96+
)
8797

88-
if(${ae2f_nakedalais})
89-
add_library(${prm_TarName} ALIAS ${prm_namespace}-${prm_TarName})
90-
endif()
98+
# Install Settings
99+
install(TARGETS ${prm_namespace}-${prm_TarName}
100+
EXPORT ${prm_namespace}-${prm_TarName}Targets
101+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
102+
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
91103

92-
target_include_directories(
93-
${prm_namespace}-${prm_TarName} INTERFACE
94-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${prm_includeDir}/>
95-
$<INSTALL_INTERFACE:${prm_includeDir}/${prm_namespace}/>
96-
)
104+
install(DIRECTORY ${prm_includeDir}/${prm_namespace}
105+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${prm_namespace}
106+
)
97107

98-
# Install Settings
99-
install(TARGETS ${prm_namespace}-${prm_TarName}
100-
EXPORT ${prm_namespace}-${prm_TarName}Targets
101-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
102-
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
103-
104-
install(DIRECTORY ${prm_includeDir}/${prm_namespace}
105-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${prm_namespace}
106-
)
108+
# Package
109+
install(EXPORT ${prm_namespace}-${prm_TarName}Targets
110+
FILE ${prm_namespace}-${prm_TarName}Targets.cmake
111+
NAMESPACE ae2f::
112+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/
113+
)
114+
115+
# Pack Conf
116+
include(CMakePackageConfigHelpers)
117+
configure_package_config_file(
118+
${prm_configpath}
119+
${CMAKE_CURRENT_BINARY_DIR}/${prm_namespace}-${prm_TarName}Config.cmake
120+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/
121+
)
107122

108-
# Package
109-
install(EXPORT ${prm_namespace}-${prm_TarName}Targets
110-
FILE ${prm_namespace}-${prm_TarName}Targets.cmake
111-
NAMESPACE ae2f::
112-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/
113-
)
114-
115-
# Pack Conf
116-
include(CMakePackageConfigHelpers)
117-
configure_package_config_file(
118-
${prm_configpath}
119-
${CMAKE_CURRENT_BINARY_DIR}/${prm_namespace}-${prm_TarName}Config.cmake
120-
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/
121-
)
122-
123-
install(FILES
124-
${CMAKE_CURRENT_BINARY_DIR}/${prm_namespace}-${prm_TarName}Config.cmake
125-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake
126-
)
123+
install(FILES
124+
${CMAKE_CURRENT_BINARY_DIR}/${prm_namespace}-${prm_TarName}Config.cmake
125+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake
126+
)
127127

128-
set(${prm_namespace}__${prm_TarName}__TENT ${prm_namespace}-${prm_TarName} CACHE STRING ${prm_namespace}-${prm_TarName})
128+
set(${prm_namespace}__${prm_TarName}__TENT ${prm_namespace}-${prm_TarName} CACHE STRING ${prm_namespace}-${prm_TarName})
129129
endfunction()
130130

131131
# @brief
@@ -146,14 +146,14 @@ endfunction()
146146
# @param ...
147147
# The sources for the project.
148148
function(ae2f_CoreLibTent prm_TarName prm_TarPreFix prm_includeDir prm_namespace)
149-
ae2f_CoreLibTentConfigCustom(
150-
${prm_TarName}
151-
${prm_TarPreFix}
152-
${prm_includeDir}
153-
${prm_namespace}
154-
${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
155-
${ARGN}
156-
)
149+
ae2f_CoreLibTentConfigCustom(
150+
${prm_TarName}
151+
${prm_TarPreFix}
152+
${prm_includeDir}
153+
${prm_namespace}
154+
${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
155+
${ARGN}
156+
)
157157
endfunction()
158158

159159
# @brief
@@ -175,43 +175,43 @@ endfunction()
175175
# @see ___DOC_CMAKE::ae2f_CoreLibTent
176176
# @see ___DOC_CMAKE::ae2f_DOC
177177
function(ae2f_CoreUtilityDocTent prm_TarName prm_includeDir prm_namespace)
178-
if(ae2f_DOC)
179-
file(GLOB_RECURSE src ${prm_includeDir} "*.cmake.hpp")
180-
ae2f_CoreLibTent(${prm_TarName}-CMakeDoc INTERFACE ${prm_includeDir} ${prm_namespace}doc ${src})
181-
foreach(lib ${ARGN})
182-
target_link_libraries(${prm_TarName}-CMakeDoc INTERFACE ${lib}-CMakeDoc)
183-
endforeach()
184-
endif()
178+
if(ae2f_DOC)
179+
file(GLOB_RECURSE src ${prm_includeDir} "*.cmake.hpp")
180+
ae2f_CoreLibTent(${prm_TarName}-CMakeDoc INTERFACE ${prm_includeDir} ${prm_namespace}doc ${src})
181+
foreach(lib ${ARGN})
182+
target_link_libraries(${prm_TarName}-CMakeDoc INTERFACE ${lib}-CMakeDoc)
183+
endforeach()
184+
endif()
185185
endfunction()
186186

187187
# Domain name customization.
188188
function(ae2f_CoreLibFetch_DNS prm_AuthorName prm_namespace prm_TarName prm_TagName prm_Domain)
189-
if(NOT TARGET ${prm_TarName})
190-
if(NOT EXISTS ${ae2f_ProjRoot}/${ae2f_submod}/${prm_AuthorName}/${prm_TarName}/CMakeLists.txt)
191-
execute_process(
192-
COMMAND
193-
git clone
194-
https://${prm_Domain}/${prm_AuthorName}/${prm_TarName}
195-
${ae2f_ProjRoot}/${ae2f_submod}/${prm_AuthorName}/${prm_TarName}
196-
--branch ${prm_TagName} ${ARGN}
197-
RESULT_VARIABLE result
198-
)
189+
if(NOT TARGET ${prm_namespace}::${prm_TarName})
190+
if(NOT EXISTS ${ae2f_ProjRoot}/${ae2f_submod}/${prm_AuthorName}/${prm_TarName}/CMakeLists.txt)
191+
execute_process(
192+
COMMAND
193+
git clone
194+
https://${prm_Domain}/${prm_AuthorName}/${prm_TarName}
195+
${ae2f_ProjRoot}/${ae2f_submod}/${prm_AuthorName}/${prm_TarName}
196+
--branch ${prm_TagName} ${ARGN}
197+
RESULT_VARIABLE result
198+
)
199199

200-
if(result)
201-
message(FATAL_ERROR "Fetching ${prm_AuthorName}/${prm_TarName} from Github Failed.")
202-
endif()
203-
endif()
200+
if(result)
201+
message(FATAL_ERROR "Fetching ${prm_AuthorName}/${prm_TarName} from Github Failed.")
202+
endif()
203+
endif()
204204

205-
add_subdirectory(
206-
${ae2f_ProjRoot}/${ae2f_submod}/${prm_AuthorName}/${prm_TarName}
207-
${ae2f_BinRoot}/${ae2f_submod}/${prm_AuthorName}/${prm_TarName}
208-
)
209-
endif()
205+
add_subdirectory(
206+
${ae2f_ProjRoot}/${ae2f_submod}/${prm_AuthorName}/${prm_TarName}
207+
${ae2f_BinRoot}/${ae2f_submod}/${prm_AuthorName}/${prm_TarName}
208+
)
209+
endif()
210210

211-
set(
212-
${prm_AuthorName}__${prm_namespace}__${prm_TarName}__FETCHED
213-
${prm_namespace}::${prm_TarName} CACHE STRING ${prm_namespace}::${prm_TarName}
214-
)
211+
set(
212+
${prm_AuthorName}__${prm_namespace}__${prm_TarName}__FETCHED
213+
${prm_namespace}::${prm_TarName} CACHE STRING ${prm_namespace}::${prm_TarName}
214+
)
215215

216216
endfunction()
217217

inc/ae2f/Ann/Util.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@
88
#define ae2f_AnnUtilPtr2Name(A_t, B_t) \
99
ae2f_AnnUtilPtr__##A_t##B_t
1010

11+
#define ae2f_AnnUtilV2Name(A_t, B_t) \
12+
ae2f_AnnUtilV2Name__##A_t##B_t
1113

12-
#define ae2f_AnnUtilPtr2(A_t, B_t) \
14+
#define ae2f_AnnUtilV2(A_LEFT, A_t, A_POST, B_LEFT, B_t, B_POST) \
15+
ae2f_structdef(union, ae2f_AnnUtilV2Name(A_t, B_t)) \
16+
{ A_LEFT A_t A_POST a; B_LEFT B_t B_POST b; }
17+
18+
#define ae2f_AnnUtilPtr2(A_t, B_t, ...) \
1319
ae2f_structdef(union, ae2f_AnnUtilPtr2Name(A_t, B_t)) \
1420
{ A_t* a; B_t* b; }
1521

0 commit comments

Comments
 (0)