0.2.112 • Published 8 years ago

secc v0.2.112

Weekly downloads
5
License
MIT
Repository
github
Last release
8 years ago

secc - Distributed compiler with modern web technology.

a project of 'Second Compiler'.

Key Features

  • RESTful API in Daemon/Scheduler
  • Preprocessed and Pump Mode
  • Memory Cache(works like remote Ccache)
  • Debug fission(-gsplit-dwarf option) supports.
  • Monitoring by Browser(Navigate to http://SCHEDULER:PORT)
  • Cross-compile(Various version/machine of compiler in network) supports
  • Gcc / Clang support

Quick Start

How to use

install by git clone (then npm install)

git clone https://github.com/ivere27/secc.git
cd secc
npm install

make sure you've already installed node.js, npm and (optionally) redis

  • Ubuntu $ sudo apt-get install nodejs npm nodejs-legacy redis-server
  • Mac $ brew install nodejs redis

Client - your PC

set PATH and NUMBER_OF_PROCESSORS(-jX)

edit "client" part in 'settings.json' file. set scheduler's address and port.

$ export PATH=/path/to/secc/bin:$PATH
$ export NUMBER_OF_PROCESSORS="8"
$ # then,
$ clang -c test.c

or just use CC, CXX and NUMBER_OF_PROCESSORS env

$ SECC_ADDRESS=172.17.42.1 SECC_CACHE=1 SECC_CROSS=0 \
CC=/path/to/secc/bin/clang CXX=/path/to/secc/bin/clang++ ./configure
$ SECC_ADDRESS=172.17.42.1 SECC_CACHE=1 SECC_CROSS=0 \
CC=/path/to/secc/bin/clang CXX=/path/to/secc/bin/clang++ make -j8

upload your compiler archive by ./tool/secc-upload-archive.js

$ # for clang
$ node secc-upload-archive.js --clang /path/to/clang /path/to/clang++ archivetool.js http://SCHEDULER:PORT
$ # for gcc
$ node secc-upload-archive.js --gcc /path/to/gcc /path/to/g++ archivetool.js http://SCHEDULER:PORT

in linux case(you can use the specific compiler version),

 node secc-upload-archive.js --gcc /usr/bin/gcc-5 /usr/bin/g++-5 ./secc-create-archive-linux.js http://172.17.42.1:10509

 node secc-upload-archive.js --clang /usr/bin/clang /usr/bin/clang++ ./secc-create-archive-linux.js http://172.17.42.1:10509

Daemon - n PC

edit "daemon" part in 'settings.json' file. set scheduler's address and port.

if you want to use cache, go #Caches section.

run 'node secc-daemon.js' as root for chroot-jail.

$ sudo DEBUG=secc* node secc-daemon.js

Scheduler - 1 PC

$ DEBUG=secc* node secc-scheduler.js

Modes

MODE 1 - Preprocessed Mode(default) send one preprocessed source to daemon. (cause CPU load)

MODE 2 - Pump Mode send headers and source to daemon. (cause Memory/Bandwidth load)

MODE 3 - Git Mode(not yet supported.)

Debug

  • DEBUG=* to watch every verbose logs.
  • DEBUG=secc* to watch only SECC's log.
  • SECC_LOG=/path/to/log.txt - redirect logs to a file
$ DEBUG=* SECC_MODE=1 SECC_CACHE=1 /path/to/secc/bin/gcc -c test.c

Caches

install REDIS in a daemon computer. then, enable "cache" in "daemon" part of 'settings.json' file.

Environment Variable

ENVsecc-clientsecc-daemonsecc-scheduler
SECC_ADDRESSscheduler addressscheduler address-
SECC_PORTscheduler portscheduler portlistening port
DEBUGlog levellog levellog level
SECC_LOGlog file pathlog file pathlog file path
SECC_CMDLINElog command line--
SECC_MODEprocessed or pump--
SECC_CACHEcache prefercache enable-
SECC_CROSScross-compiling prefer--
SECC_CCc compiler path--
SECC_CXXc++ compiler path--
REDIS_ADDRESS-redis address-
REDIS_PORT-redis port-
SECC_EXPOSE_ADDRESS-address for client-
SECC_EXPOSE_PORT-port for client-

How It Works

  • Scheduler - RESTful/WebSocket/Monitoring WebServer
  • Daemon - RESTful WebServer + WebSocket Client + Cache Server(redis)
  • Client - http client
  • (once) Client uploads a Compiler Archive to Scheduler
  • Scheduler and Daemons are connected by WebSocket
  • Client asks to Scheduler which daemon is available by REST API
  • (Optional) Client tries to get caches if possible
  • Client sends a source or/and dependencies to a Daemon by REST API
  • (once) Daemon downloads the archive from Scheduler if not exists
  • Daemon compiles the sources by Client's Compiler Archive
  • Daemon responds to Client with a object(+@)
  • (Optional) Objects are stored in Daemon's MemoryDB(redis)

License

MIT

0.2.112

8 years ago

0.2.108

8 years ago

0.2.97

8 years ago

0.2.84

8 years ago

0.2.71

8 years ago

0.2.64

8 years ago

0.2.58

8 years ago

0.2.45

8 years ago

0.2.36

8 years ago

0.2.35

8 years ago

0.2.26

8 years ago

0.2.24

8 years ago

0.2.22

8 years ago

0.2.21

8 years ago

0.2.10

8 years ago

0.2.5

8 years ago

0.2.0

8 years ago

0.1.26

8 years ago

0.1.22

8 years ago

0.1.19

8 years ago

0.1.18

8 years ago

0.1.17

8 years ago

0.1.16

8 years ago

0.1.14

8 years ago

0.1.13

8 years ago

0.1.12

8 years ago

0.1.11

8 years ago

0.1.10

8 years ago

0.1.9

8 years ago

0.1.8

8 years ago

0.1.6

8 years ago

0.1.2

8 years ago

0.1.1

9 years ago

0.1.0

9 years ago