Skip to content

Commit

Permalink
vali: updates to cmake, add install targets
Browse files Browse the repository at this point in the history
  • Loading branch information
Meulengracht committed Jun 24, 2020
1 parent 3867064 commit c71b068
Show file tree
Hide file tree
Showing 21 changed files with 230 additions and 94 deletions.
75 changes: 63 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
cmake_minimum_required (VERSION 3.8.2)

# Enable the system image switch
set (VALI_BUILD ON)
set (VALI_BOOTSTRAP ON)

include (cmake/SetupEnvironment.cmake)
project (ValiOS)

# Setup options and defaults
option (VALI_ENABLE_KERNEL_TRACE "Enable debug tracing in the kernel" ON)
option (VALI_ENABLE_SMP "Enable multicore support in the kernel" ON)
Expand All @@ -19,24 +26,37 @@ set (VALI_ARCH "i386" CACHE STRING "Platform architecture to build Vali for")
set_property (CACHE VALI_ARCH PROPERTY STRINGS i386 amd64)
set (ENV{VALI_ARCH} ${VALI_ARCH})

# Enable the system image switch
set (VALI_BUILD ON)
set (VALI_BOOTSTRAP ON)

# Initialize project
include (cmake/SetupEnvironment.cmake)
project (ValiOS)

# Set paths
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set (VALI_PATH_DEPLOY ${CMAKE_BINARY_DIR}/deploy)
set (VALI_PATH_INITRD ${CMAKE_BINARY_DIR}/initrd)
set (VALI_PATH_DEPLOY ${CMAKE_BINARY_DIR}/deploy)
set (VALI_PATH_DEPLOY_HDD ${CMAKE_BINARY_DIR}/deploy/hdd)
set (VALI_PATH_DEPLOY_SYSTEM ${CMAKE_BINARY_DIR}/deploy/hdd/system)
set (VALI_PATH_DEPLOY_SHARED ${CMAKE_BINARY_DIR}/deploy/hdd/shared)
set (VALI_PATH_DEPLOY_SHARED_BIN ${CMAKE_BINARY_DIR}/deploy/hdd/shared/bin)
set (VALI_PATH_DEPLOY_SHARED_LIB ${CMAKE_BINARY_DIR}/deploy/hdd/shared/lib)
set (VALI_PATH_INITRD ${CMAKE_BINARY_DIR}/initrd)
set (VALI_PATH_APPLICATIONS ${CMAKE_BINARY_DIR}/apps)

if (DEFINED ENV{VALI_APPLICATION_PATH})
set (VALI_PATH_APPLICATIONS $ENV{VALI_APPLICATION_PATH})
endif ()

# Setup tools
set (TOOL_RD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/rd)
set (TOOL_LZ ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lzss)
set (TOOL_DU ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/diskutility)

# Create neccessary directories
file(MAKE_DIRECTORY ${VALI_PATH_DEPLOY})
file(MAKE_DIRECTORY ${VALI_PATH_INITRD})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_HDD})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SYSTEM})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_BIN})
file (MAKE_DIRECTORY ${VALI_PATH_DEPLOY_SHARED_LIB})
file (MAKE_DIRECTORY ${VALI_PATH_INITRD})
file (MAKE_DIRECTORY ${VALI_PATH_APPLICATIONS})

# Run early build initialization that require host compiler
include (ExternalProject)
Expand Down Expand Up @@ -71,3 +91,34 @@ add_subdirectory (modules)

# Build tests
add_subdirectory (tests)

