cmake_minimum_required(VERSION 3.16) project(fxos LANGUAGES C CXX) find_package(FLEX 2.6) add_compile_options( -Wall -Wextra -D_GNU_SOURCE $<$:-std=c++20> -fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}/= $<$:-O0> $<$:-g> $<$:-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}")