restructure and add make build system