# Installation and utility targets
add_custom_target (install_applications
COMMAND ${CMAKE_COMMAND} -E copy ${VALI_PATH_APPLICATIONS}/*.app ${VALI_PATH_DEPLOY_SHARED_BIN}
COMMAND ${CMAKE_COMMAND} -E copy ${VALI_PATH_APPLICATIONS}/*.dll ${VALI_PATH_DEPLOY_SHARED_BIN}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)

add_custom_target (install_prepare
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/resources/ ${VALI_PATH_DEPLOY_HDD}
COMMAND ${TOOL_RD} --arch ${VALI_ARCH} --directory ${VALI_PATH_INITRD} --out ${CMAKE_BINARY_DIR}/initrd.mos
COMMAND ${TOOL_LZ} c ${CMAKE_BINARY_DIR}/initrd.mos ${VALI_PATH_DEPLOY_SYS}/initrd.mos
COMMAND ${TOOL_LZ} c ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/syskrnl.mos ${VALI_PATH_DEPLOY_SYS}/syskrnl.mos
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/*.dll ${VALI_PATH_DEPLOY_SHARED_BIN}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/*.lib ${VALI_PATH_DEPLOY_SHARED_LIB}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS tools
)

add_custom_target (install_img
COMMAND mono ${TOOL_DU} -auto -target img -scheme mbr
COMMAND ${CMAKE_COMMAND} -E copy mollenos.img mollenos_usb.img
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS install_prepare install_applications
)

add_custom_target (install_vmdk
COMMAND mono ${TOOL_DU} -auto -target vmdk -scheme mbr
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS install_prepare install_applications
)
12 changes: 6 additions & 6 deletions boot/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,23 @@ endif ()
add_custom_target(stage1 ALL DEPENDS stage1.sys)
add_custom_command(OUTPUT stage1.sys POST_BUILD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND nasm -f bin ${CMAKE_ASM_NASM_FLAGS} -o ${VALI_PATH_DEPLOY}/stage1.sys ${SRCS}
COMMENT "Compiling bootloader (stage1)"
COMMAND nasm -f bin ${CMAKE_ASM_NASM_FLAGS} -o ${VALI_PATH_DEPLOY}/stage1.sys ${SRCS}
COMMENT "Compiling bootloader (stage1)"
DEPENDS ${SRCS}
)

add_custom_target(stage2 ALL DEPENDS stage2.sys)
add_custom_command(OUTPUT stage2.sys POST_BUILD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/stage2
COMMAND nasm -f bin ${CMAKE_ASM_NASM_FLAGS} -o ${VALI_PATH_DEPLOY}/stage2.sys stage2.asm
COMMENT "Compiling bootloader (stage2)"
COMMAND nasm -f bin ${CMAKE_ASM_NASM_FLAGS} -o ${VALI_PATH_DEPLOY}/stage2.sys stage2.asm
COMMENT "Compiling bootloader (stage2)"
DEPENDS stage2/stage2.asm
)

add_custom_target(ap ALL DEPENDS ap.sys)
add_custom_command(OUTPUT ap.sys POST_BUILD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/stage2
COMMAND nasm -f bin -DTRAMPOLINE_LOCATION=0x8000 ${CMAKE_ASM_NASM_FLAGS} -o ${VALI_PATH_DEPLOY}/ap.sys ap.asm
COMMENT "Compiling trampoline code"
COMMAND nasm -f bin -DTRAMPOLINE_LOCATION=0x8000 ${CMAKE_ASM_NASM_FLAGS} -o ${VALI_PATH_DEPLOY}/ap.sys ap.asm
COMMENT "Compiling trampoline code"
DEPENDS stage2/ap.asm
)
19 changes: 17 additions & 2 deletions cmake/SetupEnvironment.cmake
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
# Make sure all the proper env are set
set(CMAKE_SYSTEM_NAME vali-cross)
set(VERBOSE 1)
set (CMAKE_SYSTEM_NAME vali-cross)
set (VERBOSE 1)

if(NOT DEFINED ENV{CROSS})
message(FATAL_ERROR "CROSS environmental variable must point to a clang cross-compiler for Vali")
endif()

set (CMAKE_CROSSCOMPILING ON CACHE BOOL "")
set (CMAKE_C_COMPILER "$ENV{CROSS}/bin/clang" CACHE FILEPATH "")
set (CMAKE_CXX_COMPILER "$ENV{CROSS}/bin/clang++" CACHE FILEPATH "")
set (CMAKE_LINKER "$ENV{CROSS}/bin/lld-link" CACHE FILEPATH "")
set (CMAKE_AR "$ENV{CROSS}/bin/llvm-ar" CACHE FILEPATH "")
set (CMAKE_RANLIB "$ENV{CROSS}/bin/llvm-ranlib" CACHE FILEPATH "")
if (VALI_BOOTSTRAP)
set (CMAKE_C_COMPILER_WORKS 1)
set (CMAKE_CXX_COMPILER_WORKS 1)
endif ()

# Setup shared compile flags to make compilation succeed
# -Xclang -flto-visibility-public-std
Expand Down
1 change: 0 additions & 1 deletion kernel/arch/x86/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,3 @@ add_library(vali-platform STATIC
)

add_dependencies (vali-platform vali-${VALI_ARCH})
install(TARGETS vali-platform LIBRARY DESTINATION lib)
1 change: 0 additions & 1 deletion kernel/arch/x86/x32/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,3 @@ add_library(vali-i386
memory/vmem_api.c
memory/vmem_boot.c
)
install(TARGETS vali-i386 LIBRARY DESTINATION lib)
1 change: 0 additions & 1 deletion kernel/arch/x86/x64/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,3 @@ add_library(vali-amd64 STATIC
memory/vmem_api.c
memory/vmem_boot.c
)
install(TARGETS vali-amd64 LIBRARY DESTINATION lib)
8 changes: 7 additions & 1 deletion librt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,20 @@ ExternalProject_Add(compiler-rt
)

LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/lib/vali-cross)
install(DIRECTORY include/ DESTINATION include/vali-sdk)

# Runetime libraries
# Runtime libraries
add_subdirectory (libcrt)
add_subdirectory (libds)
add_subdirectory (libddk)

merge_libraries (librt libcrt ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/vali-cross/${VALI_COMPILER_RT_TARGET})
add_dependencies (librt compiler-rt)
install (TARGETS librt
ARCHIVE DESTINATION lib/vali-sdk
LIBRARY DESTINATION lib/vali-sdk
RUNTIME DESTINATION bin/vali-sdk
)

# Libraries used by building of everything
add_subdirectory (libacpi)
Expand Down
2 changes: 1 addition & 1 deletion librt/libacpi
Submodule libacpi updated 1 files
+0 −1 CMakeLists.txt
18 changes: 14 additions & 4 deletions librt/libc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,6 @@ add_library(libk STATIC ${ASM_SOURCES} ${SOURCES_LIBK})
target_compile_options(libk
PRIVATE $<$<COMPILE_LANGUAGE:C>:-mno-sse ${MATH_FLAGS} -D__OSLIB_C_IMPLEMENTATION -DLIBC_KERNEL -D__LIBDS_KERNEL__ -D_KRNL_DLL>
)
install(TARGETS libk LIBRARY DESTINATION lib)

add_library(c SHARED ${ASM_SOURCES} ${SOURCES_LIBC})
target_compile_options(c
Expand All @@ -503,7 +502,18 @@ set_target_properties(c
)
target_link_libraries (c libgracht libds libddk libm librt)
install(TARGETS c
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib/vali-sdk
LIBRARY DESTINATION lib/vali-sdk
RUNTIME DESTINATION bin/vali-sdk
)
install(DIRECTORY include/ DESTINATION include/vali-sdk
FILES_MATCHING
PATTERN "*.h"
PATTERN "internal" EXCLUDE
)

if (DEFINED VALI_PATH_INITRD)
add_custom_command (TARGET c POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:c> ${VALI_PATH_INITRD}
)
endif ()
6 changes: 5 additions & 1 deletion librt/libcrt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,8 @@ add_library(libcrt
)
add_dependencies(libcrt libddk)

install(TARGETS libcrt LIBRARY DESTINATION lib)
install(TARGETS libcrt
ARCHIVE DESTINATION lib/vali-sdk
LIBRARY DESTINATION lib/vali-sdk
RUNTIME DESTINATION bin/vali-sdk
)
8 changes: 7 additions & 1 deletion librt/libddk/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,10 @@ add_library(libddk
usb.c
utils.c
)
install(TARGETS libddk LIBRARY DESTINATION lib)
install(TARGETS libddk
ARCHIVE DESTINATION lib/vali-ddk
LIBRARY DESTINATION lib/vali-ddk
RUNTIME DESTINATION bin/vali-ddk
)
install(DIRECTORY include/ DESTINATION include/vali-ddk)
install(DIRECTORY ../../protocols/ DESTINATION share/vali/protocols)
8 changes: 6 additions & 2 deletions librt/libds/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,12 @@ set (SHARED_SOURCES
add_library(libdsk ${SHARED_SOURCES} support/dsk.c)
set_target_properties(libdsk PROPERTIES COMPILE_FLAGS -mno-sse -D__LIBDS_KERNEL__ -D_KRNL_DLL)
target_include_directories(libdsk PUBLIC ${SHARED_INCLUDES} ${KERNEL_INCLUDES})
install(TARGETS libdsk LIBRARY DESTINATION lib)

add_library(libds ${SHARED_SOURCES} support/ds.c)
target_include_directories(libds PUBLIC ${SHARED_INCLUDES})
install(TARGETS libds LIBRARY DESTINATION lib)
install(TARGETS libds
ARCHIVE DESTINATION lib/vali-sdk
LIBRARY DESTINATION lib/vali-sdk
RUNTIME DESTINATION bin/vali-sdk
)
install(DIRECTORY include/ DESTINATION include/vali-sdk)
10 changes: 7 additions & 3 deletions librt/libgracht/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,13 @@ add_sources(link/client.c link/server.c)
add_sources(client.c crc16.c server.c shared.c)

add_library(libgracht ${SRCS})
install(TARGETS libgracht LIBRARY DESTINATION lib)
install(DIRECTORY include DESTINATION ${CMAKE_BINARY_DIR}/include)
install(DIRECTORY generator DESTINATION ${CMAKE_BINARY_DIR}/share/gracht)
install(TARGETS libgracht
ARCHIVE DESTINATION lib/vali-ddk
LIBRARY DESTINATION lib/vali-ddk
RUNTIME DESTINATION bin/vali-ddk
)
install(DIRECTORY include/ DESTINATION include/vali-ddk)
install(DIRECTORY generator/ DESTINATION share/vali)

if (GRACHT_BUILD_TESTS)
add_custom_command(
Expand Down
12 changes: 8 additions & 4 deletions librt/libm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,11 @@ set_source_files_properties(${C_ARCH_SOURCES} ${C_SOURCES} ${EXTRA_SOURCES}
)

add_library(libm ${ASM_SOURCES} ${C_ARCH_SOURCES} ${C_SOURCES} ${EXTRA_SOURCES})
install(TARGETS libm LIBRARY DESTINATION lib)
install(TARGETS libm LIBRARY
ARCHIVE DESTINATION lib/vali-sdk
LIBRARY DESTINATION lib/vali-sdk
RUNTIME DESTINATION bin/vali-sdk
)

add_library(m SHARED ${ASM_SOURCES} ${C_ARCH_SOURCES} ${C_SOURCES} ${EXTRA_SOURCES})
set_target_properties(m
Expand All @@ -69,7 +73,7 @@ set_target_properties(m
)

install(TARGETS m
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib/vali-sdk
LIBRARY DESTINATION lib/vali-sdk
RUNTIME DESTINATION bin/vali-sdk
)
6 changes: 5 additions & 1 deletion librt/libusb/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,8 @@ include_directories (
)

add_library(libusb functions.c)
install(TARGETS libusb LIBRARY DESTINATION lib)
install(TARGETS libusb
ARCHIVE DESTINATION lib/vali-ddk
LIBRARY DESTINATION lib/vali-ddk
RUNTIME DESTINATION bin/vali-ddk
)
21 changes: 19 additions & 2 deletions modules/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,23 @@ macro (add_filesystem_target)
set (SERVICE_SOURCES "${ARGN}")
list (POP_FRONT SERVICE_SOURCES) # target

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0}.mdrv ${CMAKE_BINARY_DIR}/${ARGV0}.mdrv COPYONLY)
if (DEFINED VALI_PATH_INITRD)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0}.mdrv ${VALI_PATH_INITRD}/${ARGV0}.mdrv COPYONLY)
endif ()

add_library(${ARGV0} SHARED ${SERVICE_SOURCES})
set_target_properties (${ARGV0}
PROPERTIES
LINK_FLAGS "/noentry /lldmap"

)
target_link_libraries (${ARGV0} libgracht libds libddk c librt)

if (DEFINED VALI_PATH_INITRD)
add_custom_command (TARGET ${ARGV0} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${ARGV0}> ${VALI_PATH_INITRD}
)
endif ()
else ()
message (FATAL_ERROR "Not enough parameters for add_module_target")
endif ()
Expand All @@ -28,7 +37,9 @@ macro (add_module_target)
list (POP_FRONT SERVICE_SOURCES) # target
list (POP_FRONT SERVICE_SOURCES) # compile flags

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0}.mdrv ${CMAKE_BINARY_DIR}/${ARGV0}.mdrv COPYONLY)
if (DEFINED VALI_PATH_INITRD)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0}.mdrv ${VALI_PATH_INITRD}/${ARGV0}.mdrv COPYONLY)
endif ()

add_library(${ARGV0} SHARED ${SERVICE_SOURCES})
set_target_properties (${ARGV0}
Expand All @@ -37,6 +48,12 @@ macro (add_module_target)
LINK_FLAGS "/entry:__CrtModuleEntry /lldmap"
)
target_link_libraries (${ARGV0} libgracht libds libddk c librt)

if (DEFINED VALI_PATH_INITRD)
add_custom_command (TARGET ${ARGV0} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${ARGV0}> ${VALI_PATH_INITRD}
)
endif ()
else ()
message (FATAL_ERROR "Not enough parameters for add_module_target")
endif ()
Expand Down
10 changes: 9 additions & 1 deletion services/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ macro (add_service_target)
list (POP_FRONT SERVICE_SOURCES) # target
list (POP_FRONT SERVICE_SOURCES) # compile flags

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0}.mdrv ${CMAKE_BINARY_DIR}/${ARGV0}.mdrv COPYONLY)
if (DEFINED VALI_PATH_INITRD)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0}.mdrv ${VALI_PATH_INITRD}/${ARGV0}.mdrv COPYONLY)
endif ()

add_library(${ARGV0} SHARED ${SERVICE_SOURCES})
set_target_properties (${ARGV0}
Expand All @@ -19,6 +21,12 @@ macro (add_service_target)
LINK_FLAGS "/lldmap /entry:__CrtServiceEntry"
)
target_link_libraries (${ARGV0} libgracht libusb libds libddk c librt)

if (DEFINED VALI_PATH_INITRD)
add_custom_command (TARGET ${ARGV0} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${ARGV0}> ${VALI_PATH_INITRD}
)
endif ()
else ()
message (FATAL_ERROR "Not enough parameters for add_service_target")
endif ()
Expand Down
6 changes: 6 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ macro (add_test_target)
LINK_FLAGS "/lldmap /entry:__CrtConsoleEntry"
)
target_link_libraries (${ARGV0} libgracht libds libddk c librt)

if (DEFINED VALI_PATH_APPLICATIONS)
add_custom_command (TARGET ${ARGV0} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${ARGV0}> ${VALI_PATH_APPLICATIONS}
)
endif ()
else ()
message (FATAL_ERROR "Not enough parameters for add_test_target")
endif ()
Expand Down
Loading

0 comments on commit c71b068

Please sign in to comment.