Skip to content

Commit 9bb3519

Browse files
authored
Merge pull request #16 from c3pm-labs/feat/improve-cmake
feat(cmake): Improve cross platform cmake generation
2 parents 87de4fc + 6ea57db commit 9bb3519

File tree

4 files changed

+41
-23
lines changed

4 files changed

+41
-23
lines changed

cmakegen/exec.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmakegen
33
import (
44
"bytes"
55
"fmt"
6+
"strings"
67
"text/template"
78
)
89

@@ -13,33 +14,41 @@ set(CMAKE_CXX_STANDARD {{.LanguageStandard}})
1314
1415
add_executable({{.ProjectName}})
1516
16-
target_sources({{.ProjectName}} PRIVATE {{.Sources}} {{.Includes}})
17-
{{$home:=.Home}}
17+
target_sources({{.ProjectName}} PRIVATE
18+
{{.Sources -}}
19+
{{.Includes}}
20+
)
21+
{{$c3pmGlobalDir:=.C3pmGlobalDir}}
1822
1923
target_include_directories(
20-
{{.ProjectName}} PRIVATE {{.IncludeDirs}}
21-
{{ range .Dependencies }}
22-
{{$name:=.Name}}
23-
{{$version:=.Version}}
24-
{{ range .ExportedIncludeDirs }}
25-
{{$home}}/.c3pm/cache/{{$name}}/{{$version}}/{{.}}
26-
{{ end }}
27-
{{end}}
24+
{{- .ProjectName}} PRIVATE {{.IncludeDirs}}
25+
{{- range .Dependencies }}
26+
{{- $name:=.Name }}
27+
{{- $version:=.Version}}
28+
{{- range .ExportedIncludeDirs }}
29+
{{ $c3pmGlobalDir }}/cache/{{$name}}/{{$version}}/{{.}}
30+
{{- end }}
31+
{{- end }}
2832
)
33+
{{range .Dependencies}}
34+
find_library({{ .Name | ToUpper}} {{.Name}} "{{$c3pmGlobalDir}}/cache/{{.Name}}/{{.Version}}/lib")
35+
{{end}}
2936
3037
target_link_libraries(
3138
{{.ProjectName}}
3239
PUBLIC
33-
{{ range .Dependencies }}
34-
-L{{$home}}/.c3pm/cache/{{.Name}}/{{.Version}}/lib
35-
{{ range .Targets }} -l{{.}} {{end}}
36-
{{end}}
40+
{{range .Dependencies}}
41+
{{"${"}}{{.Name|ToUpper}}{{"}"}}
42+
{{- end}}
3743
)
3844
`
3945

4046
func executable(v CMakeVars) (string, error) {
47+
funcMap := template.FuncMap{
48+
"ToUpper": strings.ToUpper,
49+
}
4150
cmake := bytes.NewBuffer([]byte{})
42-
tmpl, err := template.New("cmakeExecutable").Parse(addPlatformSpecificCmake(executableTemplate, v))
51+
tmpl, err := template.New("cmakeExecutable").Funcs(funcMap).Parse(addPlatformSpecificCmake(executableTemplate, v))
4352
if err != nil {
4453
return "", fmt.Errorf("could not parse cmake template: %w", err)
4554
}

cmakegen/gen.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ type CMakeVars struct {
2626
Includes string
2727
IncludeDirs string
2828
ExportedDir string
29-
Home string
29+
C3pmGlobalDir string
3030
Dependencies []Dependency
3131
PublicIncludeDir string
3232
LinuxConfig *manifest.LinuxConfig
@@ -103,7 +103,7 @@ func varsFromProjectConfig(pc *config.ProjectConfig) (CMakeVars, error) {
103103
Includes: filesSliceToCMake(pc.Manifest.Files.Includes),
104104
IncludeDirs: filesSliceToCMake(pc.Manifest.Files.IncludeDirs),
105105
ExportedDir: filepath.ToSlash(filepath.Join(pc.ProjectRoot, pc.Manifest.Files.ExportedDir)),
106-
Home: filepath.ToSlash(os.Getenv("HOME")),
106+
C3pmGlobalDir: filepath.ToSlash(config.GlobalC3pmDirPath()),
107107
Dependencies: dependencies,
108108
LinuxConfig: pc.Manifest.LinuxConfig,
109109
LanguageStandard: pc.Manifest.Standard,

config/config.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"os"
66
"path"
77
"path/filepath"
8+
"runtime"
89
)
910

1011
type ProjectConfig struct {
@@ -48,7 +49,12 @@ func GlobalC3pmDirPath() string {
4849
if dir := os.Getenv("C3PM_USER_DIR"); dir != "" {
4950
return dir
5051
}
51-
homeDir := os.Getenv("HOME")
52+
var homeDir string
53+
if runtime.GOOS == "windows" {
54+
homeDir = os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
55+
} else {
56+
homeDir = os.Getenv("HOME")
57+
}
5258
return path.Join(homeDir, ".c3pm")
5359
}
5460

ctpm/build.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ import (
1010

1111
func Build(pc *config.ProjectConfig) error {
1212
cmakeVariables := map[string]string{
13-
"CMAKE_LIBRARY_OUTPUT_DIRECTORY": pc.ProjectRoot,
14-
"CMAKE_ARCHIVE_OUTPUT_DIRECTORY": pc.ProjectRoot,
15-
"CMAKE_RUNTIME_OUTPUT_DIRECTORY": pc.ProjectRoot,
16-
"CMAKE_INSTALL_PREFIX": filepath.ToSlash(filepath.Join(config.GlobalC3pmDirPath(), "cache", pc.Manifest.Name, pc.Manifest.Version.String())),
17-
"CMAKE_BUILD_TYPE": "Release",
13+
"CMAKE_LIBRARY_OUTPUT_DIRECTORY": pc.ProjectRoot,
14+
"CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE": pc.ProjectRoot,
15+
"CMAKE_ARCHIVE_OUTPUT_DIRECTORY": pc.ProjectRoot,
16+
"CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE": pc.ProjectRoot,
17+
"CMAKE_RUNTIME_OUTPUT_DIRECTORY": pc.ProjectRoot,
18+
"CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE": pc.ProjectRoot,
19+
"CMAKE_INSTALL_PREFIX": filepath.ToSlash(filepath.Join(config.GlobalC3pmDirPath(), "cache", pc.Manifest.Name, pc.Manifest.Version.String())),
20+
"CMAKE_BUILD_TYPE": "Release",
1821
// Useful for Windows build
1922
//"MSVC_TOOLSET_VERSION": "141",
2023
//"MSVC_VERSION": "1916",

0 commit comments

Comments
 (0)