• Stars
    star
    184
  • Rank 209,187 (Top 5 %)
  • Language Makefile
  • License
    MIT License
  • Created almost 11 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Makefile to get started with Rust (DEPRECATED)

Rust-Empty

Notice: Rust-Empty is deprecated and replaced by Cargo, which comes with Rust

A Makefile to get started with Rust development.
MIT license (or just use it as you like).
Requires Linux or Mac OS X (with developer tools).
Experimental support for Mingw on Windows.

If you want to contact me, I often hang around in the #rust IRC channel (bvssvni)

It is recommended to install Cargo
Cargo will replace a subset of the features of Rust-Empty over time.

##Example 1: Hello World

  1. Copy Makefile to a new empty project folder.
  2. Open the Terminal and navigate to the project folder.
  3. make nightly-install
  4. make run to create and run "hello world"

The "hello world" example is created when there is no src/main.rs.

##Example 2: New open source library

  1. Create new repository on Github.
  2. git clone <url>
  3. Copy Makefile to the folder.
  4. make git-ignore
  5. make lib
  6. Change DEFAULT = help to DEFAULT = lib

##Example 3: Compile library on file changes

  1. Assuming you have set up the library and set the DEFAULT parameter properly
  2. make watch to generate the watch script
  3. ./watch.sh
  4. Edit the source and save to do compilation

##Example 4: Compile and run application on file changes

  1. Assuming you have set up the application properly
  2. make watch to generate the watch script
  3. ./watch.sh src "make run"
  4. Edit the source and save to compile and run the application

This technique can be applied to running unit tests and benchmarks as well. To chain commands, use the && operator, for example ./watch.sh src "make test-internal && bench-internal".

##Example 5: Compile example with conditional compilation

  1. Assume you have an example 'examples/hello.rs'
  2. Put #[cfg(foo)] in 'hello.rs' where you want want conditional compilation
  3. Type make examples/hello.rs COMPILER_FLAGS+="--cfg foo"

The 'foo' part can be switched with any other flag.
You can also have multiple flags and require more than one by using #[cfg(foo, bar)]. Type make examples/hello.rs COMPILER_FLAGS+="--cfg foo --cfg bar" to activate both.

##What is Rust-Empty?

Rust-Empty is a user friendly Makefile/Bash setup tool for Rust programmers.
It automates setup of directories and configuration files.
Once setup is completed, replace or modify the Makefile to suit your needs.
The Makefile works out of the box on Linux and OSX (with developer tools).
The setup uses best practices and conventions learned from the Rust community.
Pull requests/fixes are welcome!

Latest feature: Build symlink dependencies!

What are these 'best practices'?

For example:

  • Put code in a src/ directory
  • Add a crate_id attribute for your library
  • Deny missing doc attribute for library
  • A .gitignore to keep repository clean
  • Library dependencies should be in target/deps directory
  • Example programs better not be in the src/ directory
  • Need a -O flag to compile optimized code
  • Dependencies, rust-nightly check through Travis CI etc.

###Goals

  • Work on Linux, Mac OS X and Mingw on Windows
  • Convention by 'best practice' of Rust community
  • Features are optional, non-interfering and gives informative output
  • Integrate with other tools from Rust community

###Non-Goals

  • Replace Cargo, the Rust package manager
  • Backward compatibility
  • Require any sort of internal configuration

##Usage

  1. Create a new empty folder for your project.
  2. Copy 'Makefile' to the project folder.
  3. Open the Terminal window and navigate to the project folder.
  4. Type 'make help'.
--- rust-empty (0.7 000)
make run               - Runs executable
make exe               - Builds main executable
make lib               - Both static and dynamic library
make rlib              - Static library
make dylib             - Dynamic library
make test              - Tests library internally and externally
make test-internal     - Tests library internally
make test-external     - Tests library externally
make bench             - Benchmarks library internally and externally
make bench-internal    - Benchmarks library internally
make bench-external    - Benchmarks library externally
make doc               - Builds documentation for library
make git-ignore        - Setup files to be ignored by Git
make examples          - Builds examples
make cargo-exe         - Setup executable package
make cargo-lib         - Setup library package
make rust-ci-lib       - Setup Travis CI Rust library
make rust-ci-exe       - Setup Travis CI Rust executable
make rusti             - Setup 'rusti.sh' for interactive Rust
make watch             - Setup 'watch.sh' for compilation on save
make loc               - Count lines of code in src folder
make nightly-install   - Installs Rust nightly build
make nightly-uninstall - Uninstalls Rust nightly build
make clean             - Deletes binaries and documentation.
make clear-project     - WARNING: Deletes project files except 'Makefile'
make clear-git         - WARNING: Deletes Git setup
make symlink-build     - Creates a script for building dependencies
make symlink-info      - Symlinked libraries dependency info
make target-dir        - Creates directory for current target

All the commands creates the files and folders necessary to compile.
For example, if you type make exe it will add a hello-world program to src/main.rs.
You can use make clear-project to revert back to just the 'Makefile'.

##Unit Testing & Benchmarking

Internal unit tests and benchmarks are located in the same source as the library, src/lib.rs.
External unit tests and benchmarks are located in src/test.rs.

##Linking to Libraries

The directory target/deps/ is linked by default. If you put Rust libraries in this directory it will link statically if there is an ".rlib" file or dynamically if ".dylib" (OSX), ".so" (Linux) or ".dll" (Window).

##Symlinked Libraries

A symlink is a file that points to another file. Symlinks are useful when working across multiple repositories and testing integration.

Using the command ln -s <from> <to>, you can link the output file from another project to the target/deps/ folder.

The command make symlink-info creates a file .symlink-info that contains the file name, current commit, the remote origin url and which remote branches this commit is available. For more information about how to read '.symlink-info' files, see https://github.com/bvssvni/rust-empty/issues/114

NOTICE: The ln -s <from> <to> for relative file names does not work on OSX. Use absolute file names instead. For example ln -s /Users/myser/Desktop/mylibrary/target/x86_64-apple-darwin/lib/mylib.rlib target/x86_64-apple-darwin/mylib.rlib. See https://github.com/bvssvni/rust-empty/issues/100

The command make symlink-build creates a file build.sh that can build projects by symlinks.
You can type ./build.sh to build just the project, or ./build.sh deps to build everything.

##Introduction To Rust

Rust is a programming language developed at Mozilla Research.

Rust nightly builds
Rust at wikipedia
Official web page
Documentation at Github wiki
Rust at Reddit
Rust IRC channel
Editor syntax highlighting
Rust packages

###For those new to terminal/Github:

How to use the terminal
How to use Vim
How to use Github

###Rust CI

Each night the latest version of Rust on Ubuntu is built against a list of projects.
Add project by following instructions on the site:

Rust CI

More Repositories

1

piston

A modular game engine written in Rust
Rust
4,605
star
2

conrod

An easy-to-use, 2D GUI library written entirely in Rust.
Rust
3,347
star
3

hematite

A simple Minecraft written in Rust with the Piston game engine
Rust
1,847
star
4

dyon

A rusty dynamically typed scripting language
Rust
1,755
star
5

VisualRust

Visual Studio extension for Rust
C#
702
star
6

glfw-rs

GLFW3 bindings and idiomatic wrapper for Rust.
Rust
646
star
7

Piston-Tutorials

Tutorials for Piston
Rust
546
star
8

graphics

A library for 2D graphics, written in Rust, that works with multiple back-ends
Rust
479
star
9

piston-examples

A collection of examples using the Piston game engine
GLSL
342
star
10

piston_window

The official Piston convenience window wrapper for the Piston game engine
Rust
155
star
11

hematite_server

A Minecraft server clone
Rust
140
star
12

turbine

A 3D game engine with built-in editor
Rust
140
star
13

resize

Simple resampling library in pure Rust
Rust
125
star
14

hematite_nbt

A full-featured Rust crate for working with Minecraft's Named Binary Tag (NBT) file format, including Serde support.
Rust
99
star
15

meta

A DSL parsing library for human readable text documents
Rust
90
star
16

freetype-rs

Rust bindings for FreeType library
Rust
85
star
17

vecmath

A simple and type agnostic Rust library for vector math designed for reexporting
Rust
79
star
18

ai_behavior

AI behavior tree
Rust
73
star
19

skeletal_animation

A Rust library for skeletal animation
Rust
62
star
20

texture_packer

πŸ“¦ A library for texture packing
Rust
62
star
21

opengl_graphics

An OpenGL 2D back-end for the Piston game engine
Rust
60
star
22

sprite

A library for sprite hierarchy and scene management
Rust
57
star
23

gfx_graphics

A Gfx 2D back-end for the Piston game engine
Rust
55
star
24

music

A high level library for playing music and sound effects
Rust
40
star
25

eco

A tool for reasoning about breaking changes in Rust ecosystems
Rust
39
star
26

interpolation

A library for interpolation
Rust
34
star
27

wavefront_obj

A parser written in rust for the wavefront .obj file format.
Rust
27
star
28

freetype-sys

Low level bindings for the FreeType font library
Rust
27
star
29

glutin_window

A Piston window back-end using the Glutin library
Rust
25
star
30

piston_collada

Rust library for parsing COLLADA files
Rust
24
star
31

history_tree

A persistent history tree for undo/redo
Rust
24
star
32

sdl2_window

A SDL2 back-end for the Piston game engine
Rust
23
star
33

skeletal_animation_demo

Demo project for PistonDevelopers/skeletal_animation
Rust
22
star
34

gfx_text

Draw text for gfx using freetype
Rust
22
star
35

dev_menu

In-game developer menu for Piston and gfx-rs
Rust
17
star
36

glium_graphics

A Glium 2D back-end for the Piston game engine
Rust
17
star
37

fps_counter

A Frames Per Second counter
Rust
17
star
38

truetype

A library for reading fonts from the TrueType format
Rust
17
star
39

gfx_voxel

