рд╢реБрдн рджрд┐рди, рд╣реЗрдмреНрд░!
рдЖрдЬ рдореИрдВ рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЗрдирдХреНрд╕ (рдЖрд░рдкреАрдЖрдИ, рдмреАрдмреАрдмреА рдФрд░ рдЕрдиреНрдп) рдкрд░ рдорд┐рдиреА-рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдмрд┐рдирд╛ рджрд░реНрдж рдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢ред рдЦреИрд░, рдпрд╛ рд▓рдЧрднрдЧ ... =)

рдХреНрдпреЛрдВ рдШ?
рдЬрдм рдХрд╛рдо рдореЗрдВ рдПрдЖрд░рдПрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рд▓рд┐рдЦрдирд╛ рдерд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдбреА рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдкреНрд░рд╢рдВрд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдПрдХ рд╕рдирдХреА рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдбреА рдкрд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдХреЛрд╢рд┐рд╢ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ ... рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдПрдХ рддрд░рдл, рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рдереАрдВ (рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдереА, рдЬреЛ рд╕рдВрдХрд▓рдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рдЖрдИ рдереА), рджреВрд╕рд░реА рддрд░рдл, рдПрдЖрд░рдПрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рд▓рдЧрд╛рддрд╛рд░ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯреВрд▓рдХрд┐рдЯ рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред
рдЙрдкрдХрд░рдг
рдореИрдВ рдХреЙрдорд░реЗрдб рд╕реЗ D Programming Language
рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде Visual Studio Code
рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рд╡реЗрдмрдлреНрд░реАрдХ (рдЬрд╛рди рдЬреБрд░рд┐рддреНрдЬрд╛)ред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдЖрдк Beta Stream
рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рд╣рдореЗрд╢рд╛ serve-d
рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд▓рдЧрдЗрди рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХрд╛рдлреА рдЙрд▓рдЭрди рдореЗрдВ рдирд┐рдХрд▓рд╛ (рдбреА рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ), рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдХрд╛рдлреА рд▓рдЪреАрд▓рд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
. тФЬтФАтФА arm-lib/ | тФЬтФАтФА libcrypto.a | тФЬтФАтФА libssl.a | тФФтФАтФА libz.a тФЬтФАтФА docker-ctx/ | тФЬтФАтФА Dockerfile | тФФтФАтФА entry.sh тФЬтФАтФА source | тФФтФАтФА app.d тФЬтФАтФА .gitignore тФЬтФАтФА build-docker тФЬтФАтФА ddb тФЬтФАтФА dub.sdl тФЬтФАтФА ldc тФФтФАтФА makefile
arm-lib
рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп - (рд╣рд╛рде рдХреЗ рдиреАрдЪреЗ рд╕рдВрдХрд▓рд┐рдд)
docker-ctx
- docker рдЗрдореЗрдЬ docker-ctx
рд╕рдВрджрд░реНрдн
entry.sh
- рдХрдВрдЯреЗрдирд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ
dub.sdl
- D рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓, рдЖрдкрдХреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
build-docker
- рдХрдВрдЯреЗрдирд░ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ 1 рдкрдВрдХреНрддрд┐, рд▓реЗрдХрд┐рди рдЕрднреА рднреА)
ddb
- docker D рдмрд┐рд▓реНрдбрд░ - рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдПрдХ рдкрдВрдХреНрддрд┐ рднреА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ)
ldc
- рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдЖрдкрдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде ldc рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ
makefile
- рдЗрд╕рдореЗрдВ рдмрд╛рдВрд╣ рдФрд░ x86 рдХреЗ рд▓рд┐рдП рд╡реНрдпрдВрдЬрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
source/app.d
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд
arm-lib
рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред
рд╡рд╛рдЗрдм рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЦрд░рд╛рдм рд░реВрдк рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ, рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░, рдХрдВрдЯреЗрдирд░ рдЕрд╕реЗрдВрдмрд▓реА рдиреБрд╕реНрдЦрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ dockert-ctx
рдореЗрдВ dockert-ctx
рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕реНрд╡рд╛рдж рдФрд░ рд░рдВрдЧ ...
рдорд╣рд╛рд╕рднрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
./ddb make
ddb
рдХрдВрдЯреЗрдирд░ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, entry.sh
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИentry.sh
рдереЛрдбрд╝рд╛ dub
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛, рдЬреЛ рдЖрдкрдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛редentry.sh
рдЗрдирдкреБрдЯ рдХрдорд╛рдВрдб рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ make
)make
рдЗрди рд░реАрдб рд░реАрдб makefile
- рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рди рдФрд░ рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рднреА рдЭрдВрдбреЗ
makefile
рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ dub
рдХреЙрд▓ рд▓рд╛рдЗрди рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ - рдЬрдм
dub
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ dub
рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ ldc
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрдХрд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рд░рдирдЯрд╛рдЗрдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ
makefile
рдореЗрдВ рдореЗрдХрдЕрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдЧрд░ рд╡реЗ рдЧрд╛рдпрдм рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ ldc-build-runtime
рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЪрд░
dub.sdl
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ dub.sdl
рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдП dub.sdl
рд╣реИрдВ
рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА
Dockerfile
рдЪреВрдВрдХрд┐ рд╣рдо RPI3 рдХреЗ рддрд╣рдд рд▓рд┐рдЦреЗрдВрдЧреЗ, рд╣рдо рдмреЗрд╕ debian:stretch-slim
рд╕рд┐рд╕реНрдЯрдо рдХреА рдЫрд╡рд┐ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ debian:stretch-slim
, рдЬрд╣рд╛рдВ gcc-arm-linux-gnueabihf
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд╛рд╕реНрдкрд┐рдпрди рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЧреНрд▓рд┐рдмрдХ рдХреЗ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдлреЗрдбреЛрд░рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА, рдЬрд╣рд╛рдВ рдХреНрд░реЙрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдиреБрд░рдХреНрд╖рдХ рдЧреНрд▓рд┐рдмрдХ рдХреЗ рдмрд╣реБрдд рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗред )ред
FROM debian:stretch-slim RUN apt-get update && apt-get install -y \ make cmake bash p7zip-full tar wget gpg xz-utils \ gcc-arm-linux-gnueabihf ca-certificates \ && apt-get autoremove -y && apt-get clean ARG ldcver=1.11.0 RUN wget -O /root/ldc.tar.xz https://github.com/ldc-developers/ldc/releases/download/v$ldcver/ldc2-$ldcver-linux-x86_64.tar.xz \ && tar xf /root/ldc.tar.xz -C /root/ && rm /root/ldc.tar.xz ENV PATH "/root/ldc2-$ldcver-linux-x86_64/bin:$PATH" ADD entry.sh /entry.sh RUN chmod +x /entry.sh WORKDIR /workdir ENTRYPOINT [ "/entry.sh" ]
ldc
рд╕рдВрдХрд▓рдХ github
рд╕реЗ ldc
рд╣реИ, рдЬрд╣рд╛рдБ рдпрд╣ рд╡рд░реНрддрдорд╛рди llvm
рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
entry.sh
#!/bin/bash if [ ! -d ".dpack" ]; then mkdir .dpack fi ln -s $(pwd)/.dpack /root/.dub exec $@
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рдХреЛрдИ .dpack
рдлрд╝реЛрд▓реНрдбрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ .dpack
рдкрд░ рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП .dpack
рдмрдирд╛рдПрдБ, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ dub
рджреНрд╡рд╛рд░рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдирд┐рд░реНрдорд╛рдг- docker, ddb, ldc
рдпреЗ рддреАрди рд╕рд░рд▓ рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ, рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ (рдмреИрд╢) рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреА рд╣реЛрдВрдЧреА рдпрд╛ рдмрд╕ рдЗрд╕реЗ рд╣рд╛рде рд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред
build-docker
рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП):
#!/bin/bash docker build -t dcross docker-ctx
ddb
рдиреЗ рдХрдиреНрдЯреЗрдирд░ рдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ (рд▓рд╛рдЗрдирдХреНрд╕) рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛:
#!/bin/bash docker run -v `pwd`:/workdir -t --rm dcross $@
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдирд╛рдо dcross
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдирд╛рдо рд╕реНрд╡рдпрдВ рд╣реА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рджреЛрдиреЛрдВ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ pwd
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ Dockerfile
рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред %CD%
)ред
ldc
, рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ (рдХреЗрд╡рд▓ linux, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╡рд┐рдЪрд┐рддреНрд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЬреАрдд рдХреЗ рддрд╣рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ):
#!/bin/bash $LDC $LDC_FLAGS $@
dub.sdl
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧрд╛:
name "chw" description "Cross Hello World" license "MIT" targetType "executable" targetPath "$TP" dependency "vibe-d" version="~>0.8.4" dependency "vibe-d:tls" version="~>0.8.4" subConfiguration "vibe-d:tls" "openssl-1.1"
targetPath
рдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ dub
рдЕрд╕реЗрдВрдмрд▓реА рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдиреБрд╕реНрдЦрд╛ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, lflags "-L.libs" platform="arm"
рдХреЗрд╡рд▓ lflags "-L.libs" platform="arm"
рдиреАрдЪреЗ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдиреЗ рдкрд░ рд▓рд┐рдВрдХрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝ рджреЗрдЧрд╛)ред
makefile
рдФрд░ рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, make
рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ dub
рдХрд╣рддрд╛ рд╣реИ, рдФрд░ dub
рдЦреБрдж рдореЙрдирд┐рдЯрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдПрдХ makefile
рдХреА рдорджрдж рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрджреЗрд╢реЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реА рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдЕрджреНрдпрддрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреИрдХрд┐рдВрдЧ рдХрд░рдирд╛ рдЖрджрд┐)ред
makefile
рдХреА рд╕рд╛рдордЧреНрд░реА рдмрд╛рдХреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрдбрд╝реА рд╣реИ:
# arm arch = arm # target path -- , TP = build-$(arch) LDC_DFLAGS = -mtriple=armv7l-linux-gnueabihf -disable-inlining -mcpu=cortex-a8 # EMPTY := SPACE :=$(EMPTY) $(EMPTY) LDC_BRT_DFLAGS = $(subst $(SPACE),;,$(LDC_DFLAGS)) ifeq ($(force), y) # # , .. dub FORCE = --force else FORCE = endif ifeq ($(release), y) BUILD_TYPE = --build=release else BUILD_TYPE = endif DUB_FLAGS = build --parallel --compiler=./ldc $(FORCE) $(BUILD_TYPE) $(info DUB_FLAGS: $(DUB_FLAGS)) # LDC = ldc2 LDC_BRT = ldc-build-runtime # ldc, runtime ARM LDC_RT_DIR = .ldc-rt # gcc GCC = arm-linux-gnueabihf-gcc ifeq ($(arch), x86) LDC_FLAGS = else ifeq ($(arch), arm) LDC_FLAGS = $(LDC_DFLAGS) -LL./$(LDC_RT_DIR)/lib -LL./arm-lib -gcc=$(GCC) else $(error unknown arch) endif DUB = TP=$(TP) LDC=$(LDC) LDC_FLAGS="$(LDC_FLAGS)" dub $(DUB_FLAGS) # .PHONY: all clean rtlibs stat # all: rtlibs $(DUB) DRT_LIBS=$(addprefix $(LDC_RT_DIR)/lib/, libdruntime-ldc.a libdruntime-ldc-debug.a libphobos2-ldc.a libphobos2-ldc-debug.a) $(DRT_LIBS): CC=$(GCC) $(LDC_BRT) -j8 --dFlags="$(LDC_BRT_DFLAGS)" --buildDir=$(LDC_RT_DIR) \ --targetSystem="Linux;UNIX" BUILD_SHARED_LIBS=OFF # D runtime ARM rtlibs: $(DRT_LIBS) # stat: find source -name '*.d' | xargs wc -l clean: rm -rf $(TP) rm -rf .dub $(LDC_BRT) --buildDir=$(LDC_RT_DIR) --resetOnly
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ makefile
рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рджреЛрдиреЛрдВ рд╣рд╛рде рдФрд░ x86 рдХреЗ рддрд╣рдд рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
./ddb make ./ddb make arch=x86 # x86 make arch=x86 # host ldc
рдмрд╛рдВрд╣ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ build-arm
рдореЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ, x86 рдХреЗ build-x86
ред
app.d
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдХреНрд╖реБрдзрд╛рд╡рд░реНрдзрдХ рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдг рдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП, app.d
рдХреЛрдб app.d
:
import vibe.core.core : runApplication; import vibe.http.server; void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res) { if (req.path == "/") res.writeBody("Hello, World!", "text/plain"); } void main() { auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "0.0.0.0"]; auto l = listenHTTP(settings, &handleRequest); scope (exit) l.stopListening(); runApplication(); }
рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЕрдм рд╡реЗрдм рдХреА рдЬрд░реВрд░рдд рд╣реИ))
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрднреА рддрдХ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдмрд┐рдирд╛ make
рдХрд┐рдП рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ред рдЙрд╕рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд┐рдз рд╣реЛ рдЧрдпрд╛ред
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдбреА рдЧреЛ рдирд╣реАрдВ рд╣реИ, рдбреА рдореЗрдВ рдпрд╣ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рд╛рде рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╕рдВрджрд░реНрдн
рдпрд╣рд╛рдБ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИред рдЗрд╕ рднрдВрдбрд╛рд░ рдореЗрдВ, рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп рдзреАрд░реЗ-рдзреАрд░реЗ рдЬрд╛рдирдХрд╛рд░реА, рдЙрджрд╛рд╣рд░рдг, рд▓рд┐рдВрдХ рдПрдХрддреНрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрд╣рд╛рдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ YoctoLinux рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВред
рд╡реАрдХреЗ рдореЗрдВ рдиреНрдпреВрдЬ рдлреАрдб