diff --git a/adapter/adapter.go b/adapter/adapter.go index a01a175..7c98108 100644 --- a/adapter/adapter.go +++ b/adapter/adapter.go @@ -4,6 +4,7 @@ import ( "errors" "github.com/c3pm-labs/c3pm/adapter/defaultadapter" "github.com/c3pm-labs/c3pm/adapter/irrlichtadapter" + "github.com/c3pm-labs/c3pm/adapter/raylibadapter" "github.com/c3pm-labs/c3pm/adapter_interface" "github.com/c3pm-labs/c3pm/config/manifest" ) @@ -16,6 +17,8 @@ func (AdapterGetterImp) FromPC(adp *manifest.AdapterConfig) (adapter_interface.A return defaultadapter.New(AdapterGetterImp{}), nil case adp.Name == "irrlicht" && adp.Version.String() == "0.0.1": return irrlichtadapter.New(), nil + case adp.Name == "raylib" && adp.Version.String() == "0.0.1": + return raylibadapter.New(), nil default: return nil, errors.New("only default adapter is supported") } diff --git a/adapter/defaultadapter/lib.go b/adapter/defaultadapter/lib.go index b65040a..cf352f5 100644 --- a/adapter/defaultadapter/lib.go +++ b/adapter/defaultadapter/lib.go @@ -14,6 +14,7 @@ project({{.ProjectName}} VERSION {{.ProjectVersion}}) set(CMAKE_CXX_STANDARD {{.LanguageStandard}}) add_library({{.ProjectName}} STATIC) +add_library({{.ProjectName}} SHARED) target_sources({{.ProjectName}} PRIVATE {{.Sources}} {{.Headers}}) target_include_directories({{.ProjectName}} PRIVATE {{.IncludeDirs}}) diff --git a/adapter/raylibadapter/cmakeConfig.go b/adapter/raylibadapter/cmakeConfig.go new file mode 100644 index 0000000..86113ee --- /dev/null +++ b/adapter/raylibadapter/cmakeConfig.go @@ -0,0 +1,28 @@ +package raylibadapter + +var CmakeConfig = ` + +if ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lGL -lm -lpthread -ldl -lrt -lX11 -lglfw -lstdc++") + set(THREADS_PREFER_PTHREAD_FLAG ON) + set(OpenGL_GL_PREFERENCE LEGACY) + set(USE_EXTERNAL_GLFW ON) + find_package(Threads REQUIRED) + find_package(OpenGL REQUIRED) + find_package (glfw3 REQUIRED) + set(LIBRARIES ${CMAKE_DL_LIBS} m Threads::Threads ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} ${GLFW3_LIBRARY} glfw) +endif ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") + +if (APPLE) + find_library(CARBON_LIBRARY CoreVideo) + find_library(COCOA_LIBRARY Cocoa) + find_library(IOKIT_LIBRARY IOKit) + find_library(GLUT_LIBRARY GLUT) + find_library(OPENGL_LIBRARY OpenGL) + set(OSX_LIBRARIES ${COREVIDEO_LIBRARY} ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${GLUT_LIBRARY} ${OPENGL_LIBRARY}) + set(MACOSX_DEPLOYMENT_TARGET ${10.9}) +endif (APPLE) + +target_include_directories(${C3PM_PROJECT_NAME} PRIVATE src ${RAYLIB_INCLUDE_DIR}) +target_link_libraries(${C3PM_PROJECT_NAME} PUBLIC ${OSX_LIBRARIES} ${LIBRARIES} ${RAYLIB_INCLUDE_DIR}) +` \ No newline at end of file diff --git a/adapter/raylibadapter/raylibadapter.go b/adapter/raylibadapter/raylibadapter.go new file mode 100644 index 0000000..925c878 --- /dev/null +++ b/adapter/raylibadapter/raylibadapter.go @@ -0,0 +1,81 @@ +package raylibadapter + +import ( + "fmt" + "os" + "os/exec" + "runtime" + + "github.com/c3pm-labs/c3pm/config" + "github.com/c3pm-labs/c3pm/config/manifest" +) + +type RaylibAdapter struct { +} + +// New creates a new builtin MakefileAdapter +func New() *RaylibAdapter { + return &RaylibAdapter{} +} + +var CurrentVersion, _ = manifest.VersionFromString("0.0.1") + +func executeCli(command string, dir string, args ...string) error { + cmd := exec.Command(command, args...) + cmd.Dir = dir; + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err := cmd.Start() + if err != nil { + return fmt.Errorf("failed to start %s: %w", command, err) + } + if err = cmd.Wait(); err != nil { + return fmt.Errorf("%s process failed: %w", command, err) + } + return nil +} + +func buildOnMacOS(pc *config.ProjectConfig) error { + return executeCli("make", "-C", pc.ProjectRoot, pc.ProjectRoot+"/src") +} + +func buildOnLinux(pc *config.ProjectConfig) error { + executeCli("make", pc.ProjectRoot + "/src", "RAYLIB_LIBTYPE=SHARED", "GRAPHICS=GRAPHICS_API_OPENGL_21", "-B") + return executeCli("/bin/sh", pc.ProjectRoot + "/src", "-c", "sudo make install RAYLIB_LIBTYPE=SHARED") +} + +func (a *RaylibAdapter) Build(pc *config.ProjectConfig) error { + switch runtime.GOOS { + case "darwin": + err := buildOnMacOS(pc) + if err != nil { + return err + } + oldLocation := pc.ProjectRoot + "/src/libraylib.a" + err = os.Rename(oldLocation, pc.ProjectRoot+"/libraylib.a") + if err != nil { + return err + } + case "linux": + err := buildOnLinux(pc) + if err != nil { + return err + } + // oldLocation := pc.ProjectRoot + "/build/raylib/libraylib.so" + // err = os.Rename(oldLocation, pc.ProjectRoot+"/libraylib.so") + // if err != nil { + // return err + // } + // case "windows": + // return nil + } + return nil +} + +func (a *RaylibAdapter) CmakeConfig(pc *config.ProjectConfig) (string, error) { + return CmakeConfig, nil +} + +func (a *RaylibAdapter) Targets(_ *config.ProjectConfig) ([]string, error) { + return nil, nil +} diff --git a/c3pm b/c3pm new file mode 100755 index 0000000..a14b522 Binary files /dev/null and b/c3pm differ