A voxel rendering library on top of Gfx
Rust
15
star
40

cam

A Rust library for 3D camera and navigation
Rust
15
star
41

current

A library for setting current values for stack scope, such as application structure
Rust
15
star
42

construct

A library for higher order functional programming with homotopy maps to construct 3D geometry
Rust
15
star
43

find_folder

A simple function for searching for a folder with a given name from the current working directory.
Rust
14
star
44

pluto

Game competition server software for Rust gamedev community
HTML
14
star
45

shaders

Shaders for game development in Rust
GLSL
14
star
46

quaternion

A simple and type agnostic Rust library for quaternion math designed for reexporting
Rust
13
star
47

mush

gui for dialogue graphs, et al.
Rust
12
star
48

hematite.piston.rs

The website for the Hematite project
CSS
10
star
49

asset_store

DEPRECATED - A unified method for easily reading and caching files over the filesystem and network.
Rust
10
star
50

dyon_asteroids

A demo game project for Dyon/Piston/Glium to test Dyon and research design for dyon_interactive
Rust
9
star
51

binaries

Pre-built binaries for external dependencies commonly used in Piston
9
star
52

docs

πŸ“„ Documentation for piston's projects.
8
star
53

physfs-rs

Rust bindings for PhysFS
Rust
8
star
54

graphics-lab

A place to visualize and test concepts related to Rust-Graphics
Rust
7
star
55

opengex

Meta rules for parsing the OpenGEX format
Rust
7
star
56

input

DEPRECATED - moved into the piston repo
Rust
7
star
57

texture

A library for texture conventions
Rust
7
star
58

gfx_debug_draw

Simple debug renderer (lines, text, etc) for gfx
Rust
7
star
59

glfw_window

A GLFW window back-end for the Piston game engine
Rust
7
star
60

wgpu_graphics

A WGPU 2D back-end for the Piston game engine
Rust
7
star
61

camera_controllers

A Rust library for controlling 3D cameras for the Piston engine
Rust
6
star
62

geometry

A structure for storing and look up 3D geometry
Rust
6
star
63

dual_quaternion

A simple and type agnostic Rust library for dual-quaternion math designed for reexporting
Rust
6
star
64

event_loop

DEPRECATED - moved into the piston repo
Rust
5
star
65

viewport

A library for storing viewport information
Rust
5
star
66

blog.piston.rs

The Piston Blog
HTML
5
star
67

dyon_to_rust

Dyon to Rust transpiler
Rust
5
star
68

dyon_snippets

A place to share Dyon source code and discuss library design
Rust
4
star
69

editor

Editor interface
Rust
4
star
70

project_r

DEPRECATED - Collaboration on an open source game to push Piston forward
4
star
71

winit_window

A winit back-end for pistoncore-window
Rust
4
star
72

quack

Quack - Duck typing traits
Rust
4
star
73

ddsfile

DirectDraw Surface (DDS) file format parsing and construction
Rust
4
star
74

button_tracker

A Piston library for tracking key/mouse press events from windows for use in update loops
Rust
4
star
75

read_color

A simple library for reading hex colors
Rust
4
star
76

atom-language-dyon

Dyon language support in Atom
CSS
4
star
77

dyon-tutorial

Tutorial for the Dyon programming language
HTML
3
star
78

button_controller

A Piston library for handling button state and events
Rust
3
star
79

graphics_tree

A 2D graphics backend for Piston-Graphics that stores and optimizes commands
Rust
2
star
80

float

Traits for generic floats in game development
Rust
2
star
81

array

Convenience methods for working with arrays
Rust
2
star
82

table

A table object type for dynamical data
Rust
2
star
83

read_token

A simple library to read tokens using look ahead
Rust
2
star
84

shapes

Convenience structs for 2D shapes
Rust
2
star
85

image_buffer

Provides a buffer type to ease the work with images and different color types.
Rust
2
star
86

drag_controller

A drag controller
Rust
2
star
87

range

A library for range addressing
Rust
2
star
88

vec

DEPRECATED - An experimental library using SIMD instructions for generic vector types
Rust
2
star
89

binpool

An experimental uniform binary format for particle physics analysis
Rust
2
star
90

scroll_controller

A Piston library for handling scrolling areas
Rust
1
star
91

timer_controller

A timer controller
Rust
1
star
92

split_controller

A Piston library for handling split layout state and events
Rust
1
star
93

lup

A custom indexed loop macro library for Rust.
Rust
1
star
94

deform_grid

A 2D deform grid for Piston-Graphics
Rust
1
star
95

select_color

A library for color selection
Rust
1
star
96

inventory

DEPRECATED - Plugin management for Rust programs
Rust
1
star
97

rect

Helper methods for computing simple rectangle layout
Rust
1
star
98

gfx_texture

A Gfx texture representation that works nicely with Piston libraries
Rust
1
star
99

underscore_args

Macro for underscore named argument syntax, aka Dyon
Rust
1
star
100

shader_version

A helper library for detecting and picking compatible shaders
Rust
1
star