fxos/CMakeLists.txt

111 lines
2.9 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(fxos LANGUAGES C CXX)
find_package(FLEX 2.6)
add_compile_options(
-Wall -Wextra -D_GNU_SOURCE
$<$<COMPILE_LANGUAGE:CXX>:-std=c++20>
-fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}/=
$<$<CONFIG:Debug>:-O0> $<$<CONFIG:Debug>:-g>
$<$<CONFIG:Release>:-O2>)
# Diagnostic options to clean up output a little bit
if(FXOS_CLEAN_LOGS)
add_compile_options(
-fdiagnostics-urls=never -fno-diagnostics-show-caret
-fdiagnostics-color=always -fno-diagnostics-show-labels -fno-show-column)
# Filter the compiler output through a filter script
file(WRITE "${PROJECT_BINARY_DIR}/compiler_filter.sh" "\
set -e \n\
set -o pipefail \n\
\"$@\" |& sed 's#${PROJECT_SOURCE_DIR}/##g' \n\
")
file(CHMOD "${PROJECT_BINARY_DIR}/compiler_filter.sh"
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE
"${PROJECT_BINARY_DIR}/compiler_filter.sh")
endif()
#---
# fxos core
#---
flex_target(LoadAsm lib/load-asm.l
"${CMAKE_CURRENT_BINARY_DIR}/load-asm.yy.cpp" COMPILE_FLAGS -s)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/FxOS_SyscallDefs_FX.c"
COMMAND xxd -i -n FxOS_SyscallDefs_FX
"${CMAKE_CURRENT_SOURCE_DIR}/lib/syscalls_fx.def" >
"${CMAKE_CURRENT_BINARY_DIR}/FxOS_SyscallDefs_FX.c"
DEPENDS lib/syscalls_fx.def)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/FxOS_SyscallDefs_CG.c"
COMMAND xxd -i -n FxOS_SyscallDefs_CG
"${CMAKE_CURRENT_SOURCE_DIR}/lib/syscalls_cg.def" >
"${CMAKE_CURRENT_BINARY_DIR}/FxOS_SyscallDefs_CG.c"
DEPENDS lib/syscalls_cg.def)
set(fxos_core_SOURCES
lib/analysis.cpp
lib/binary.cpp
lib/disassembly.cpp
lib/lang.cpp
lib/function.cpp
lib/memory.cpp
lib/os.cpp
lib/passes/pcrel.cpp
lib/passes/syscall.cpp
lib/project.cpp
lib/semantics.cpp
lib/view/assembly.cpp
lib/vspace.cpp
"${CMAKE_CURRENT_BINARY_DIR}/FxOS_SyscallDefs_FX.c"
"${CMAKE_CURRENT_BINARY_DIR}/FxOS_SyscallDefs_CG.c"
lib/ai/RelConst.cpp
lib/util/bson.cpp
lib/util/Buffer.cpp
lib/util/log.cpp
lib/util/Timer.cpp)
add_library(fxos-core ${fxos_core_SOURCES} ${FLEX_LoadAsm_OUTPUTS})
target_include_directories(fxos-core PUBLIC include)
#---
# fxos shell
#---
flex_target(Lexer shell/lexer.l
"${CMAKE_CURRENT_BINARY_DIR}/lexer.yy.cpp" COMPILE_FLAGS -s)
set(fxos_shell_SOURCES
shell/main.cpp
shell/legacy.cpp
shell/parser.cpp
shell/session.cpp
shell/theme.cpp
shell/dot.cpp
shell/a.cpp
shell/b.cpp
shell/d.cpp
shell/e.cpp
shell/h.cpp
shell/i.cpp
shell/p.cpp
shell/s.cpp
${FLEX_Lexer_OUTPUTS}
)
add_executable(fxos ${fxos_shell_SOURCES})
target_include_directories(fxos PRIVATE shell)
target_link_libraries(fxos fxos-core -lreadline -lfmt)
#---
# Install
#---
install(TARGETS fxos DESTINATION "${CMAKE_INSTALL_BINDIR}")