build: add cmake as build system

This commit is contained in:
xinyangli 2024-03-25 16:49:08 +08:00
parent bb725d6f82
commit 2f559823a6
Signed by: xin
SSH key fingerprint: SHA256:qZ/tzd8lYRtUFSrfBDBMcUqV4GHKxqeqRA3huItgvbk
4 changed files with 73 additions and 1 deletions

16
CMakeLists.txt Normal file
View file

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.22)
project(am-kernels)
set(CMAKE_C_STANDARD 11)
enable_language(C ASM)
include(CheckPIESupported)
check_pie_supported()
if(${PLATFORM} MATCHES "native")
set(ARCH "native")
else()
set(ARCH ${ISA}-${PLATFORM})
endif()
add_subdirectory(tests/cpu-tests)

View file

@ -0,0 +1,3 @@
include_directories(include)
add_subdirectory(tests)

View file

@ -15,7 +15,7 @@ all: $(addprefix Makefile., $(ALL))
$(ALL): %: Makefile.% $(ALL): %: Makefile.%
Makefile.%: tests/%.c latest Makefile.%: tests/%.c latest
@/bin/echo -e "NAME = $*\nSRCS = $<\ninclude $${AM_HOME}/Makefile" > $@ @echo -e "NAME = $*\nSRCS = $<\ninclude $${AM_HOME}/Makefile" > $@
@if make -s -f $@ ARCH=$(ARCH) $(MAKECMDGOALS); then \ @if make -s -f $@ ARCH=$(ARCH) $(MAKECMDGOALS); then \
printf "[%14s] $(COLOR_GREEN)PASS$(COLOR_NONE)\n" $* >> $(RESULT); \ printf "[%14s] $(COLOR_GREEN)PASS$(COLOR_NONE)\n" $* >> $(RESULT); \
else \ else \

View file

@ -0,0 +1,53 @@
find_package(am-${ARCH})
find_package(klib)
set(SOURCES
add.c
add-longlong.c
bit.c
bubble-sort.c
crc32.c
div.c
dummy.c
fact.c
fib.c
goldbach.c
hello-str.c
if-else.c
leap-year.c
load-store.c
matrix-mul.c
max.c
mersenne.c
min3.c
mov-c.c
movsx.c
mul-longlong.c
pascal.c
prime.c
quick-sort.c
recursion.c
select-sort.c
shift.c
shuixianhua.c
string.c
sub-longlong.c
sum.c
switch.c
to-lower-case.c
unalign.c
wanshu.c)
foreach(SOURCE IN LISTS SOURCES)
get_filename_component(SOURCE_NAME ${SOURCE} NAME_WLE)
add_executable(${SOURCE_NAME}
${SOURCE})
target_link_libraries(${SOURCE_NAME} PRIVATE am-${ARCH})
# -- Extract binary file from ELF
add_custom_command(TARGET ${SOURCE_NAME}
COMMAND ${CMAKE_OBJCOPY} ARGS -S --set-section-flags .bss=alloc,contents -O binary ${SOURCE_NAME} ${SOURCE_NAME}.bin)
install(TARGETS ${SOURCE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_DATADIR}/elf)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_NAME}.bin DESTINATION ${CMAKE_INSTALL_DATADIR}/binary)
endforeach()