рдПрдЖрд░рдПрдо рдкрд░ рдбреА рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ

рд╢реБрдн рджрд┐рди, рд╣реЗрдмреНрд░!


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



рдХреНрдпреЛрдВ рдШ?


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


рдЙрдкрдХрд░рдг


рдореИрдВ рдХреЙрдорд░реЗрдб рд╕реЗ 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 

  1. ddb рдХрдВрдЯреЗрдирд░ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, entry.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ
  2. entry.sh рдереЛрдбрд╝рд╛ dub рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛, рдЬреЛ рдЖрдкрдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред
  3. entry.sh рдЗрдирдкреБрдЯ рдХрдорд╛рдВрдб рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ make )
  4. make рдЗрди рд░реАрдб рд░реАрдб makefile
  5. рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рди рдФрд░ рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рднреА рдЭрдВрдбреЗ makefile рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ dub рдХреЙрд▓ рд▓рд╛рдЗрди рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ
  6. рдЬрдм dub рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ dub рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ ldc рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрдХрд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
  7. рд░рдирдЯрд╛рдЗрдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ makefile рдореЗрдВ рдореЗрдХрдЕрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдЧрд░ рд╡реЗ рдЧрд╛рдпрдм рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ ldc-build-runtime рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  8. рдЪрд░ 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 рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВред


рд╡реАрдХреЗ рдореЗрдВ рдиреНрдпреВрдЬ рдлреАрдб

Source: https://habr.com/ru/post/hi428982/


All Articles