@ -19,6 +19,43 @@
cmake_minimum_required ( VERSION 3.6 )
project ( laminar )
if ( ${ CMAKE_SYSTEM_NAME } STREQUAL "FreeBSD" )
# l d . l l d i s a d e f a u l t o p t i o n o n F r e e B S D
set ( LLVM_LINKER_IS_LLD ON )
endif ( )
# l d . l l d s p e c i f i c o p t i o n s . T h e r e i s n o s a n e w a y i n c m a k e
# t o d e t e c t i f t o o l c h a i n i s a c t u a l l y u s i n g l d . l l d
if ( LLVM_LINKER_IS_LLD )
if ( NOT DEFINED LINKER_EMULATION_FLAGS )
if ( ${ CMAKE_SYSTEM_PROCESSOR } STREQUAL "amd64" )
set ( LINKER_EMULATION_FLAGS "-melf_x86_64" )
elseif ( ${ CMAKE_SYSTEM_PROCESSOR } STREQUAL "x86_64" )
set ( LINKER_EMULATION_FLAGS "-melf_x86_64" )
elseif ( ${ CMAKE_SYSTEM_PROCESSOR } STREQUAL "aarch64" )
set ( LINKER_EMULATION_FLAGS "-maarch64elf" )
elseif ( ${ CMAKE_SYSTEM_PROCESSOR } STREQUAL "powerpc64le" )
set ( LINKER_EMULATION_FLAGS "-melf64lppc" )
elseif ( ${ CMAKE_SYSTEM_PROCESSOR } STREQUAL "powerpc64" )
set ( LINKER_EMULATION_FLAGS "-melf64ppc" )
elseif ( ${ CMAKE_SYSTEM_PROCESSOR } STREQUAL "riscv64" )
# l l v m 1 7 & r i s c v 6 4 r e q u i r e s e x t r a s t e p , i t i s n e c e s s a r y t o
# p a t c h ' E l f 6 4 . e _ f l a g s ' ( 4 8 - t h b y t e ) i n b i n a r y - b l o b o b j e c t f i l e s
# w i t h v a l u e 0 x 5 - t o c h a n g e s o f t _ f l o a t A B I t o h a r d _ f l o a t A B I
# s o t h e y c a n l i n k w i t h r e s t o f t h e o b j e c t f i l e s .
set ( LINKER_EMULATION_FLAGS "-melf64lriscv" )
elseif ( ${ CMAKE_SYSTEM_PROCESSOR } STREQUAL "arm" )
set ( LINKER_EMULATION_FLAGS "-marmelf" )
elseif ( ${ CMAKE_SYSTEM_PROCESSOR } STREQUAL "armv7" )
set ( LINKER_EMULATION_FLAGS "-marmelf" )
else ( )
message ( FATAL_ERROR
" U n s u p p o r t e d ' $ { C M A K E _ S Y S T E M _ P R O C E S S O R } ' t r a n s l a t i o n t o e m u l a t i o n f l a g . "
" P l e a s e s e t i t e x p l i c i t l y ' c m a k e - D L I N K E R _ E M U L A T I O N _ F L A G S = \ " - m e l f _ y o u r _ a r c h \ " . . . ' " )
endif ( )
endif ( )
endif ( )
set ( CMAKE_INCLUDE_CURRENT_DIR ON )
set ( CMAKE_CXX_STANDARD 17 )
@ -56,7 +93,7 @@ macro(generate_compressed_bins BASEDIR)
D E P E N D S $ { B A S E D I R } / $ { F I L E }
)
add_custom_command ( OUTPUT ${ OUTPUT_FILE }
C O M M A N D $ { C M A K E _ L I N K E R } -r - b b i n a r y - o $ { O U T P U T _ F I L E } $ { C O M P R E S S E D _ F I L E }
C O M M A N D $ { C M A K E _ L I N K E R } ${ L I N K E R _ E M U L A T I O N _ F L A G S } -r - b b i n a r y - o $ { O U T P U T _ F I L E } $ { C O M P R E S S E D _ F I L E }
C O M M A N D $ { C M A K E _ O B J C O P Y }
- - r e n a m e - s e c t i o n . d a t a = . r o d a t a . a l l o c , l o a d , r e a d o n l y , d a t a , c o n t e n t s
- - a d d - s e c t i o n . n o t e . G N U - s t a c k = / d e v / n u l l
@ -84,11 +121,11 @@ add_custom_command(OUTPUT index_html_size.h
# D o w n l o a d 3 r d - p a r t y f r o n t e n d J S l i b s . . .
file ( DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js
j s / v u e . m i n . j s E X P E C T E D _ M D 5 f b 1 9 2 3 3 8 8 4 4 e f e 8 6 e c 7 5 9 a 4 0 1 5 2 f c b 8 e )
$ { C M A K E _ B I N A R Y _ D I R } / j s / v u e . m i n . j s E X P E C T E D _ M D 5 f b 1 9 2 3 3 8 8 4 4 e f e 8 6 e c 7 5 9 a 4 0 1 5 2 f c b 8 e )
file ( DOWNLOAD https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js
j s / a n s i _ u p . j s E X P E C T E D _ M D 5 b 3 1 9 6 8 e 1 a 8 f e d 0 f a 8 2 3 0 5 e 9 7 8 1 6 1 f 7 f 5 )
$ { C M A K E _ B I N A R Y _ D I R } / j s / a n s i _ u p . j s E X P E C T E D _ M D 5 b 3 1 9 6 8 e 1 a 8 f e d 0 f a 8 2 3 0 5 e 9 7 8 1 6 1 f 7 f 5 )
file ( DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js
j s / C h a r t . m i n . j s E X P E C T E D _ M D 5 7 d d 5 e a 7 d 2 c f 2 2 a 1 c 4 2 b 4 3 c 4 0 0 9 3 d 2 6 6 9 )
$ { C M A K E _ B I N A R Y _ D I R } / j s / C h a r t . m i n . j s E X P E C T E D _ M D 5 7 d d 5 e a 7 d 2 c f 2 2 a 1 c 4 2 b 4 3 c 4 0 0 9 3 d 2 6 6 9 )
# . . . a n d c o m p i l e t h e m
generate_compressed_bins ( ${ CMAKE_BINARY_DIR } js/vue.min.js
j s / a n s i _ u p . j s j s / C h a r t . m i n . j s )
@ -109,13 +146,31 @@ set(LAMINARD_CORE_SOURCES
i n d e x _ h t m l _ s i z e . h
)
find_package ( CapnProto REQUIRED )
include_directories ( ${ CAPNP_INCLUDE_DIRS } )
find_package ( SQLite3 REQUIRED )
include_directories ( ${ SQLite3_INCLUDE_DIRS } )
find_package ( ZLIB REQUIRED )
include_directories ( ${ ZLIB_INCLUDE_DIRS } )
find_package ( Threads REQUIRED )
include_directories ( ${ Threads_INCLUDE_DIRS } )
# # S e r v e r
add_executable ( laminard ${ LAMINARD_CORE_SOURCES } src/main.cpp ${ COMPRESSED_BINS } )
target_link_libraries ( laminard capnp-rpc capnp kj-http kj-async kj pthread sqlite3 z )
target_link_libraries ( laminard CapnProto::capnp-rpc CapnProto::capnp CapnProto::kj-http CapnProto::kj-async
C a p n P r o t o : : k j T h r e a d s : : T h r e a d s S Q L i t e : : S Q L i t e 3 Z L I B : : Z L I B )
if ( ${ CMAKE_SYSTEM_NAME } STREQUAL "FreeBSD" )
pkg_check_modules ( INOTIFY REQUIRED libinotify )
target_link_libraries ( laminard ${ INOTIFY_LINK_LIBRARIES } )
endif ( )
# # C l i e n t
add_executable ( laminarc src/client.cpp src/version.cpp laminar.capnp.c++ )
target_link_libraries ( laminarc capnp-rpc capnp kj-async kj pthread )
target_link_libraries ( laminarc CapnProto::capnp-rpc CapnProto::capnp CapnProto::kj-async CapnProto::kj Threads::Threads )
# # M a n p a g e s
macro ( gzip SOURCE )
@ -144,9 +199,11 @@ set(BASH_COMPLETIONS_DIR /usr/share/bash-completion/completions CACHE PATH "Path
set ( ZSH_COMPLETIONS_DIR /usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory" )
install ( TARGETS laminard RUNTIME DESTINATION sbin )
install ( TARGETS laminarc RUNTIME DESTINATION bin )
install ( FILES etc/laminar.conf DESTINATION /etc )
install ( FILES etc/laminarc-completion.bash DESTINATION ${ BASH_COMPLETIONS_DIR } RENAME laminarc )
install ( FILES etc/laminarc-completion.zsh DESTINATION ${ ZSH_COMPLETIONS_DIR } RENAME _laminarc )
install ( FILES etc/laminarc-completion.bash DESTINATION ${ CMAKE_INSTALL_PREFIX } ${ BASH_COMPLETIONS_DIR } RENAME laminarc )
install ( FILES etc/laminarc-completion.zsh DESTINATION ${ CMAKE_INSTALL_PREFIX } ${ ZSH_COMPLETIONS_DIR } RENAME _laminarc )
configure_file ( etc/laminar.service.in laminar.service @ONLY )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /laminar.service DESTINATION ${ SYSTEMD_UNITDIR } )
if ( NOT ${ CMAKE_SYSTEM_NAME } STREQUAL "FreeBSD" )
install ( FILES etc/laminar.conf DESTINATION ${ CMAKE_INSTALL_PREFIX } /etc )
configure_file ( etc/laminar.service.in laminar.service @ONLY )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /laminar.service DESTINATION ${ CMAKE_INSTALL_PREFIX } ${ SYSTEMD_UNITDIR } )
endif ( )