build: build am for multiple platform in parallel
This commit is contained in:
parent
6ab5d4c156
commit
a54c0d6480
19 changed files with 206 additions and 146 deletions
|
@ -1,10 +1,26 @@
|
|||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||
|
||||
add_library(am_interface INTERFACE)
|
||||
target_include_directories(am_interface INTERFACE
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include/abstract-machine>)
|
||||
|
||||
add_subdirectory(src)
|
||||
|
||||
install(DIRECTORY include/ DESTINATION include/abstract-machine)
|
||||
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/abstract-machine)
|
||||
|
||||
foreach(PLATFORM IN LISTS PLATFORMS)
|
||||
if(ISA MATCHES "native")
|
||||
set(ARCH "native")
|
||||
else()
|
||||
set(ARCH ${ISA}-${PLATFORM})
|
||||
endif()
|
||||
install(TARGETS am-${ARCH}
|
||||
EXPORT amTargets-${ARCH}
|
||||
LIBRARY DESTINATION lib)
|
||||
|
||||
install(EXPORT amTargets-${ARCH}
|
||||
FILE amTargets.cmake
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH})
|
||||
|
||||
configure_package_config_file(
|
||||
${CMAKE_SOURCE_DIR}/cmake/am-config.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/am-${ARCH}-config.cmake
|
||||
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH})
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/am-${ARCH}-config.cmake
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH})
|
||||
endforeach()
|
||||
|
|
|
@ -1,53 +1 @@
|
|||
if(ISA MATCHES "native")
|
||||
set(SOURCEDIR "./${PLATFORM}")
|
||||
else()
|
||||
set(SOURCEDIR "./${ISA}/${PLATFORM}")
|
||||
endif()
|
||||
|
||||
add_subdirectory(${SOURCEDIR})
|
||||
|
||||
target_include_directories(am-${ARCH}
|
||||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
|
||||
$<INSTALL_INTERFACE:include/abstract-machine>)
|
||||
target_link_libraries(am-${ARCH}
|
||||
PUBLIC klib_interface
|
||||
INTERFACE m)
|
||||
|
||||
# TODO: Check
|
||||
target_link_options(am-${ARCH} INTERFACE
|
||||
$<BUILD_INTERFACE:-T${CMAKE_SOURCE_DIR}/scripts/${LINKER_SCRIPT}>
|
||||
$<INSTALL_INTERFACE:-T${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH}/${LINKER_SCRIPT}>)
|
||||
|
||||
# Interface compile flags
|
||||
target_link_options(am-${ARCH} INTERFACE
|
||||
-znoexecstack)
|
||||
|
||||
target_compile_options(am-${ARCH} INTERFACE
|
||||
-fno-asynchronous-unwind-tables
|
||||
-fno-builtin
|
||||
-fno-stack-protector
|
||||
-U_FORTIFY_SOURCE
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-ffreestanding>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>)
|
||||
|
||||
install(TARGETS am-${ARCH} klib_interface am_interface
|
||||
EXPORT amTargets
|
||||
LIBRARY DESTINATION lib)
|
||||
|
||||
install(EXPORT amTargets
|
||||
FILE amTargets.cmake
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH})
|
||||
|
||||
configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake/am-config.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/am-${ARCH}-config.cmake
|
||||
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH})
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/am-${ARCH}-config.cmake
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH})
|
||||
|
||||
# TODO: check
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/scripts/${LINKER_SCRIPT}
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH})
|
||||
add_subdirectory(${ISA})
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
include(CheckPIESupported)
|
||||
check_pie_supported()
|
||||
|
||||
set(SOURCES
|
||||
trap.S
|
||||
cte.c
|
||||
|
@ -23,4 +20,4 @@ set_target_properties(am-native PROPERTIES
|
|||
INTERFACE_POSITION_INDEPENDENT_CODE TRUE)
|
||||
|
||||
find_package(SDL2 REQUIRED)
|
||||
target_link_libraries(am-${ARCH} PUBLIC SDL2::SDL2)
|
||||
target_link_libraries(am-native PUBLIC SDL2::SDL2 PRIVATE klib_interface am_interface)
|
||||
|
|
12
abstract-machine/am/src/riscv/CMakeLists.txt
Normal file
12
abstract-machine/am/src/riscv/CMakeLists.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
foreach(PLATFORM IN LISTS PLATFORMS)
|
||||
string(TOUPPER ${ARCH} ARCH_UPPER)
|
||||
set(AM_COMMON_COMPILE_DEF
|
||||
# -- Arch related
|
||||
$<MAKE_C_IDENTIFIER:__ARCH_${ARCH_UPPER}__>
|
||||
__ISA_${ISA_UPPER}__
|
||||
__PLATFORM_${PLATFORM_UPPER}__
|
||||
|
||||
$<$<BOOL:${NATIVE_USE_KLIB}>:__NATIVE_USE_KLIB__>
|
||||
)
|
||||
add_subdirectory(${PLATFORM})
|
||||
endforeach()
|
|
@ -1,7 +1,7 @@
|
|||
include(nemu-settings)
|
||||
include(riscv-settings)
|
||||
|
||||
add_library(am-${ISA}-nemu
|
||||
add_library(am-riscv-nemu
|
||||
cte.c
|
||||
start.S
|
||||
trap.S
|
||||
|
@ -9,26 +9,44 @@ add_library(am-${ISA}-nemu
|
|||
${NEMU_SOURCES}
|
||||
)
|
||||
|
||||
target_compile_options(am-${ISA}-nemu PRIVATE
|
||||
target_compile_options(am-riscv-nemu PRIVATE
|
||||
${NEMU_COMPILE_OPTIONS}
|
||||
${RISCV_COMPILE_OPTIONS})
|
||||
target_link_options(am-${ISA}-nemu PRIVATE
|
||||
|
||||
target_link_options(am-riscv-nemu PRIVATE
|
||||
${NEMU_LINK_OPITIONS}
|
||||
${RISCV_LINK_OPTIONS})
|
||||
target_include_directories(am-${ISA}-nemu PRIVATE
|
||||
|
||||
target_include_directories(am-riscv-nemu PRIVATE
|
||||
${NEMU_INCLUDE_DIRECTORIES})
|
||||
target_link_options(am-${ISA}-nemu INTERFACE
|
||||
|
||||
target_link_options(am-riscv-nemu INTERFACE
|
||||
LINKER:--defsym=_pmem_start=0x80000000
|
||||
LINKER:--defsym=_entry_offset=0x0
|
||||
LINKER:--gc-sections
|
||||
LINKER:-e _start
|
||||
-nostartfiles)
|
||||
|
||||
target_compile_definitions(am-${ISA}-nemu PUBLIC
|
||||
ARCH_H="arch/riscv.h")
|
||||
target_compile_definitions(am-${ISA}-nemu PRIVATE
|
||||
ISA_H="riscv/riscv.h")
|
||||
target_link_options(am-riscv-nemu INTERFACE
|
||||
$<BUILD_INTERFACE:-T${CMAKE_SOURCE_DIR}/scripts/linker.ld>
|
||||
$<INSTALL_INTERFACE:-T${CMAKE_INSTALL_FULL_DATADIR}/linker.ld>)
|
||||
|
||||
set_target_properties(am-${ISA}-nemu PROPERTIES
|
||||
target_include_directories(am-riscv-nemu
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/am/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/abstract-machine>)
|
||||
|
||||
target_link_libraries(am-riscv-nemu
|
||||
PUBLIC am_interface klib_interface
|
||||
INTERFACE m)
|
||||
|
||||
target_compile_definitions(am-riscv-nemu PRIVATE
|
||||
ISA_H=<riscv/riscv.h>)
|
||||
|
||||
set_target_properties(am-riscv-nemu PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE OFF
|
||||
INTERFACE_POSITION_INDEPENDENT_CODE OFF)
|
||||
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/scripts/linker.ld
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR})
|
||||
|
||||
|
|
39
abstract-machine/am/src/riscv/npc/CMakeLists.txt
Normal file
39
abstract-machine/am/src/riscv/npc/CMakeLists.txt
Normal file
|
@ -0,0 +1,39 @@
|
|||
include(riscv-settings)
|
||||
|
||||
add_subdirectory(libgcc)
|
||||
|
||||
add_library(am-riscv-npc
|
||||
cte.c
|
||||
input.c
|
||||
ioe.c
|
||||
mpe.c
|
||||
start.S
|
||||
timer.c
|
||||
trap.S
|
||||
trm.c
|
||||
vme.c
|
||||
)
|
||||
|
||||
target_link_libraries(am-riscv-npc PRIVATE npcgcc PUBLIC am_interface klib_interface)
|
||||
|
||||
target_link_options(am-riscv-npc INTERFACE
|
||||
$<BUILD_INTERFACE:-T${CMAKE_SOURCE_DIR}/scripts/linker.ld>
|
||||
$<INSTALL_INTERFACE:-T${CMAKE_INSTALL_FULL_DATADIR}/linker.ld>)
|
||||
|
||||
target_link_options(am-riscv-npc INTERFACE
|
||||
LINKER:--defsym=_pmem_start=0x80000000
|
||||
LINKER:--defsym=_entry_offset=0x0
|
||||
LINKER:--gc-sections
|
||||
LINKER:-e _start
|
||||
-nostartfiles)
|
||||
|
||||
target_link_options(am-riscv-npc INTERFACE
|
||||
$<BUILD_INTERFACE:-T${CMAKE_SOURCE_DIR}/scripts/linker.ld>
|
||||
$<INSTALL_INTERFACE:-T${CMAKE_INSTALL_FULL_DATADIR}/linker.ld>)
|
||||
|
||||
target_compile_definitions(am-riscv-npc
|
||||
PUBLIC ${AM_COMMON_COMPILE_DEF} ARCH_H=<arch/riscv.h>
|
||||
)
|
||||
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/scripts/linker.ld
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR})
|
14
abstract-machine/am/src/riscv/npc/libgcc/CMakeLists.txt
Normal file
14
abstract-machine/am/src/riscv/npc/libgcc/CMakeLists.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
add_library(npcgcc
|
||||
ashldi3.c
|
||||
div.S
|
||||
muldi3.S
|
||||
multi3.c
|
||||
unused.c
|
||||
)
|
||||
|
||||
target_link_libraries(npcgcc PRIVATE klib_interface am_interface)
|
||||
target_link_options(npcgcc INTERFACE -nolibc -nostdlib)
|
||||
|
||||
install(TARGETS npcgcc
|
||||
EXPORT amTargets-riscv-npc
|
||||
LIBRARY DESTINATION lib)
|
|
@ -6,7 +6,7 @@ int main(const char *args);
|
|||
|
||||
extern char _pmem_start;
|
||||
#define PMEM_SIZE (128 * 1024 * 1024)
|
||||
#define PMEM_END ((uintptr_t)&_pmem_start + PMEM_SIZE)
|
||||
#define PMEM_END ((uintptr_t)&_pmem_start + PMEM_SIZE)
|
||||
|
||||
Area heap = RANGE(&_heap_start, PMEM_END);
|
||||
#ifndef MAINARGS
|
||||
|
@ -14,11 +14,12 @@ Area heap = RANGE(&_heap_start, PMEM_END);
|
|||
#endif
|
||||
static const char mainargs[] = MAINARGS;
|
||||
|
||||
void putch(char ch) {
|
||||
}
|
||||
void putch(char ch) {}
|
||||
|
||||
void halt(int code) {
|
||||
while (1);
|
||||
asm volatile("mv a0, %0; ebreak" : : "r"(code));
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
|
||||
void _trm_init() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue